レトロゲームプロジェクトの研究(7) サイコロころがし編(DiceGame)
「2Dのプロジェクトばかり紹介してきたけど、3Dのプロジェクトもある。ただゲームとして成立していない、あくまでテンプレートとして作られた物が多い。DiceGameもそうで、サイコロで何かゲームをするわけじゃなく、ただ2つのサイコロを振って、出目を調べる機能しかついていない」
妹「桃鉄とかでサイコロ振ってるところはあったよね。ああいうのに使うのかな?」
「そういう使い方もあるし、単純にサイコロを振るだけのアプリというのもある。ボードゲームやる時にサイコロが手元にないとか、振るだけで楽しいとか」
サイコロを投げる処理
「このプロジェクトはブループリントの量はかなり少ない。レベルブループリントと、サイコロアクターのDiceActor_BPに全部書いてある。ただ内容となると少し難しい部分もある。まず投げる処理だけど、まずサイコロがすっぽり入る領域をGetActorBoundsノードで調べて、その範囲内のランダムな地点からサイコロに衝撃を加えるという仕組みになっている。ちなみにサイコロが2個とも地面にないと駄目という条件になっている。これはなくしても動くから、演出上の好みだろうと思う」
妹「これサイコロを投げてるって感じじゃないよね。ふっ飛ばしてる」
「昔マクドナルドをモチーフにしたポンジャンがうちにあったんだけど、あれのサイコロがたしかこういう感じだった。ボタンを押すとプラスチックケースの中でサイコロがはねる仕組み。子供向けだから、サイコロをなくしたり飲み込んだりしないようになってたんだと思うけど、まあこういうサイコロも現実にありえるということで。”威力は毎回同じぐらいだけど、方向はバラバラで適当にぶっとぶ処理”だから、そういう用途での応用も考えられる」
サイコロの向きを調べる処理
「あとサイコロの向きを調べる処理。これも必要。方法は色々あって、例えば6面全部に薄いコリジョンを付けて地面との接触を調べるとか、Rotationから計算するとか。このプロジェクトの場合は、初期状態のサイコロモデルを基準にして、6面分の法線、つまり面の向きを事前に配列としてSETしてある。その法線とサイコロの向きとを計算して、その面が"だいたい"上を向いてるかどうかを調べている」
妹「"だいたい"っていうのはなんで? サイコロが傾いてるの?」
「そうじゃないけど、サイコロ同士がぶつかったり、箱の隅のほうにいったりすると、たまに上を向かないまま、変な角度で止まっちゃうことがある。そういう場合にだいたいどの面が上なのかを判定出来るようになってる。ただ実際のゲームルールを考えるなら、キッチリ上向かずに止まったケースは振り直しの方がいいのかも」
妹「ところでこれちゃんとサイコロとして機能するのかな? 確率とか」
「ちょっと試した感じだと偏りは感じるんだけど、10回や20回だと偏る方が普通だから、統計を取ってみないとわからない」