古典的な倉庫番パズルをUnityで作ってみたいと思います。最初の実作なので簡単なことしかしておらず、初心者向けです。使っているスクリプトやコンポーネントの解説は各記事を参照していただく形です。
Unityで技術的にどうやって作るかという記事なので、パズルの作り方については特に何も解説してません(というか、解説できません)。
成果物

荷物を押してゴールまで運ぶ倉庫番パズルを作ります。
倉庫番パズルの作り方

背景を透過させたpng画像を用意します。フォトショやクリスタで作れますし、ネットにも色々落ちてます。
画像はドラッグなどでアセット化し、プロジェクトビューからシーンビューにドラッグするなどしてオブジェクト化します。
画像はドラッグなどでアセット化し、プロジェクトビューからシーンビューにドラッグするなどしてオブジェクト化します。
キー操作でキツネを動かすスクリプトを作成し、アタッチします。

壁を配置して、コライダーを設定します。

pngの場合、当たり判定が画像の有効部分を元に計算されます。コライダーのサイズの値を微調整し、

壁にぶつかった時に違和感なく止まるようにします。

壁をプレハブ化し、たくさん用意します。壁の位置も数値で指定します。

荷物(樽)画像をオブジェクト化し、コライダーとリジッドボディを設定します。

キツネと荷物は、リジッドボディで回転を固定しておきます。

これで押せば荷物が動くようになりましたが、どこまでもツルツル滑っていってしまうので、

リニアの抗力もちょっと高くしておきます。

ステージを作り、ゴールを配置し、クリアの文字をオブジェクトとして置きます。
衝突した時にイベントが起こるようにメソッドを作り、
特定のオブジェクトに接触した時、「クリア」を表示するスクリプトを作って、

荷物にアタッチします。キツネがゴールに触ってもクリアにならないようにしないと、めちゃくちゃ簡単なパズルになります。
If文の対象のオブジェクト名にも注意してください。
If文の対象のオブジェクト名にも注意してください。

インスペクターで、変数にクリアした時表示するオブジェクトをセットします。

これでほぼ完成。
音楽を付ける
あとはおまけで簡単なBGMを付けて、自動で鳴るようにしておきます。

ゲームオブジェクト同様にpublicでAudio Sourceを宣言し(変数名はaudioSourceとしました)、

ヒエラルキーからオブジェクトをドラッグしてセットすると、●●オブジェクトのAudioSourceコンポーネントという形で変数に登録できるので、

クリア時はaudioSource.Stop();とするだけで、BGMを止めることができます。
ビルドして公開
本作はUnityroomで公開しています(簡易倉庫番、PCのみ対応)。良かったら遊んでみてください。

やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント