サイコロ物理シミュレーションアプリを作ってみました。
(apps.apple.com)こんにちは。初めての個人アプリ Dicey をリリースしました。iOS向けの物理サイコロアプリです。
娘とボードゲームをしようとしたのですがサイコロがなくて、デジタルサイコロアプリを探してみたものの、実際に振って転がすタイプのアプリが見当たりませんでした。ほとんどはボタンを押すと数字が出て、転がるアニメーションをかぶせただけのRNG方式でした。振ることを検知するアプリもありましたが、「振った」という事実しか分からず、方向情報はありませんでした。おかしいなと思って、自分で作ってみようと考えました。
しばらくして育児休暇に入ることになったのですが、育児だけしているのも何だし、ほかにアイデアもなかったので、これを作ることにしました。
Unity Physicsをよく知らなかったので、かなり苦労しました。摩擦を上げるとサイコロの一つの頂点が床に張り付き、張り付かないようにすると転がらず滑るだけになる――このジレンマのせいで摩擦値を5から120まで上げてみたり、接触点の数で摩擦を補正したり、頂点が触れたらランダムトルクで倒したり、いろいろやりました。後で分かったのですが、単にPhysicsの設定をいくつか変えるだけで解決する問題だったんですよね。^^;
自分はFold6を使っているのですが、Galaxyの振動は昔より良くなったとはいえ、短くてはっきりした打撃感が出ませんでした。iPhoneの振動が良いのは知っていたので、中古のiPhone 14とMacBook Airを買ってiOSに移植して動かしてみたら、感触が一気に伝わってきました。そこで開発途中からiOSをメインに切り替えました。
そうして作業していたある日、App Storeで dice を検索してみたら、Shake 'em Dice というアプリがすでにありました。振って転がすことも、サイコロの追加方法も自分のものと似ていました。終わった、と思いました。でもすでにかなり時間を使っていたし、ハプティクスは自分のほうが上だと思って、そのまま進めました。Appleも最初の提出を「既存アプリと類似しすぎている」として却下しました(4.3a)。そこで、もともと有料にするつもりだった「カップ変更」を差別化要素として前倒しし、壁にぶつかる音がサイコロの音ではなく楽器の音になるカップモードを作りました。
カップを八角形に変えて、各壁にドレミを割り当てました。サイコロを壁に当てるとその音が鳴ります。パチンコのように引いて飛ばすと、狙った壁を狙撃してメロディを演奏できますし、振ると複数の音が一気に鳴ったりもします。自動演奏で聴くとオルゴールのような感じもあります。内部的にはMIDIファイルをパースして楽譜として使い、音の強さまで反映して壁を叩く強さ(=音量)に適用しています。ユーザーが直接MIDIを入れて好きな曲を演奏できるようにするのも、技術的にはそれほど難しくないのですが、そうしたい人がいるのかは分かりません。
ここからが悩みです。
一つは、音楽カップの方向性が正しいのかということ。もっと深掘りする余地はあります(打撃強度ごとの音色収録、楽器の追加、TRPG向けのサイコロ合計計算ルールなど)。でも、そもそもサイコロで音楽を演奏したい人が本当にいるのか分かりません。モバイルのサイコロ自体が現実のサイコロの代用品なので、需要もそれほど大きくない気がします。一人で楽しく作ったものなので確信がありません。それでもMIDI自動演奏をぼんやり眺めていると、視聴覚的に癒やされる感じはあります――でもそれは自分に愛着があるからで、楽しんでいるのが自分だけという可能性もあるなと思っています。^^;
もう一つは、もっと根本的な悩みです。みんなSaaSや開発者ツールのような儲かるものを作っているのに、自分は大きな時間をかけて「これを一人で作ったら面白そうだ」ということに時間を全部使っていたんですよね。派手でも格好よくもなく、内容もシンプルなのに、宣伝がなかったとしても受け取る人がいないので――もっと市場性のあるテーマを探すべきなのかとも思っています。
収益モデルは今のところ完全無料、広告なし、アプリ内課金なしです。基本機能にお金を取るのが好きではないので。今後はプレミアムなカップデザインや変わったサイコロくらいをアプリ内課金にしようかと思っていますが、これが正しい方向なのかも分かりません。
完成までやり切った初めてのプロジェクトなので、よく作れたというよりは、とにかく最後まで終わらせようという気持ちで作りました。使ってみて率直な反応をいただけたら本当に助かります。
2件のコメント
容量が……420MB。0を1つ取ってくれていたら、もっとよかったと思います。
そうですね。機能の問題ではないからとずっと先送りにしてきましたが、容量の最適化をしないといけませんね。ご意見ありがとうございます。