【Unity】15パズル&ジグソーパズルのシャッフル

ブログをサボっている間、パズルのシャッフルを考えていました。
ピースの動作は割と簡単に出来たのですがシャッフルが難しくて…

いろいろ試して試行錯誤の上、やっと完成する事ができました。



まずは15パズルから
シャッフルボタンを押すとピースが自動的にシャッフルされます。





ジグソーはピースが飛んで行くようにしてみました。


どちらも動作が1ピース毎に処理をしないといけないので、
ピースの動きが連動するように動きにウェイトを掛けないとダメです。

ローテーションパズルの時に悩んだ処理です。

ようやくIEnumeratorの使い方が分かって実装できるようになりました。


それぞれのパズルの難しかった点ですが、

・15パズル
ランダム変数を使ったのですが、0番ピースを起点に
方向を0~3に振って、方向をランダム変数で指定しました。
0上1右の感じです。

ランダム変数の範囲は0~4を指定して、出た目に0番を動かして行く。
ただ、ランダム変数に偏りが出るのでピースが下に行ったと思ったら
上に戻るみたいなのが、度々起こったので正直悩みました。

なので移動先に戻らないように処理をして動かしています。
この処理がかなり難しい感じでした~(;´・`)> ふぅ


・ジグソーパズル
飛んでいく座標範囲を設定して、ランダム変数で座標を指定しました。
飛ぶ処理はDoTweenです。

ピースが飛んで行くのですが、ピースのレイヤー順に飛ばさないと
全面にあるピースの裏を通るので、前回使ったSetSiblingIndexをフルに使いました。
ピースをランダムで選定して、最前面レイヤーにして飛ばす。


それぞれのパズルのシャッフルをコルーチンを使って、
ピース毎にウェイトを掛ける所も結構悩んだ感じです。


一応、両パズルもこれでゲームらしくなりました。

残るはクリアの演出ができれば、システムとしては機能するかと思います。
これで完成!とは喜べないですね~

最大の難関、絵をどうするか…
何かいいイラストとかないでしょうかね~ (´・ω・`)

この記事へのコメント