妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ルーレットの作り方(10) どのマス目が出るか均等になるように作る

f:id:una_unagi:20180619232837g:plain

「スペースキーを押すと回転するようにしてみた。回って止まるだけの単純なプログラムなんだけど、問題はこれが結果が均等に出るように作ること。前にサイコロを作った時と同じ話なんだけど」

imoue.hatenablog.com

「例えば必ず半回転するって決まってると、今と逆方向にあるマスが必ず出る。ランダムにずらしたとしても、100~190度の範囲で回転させるとかだと、絶対に出ない目ができる。これは何か意図があるのでなければ、よくない仕組み」

妹「じゃあルーレットを最初に回転させとくの?」

「それが一番ベストなやり方ではあるけど、サイコロの場合と違って全方向ランダム回転だとルーレットごと傾いちゃうし、物理次第のサイコロと違って計算での解決もできる」

f:id:una_unagi:20180619235046p:plain
基本的には昨日と同じだけど、分割数で割った数が分割数と同じになってしまうことがあったので
そうならないように調整
(小数の計算誤差で、359.9度ぐらいのがギリギリ割り切れちゃうのかも)

f:id:una_unagi:20180619235427p:plain
スペースキーを押した時の回転処理
流れが把握しやすいように、TickじゃなくDelayで処理
(ForLoopやWhileLoopだとDelayを無視して次に進んじゃうので、Branchと白い線のループで作成)

「今回は3回転+1回転未満のランダムな回転という風な仕組みになってる。最初にランダムに回転させたあと、3回転させたという風にも考えられる。ランダムの部分が均等になってれば、あとは4回転でも5回転でもいいんだけど、ある程度の長さは必要。そうしないとちょっと動いてピタッと止まったらなんかおかしいから。た人生ゲームのルーレットで手がすべってそんな風になる時あるけど」

妹「自分で回すパワーを決めるというのは?」

「回す力加減を操作で決めたり、自分でタイミングをはかって止めるというのもできる。ただ確率的には均等じゃなくなるし、場合によっては狙って出せるんで、そのへんをどう考えるか」

「もう1点注意が必要なのが、1度に回転させる量。これも1度に2マスずつ進むと、1周する間に止まらないマスが出来る。今回の場合11マスだから、ランダムの幅を1周じゃなく2周すればいい。2と11の最小公倍数が22だということなんだけど……3マスなら3回転、4マスなら4回転の幅のランダムにすれば均等になるはず。でもこれがもし10マスだと、2マスや5マスずつ回転させちゃうと、何周しても止まらないマスが出てくる。1以外の割り切れる数のマス目を進めると駄目

妹「そんなキリがいい数字じゃなくて、もっと微妙な角度で回してみたら?」

「小数の場合も基本的には同じ、割り切れるかどうかとか、ルーレットが全部均等に回る分だけランダムにできてるかとか。今回はマス目の半分だけ動かすようにしたから、マス目の数がいくつでも関係なく、半マス分~1周分で、各マスに2回ずつ均等に機会が来るようになってる。

roulette_10.zip - Google ドライブ
今日の分のデータ