【Unity】クリックしたオブジェクトの位置を交換する

脱出ゲームでよくあるオブジェクトの位置を交換するギミックを作ってみました。

 

まずはペットボトルのクラスを作り列挙型COLORで色を管理することにしました。

このように列挙型enumを使ってペットボトルの色を判定できるようにしています。

次にペットボトルがクリックされた時の処理をSwitchObjクラスに実装していきます。

使用する変数は以下のとおりです。

input,correct,someEventはpublicにしておくことでUnityエディタ上で設定することができます。

フレキシブルにデフォルトのペットボトルの配置を変えたり、正解順序を変えたり、正解時に発生するイベントを設定できるので便利です。

次に大事なクリック時の処理を実装します。

仕組みとしては以下の通り。

  1. クリックされたらオブジェクトの位置を保存する
  2. クリックが2回目だったら位置を交換する

コードを見ていきましょう。

正解をチェックする時にはSequenceEqualを使っています。

これはデフォルトでは使えないのでusing System.Linq;を忘れないようにしましょう。

またクリックされたペットボトルの順番を検索するためにArray.IndexOfを使って配列の添字を検索しています。

ペットボトルの位置が左から1番目だったら0、2番目だったら1、、、というようにインデックスで順番を覚えておきます。

これは後で色のスワップをする時に必要な情報となります。

スワップする時には、オブジェクトの位置をスワップする関数と色をスワップする2つがあります。

それぞれの処理は以下の通りです。

一度変数の中身を退避してからスワップするようにしています。

配列やインデックスをグローバルに宣言しているので関数に引数を持たなくて良いのです。

おわり。