Unityみなさんこんにちは!先日参加したUnityのワークショップ”Unityでゲームを作ろう!vol.1′′で制作した内容の復習を兼ねたチュートリアルを今回もお送りします。ワークショップの内容についてはこちらの記事で紹介していますので是非ご覧ください。迷路をつくるまずはワークショップの後半で制作した、迷路をもう一度作ってみたいと思います。選択してシーンに配置。10mなのでこのままにしておきます。オブジェクト名は”Floot”に変更。Resetを選択して値をデフォルト値にリセットしておきましょう。壁のモデリング次に外壁の作成です。Cubeオブジェクトをシーンに配置します。外壁のオブジェクト名とTransformの値は次の通りです。Z10床と外壁ができました。スタートからゴールまでのルートをつくるワークショップの手順では、スタートからゴールまでのルートをCubeオブジェクトを使用してレイアウトする作業を行いましたが、今回は方法をアレンジしてみたいと思います。そもそもどんな風に迷路のルートをレイアウトしてよいのか?迷路を描く方法について調べてみました。分かりやすく書いてありました。分かったのは、正しい迷路はスタートからゴールまでのルートが一つだけ。...ということだそうです。知りました!正しい迷路はスタートからゴールまでのルートが一つだけ。大事なことなので2回言いました。掲載されている迷路の作り方について一部内容を引用させてもらいます。Step1四方の外壁から壁を配置する。壁はグリッドの交点で直角に曲がることができる。壁が他の壁に合流、交差してはならない。壁の先端が、その壁自身に合流、交差してはならない。Step2Step1で配置した壁を分岐または延長する。壁の配置ルールはStep1に準ずる。Step3さらに壁を分岐、延長する。外壁から新たに壁を追加してもよい。壁は何度分岐してもよい。壁の配置ルールはStep1に準ずる。グリッドすべての交点に壁が配置されるまで分岐と延長を続ける。Step4スタートとゴールを決める。どこにスタートとゴールを設定しても正解ルートが一つだけの迷路になる。内壁のパーツを作成どこにスタートとゴールを設定していも正解ルートが一つだけになる理屈がイマイチ理解できていないですが、手順通りにやってみましょう。四方の外壁から壁を配置します。配置する壁はCubeオブジェクトのサイズを調整して3種類の長さのオブジェクトを用意。それぞれのオブジェクトのファイル名とスケールは次の通りです。Z0.2サイズを調整したオブジェクトを[Project]ウィンドウにドラッグしてプレハブに変換します。x1′′はシーンのグリッドの交点に配置した際に座標値が0.5となるため、スナップ設定を変更しておきます。Settings]ウィンドウが開いたら値を0.5に変更します。標準マテリアルのまま壁を配置すると壁も床も白色で分かりづらいのでマテリアル”Floor”と”Wall”を作成してそれぞれ設定しました。四方の外壁から壁を配置する迷路を描く方法の手順を参考に外壁からそれぞれ壁を伸ばしてみます。Ctrlキーを押しながらプレハブオブジェクトを移動すると先ほど設定を変更した通り、0.5単位でスナップします。こんな感じで配置してみました。壁を分岐または延長する配置した壁から枝分かれする壁を配置します。自分の壁や他の壁と合流、交差しないように注意します。Dキーを使ってシーンのプレハブを複製しながらサクサク配置しました。すべてのグリッドの交点に壁を配置するさらに枝壁を追加し、外壁からも新たに壁を追加してすべてのグリッドの交点に壁を配置します。こんな感じになりました。実際に壁を配置してみた感じでは、スタートからゴールまでのルートが一つだけの迷路を作る際のチェックポイントは次のようになると思います。複数の外壁と接続している場合は壁で閉じられた範囲が発生している。接続していない壁がある場合は正解ルートが複数発生している。迷路をマウスで操作してボールを転がす迷路をつくるワークショップではCapsuleオブジェクトをプレイヤーとして配置。用意されたスクリプトを割り当てて矢印キーで操作するという内容でしたが今回はちょっとアレンジ。Sphereオブジェクトをプレイヤーオブジェクトにして、迷路そのものをマウス操作で傾けて転がすようにしたいと思います。マウスで操作で迷路を操作するためのオブジェクト階層を作成するまずはマウス操作用のスクリプトを割り当てるEmptyオブジェクトをシーンに用意しましょう。オブジェクト名を”Rotator”に変更します。迷路のオブジェクトはすべて”Rotator”の子供にします。[Hierarchy]ウィンドウでみるとこのような階層になります。マウス操作で迷路を操作するためのスクリプトを割り当てるそれではマウス操作で傾きを操作するためのスクリプトを追加しましょう。インポートされたファイルを[Project]ウィンドウで確認すると色々とスクリプトファイルがあります。この中から”SimpleMouseRotator”を使用します。[Inspector]ウィンドウにドラッグ&ドロップします。ゲームを再生して動きを確認してみましょう。前後には傾きますが左右に傾きません。X軸とY軸方向に回転するのでオブジェクト”Rotator”のZ軸が下方向になるように調整。”SimpleMouseRotator”コンポーネントの値も次のように調整しました。マウスを上下に移動すると迷路が前後に傾き、マウスを左右に移動すると迷路も左右に傾くようになりました。ボールオブジェクトをシーンに追加Sphereオブジェクトをシーンに追加して名前を”Ball”に変更。Scaleの値をXYZそれぞれ0.5に変更して迷路の角に配置。Rigedbodyを選択してコンポーネントを追加します。マテリアルも追加しておきましょう。カメラ調整をして動作確認カメラの位置と角度、画角を調整しておきます。今回は次のように調整しました。再生ボタンをクリックして動きを確認してみましょう。なんと!ボールが床を突き抜けて落下してしまいます。調べたところ、物理挙動のあたり判定を行うRigedbodyコンポーネントを付けたオブジェクト、今回の場合は”Ball”オブジェクトは、自分自身が停止すると物理挙動処理も一時停止するそうです。ボールが停止してあたり判定が行われない状態で迷路を傾けたので床や壁をすり抜けてしまったということになります。簡単な回避方法は床のオブジェクト”Floor”にもRigedbodyコンポーネントを追加すれば大丈夫ということです。[Hierarchy]ウィンドウでオブジェクト”Floor”を選択。Rigedbodyを選択してコンポーネントを追加。Kinematic”のチェックを入れておきます。一度ゲームを再生しましょう。今度はボールが停止した状態で迷路を傾けても床をすり抜けません。うまくいきました!壁の高さが高いとボールが見えにくいので調整しました。迷路を傾けた時にボールが壁を跳び越す恐れがあるのでオブジェクト”Floor”を複製して名前を”Ceiling”に変更。向きを180度反転して見えない天井として設置しました。迷路のゴール位置に目印としてCubeオブジェクトを配置して青色のマテリアルを設定しました。WebGLビルドというわけでここまでの内容をWebGLでビルドしてみました。ボールがゴール地点に着いた場合のアクションや制限時間などが無いのでゲームの形にはなっていませんが、別の機会に続きをやってみたいと思います。今回は正しい迷路はスタートからゴールに至る正解ルートが一つだけということを知ることができたのが一番の収穫!?しかし今回作ったような全体が見渡せる視点で迷路ゲームをつくる場合、複数のルートが存在しても途中にトラップ設置するなどしてゴールタイムを競うゲームにしてもいいかもしれませんね。@corevale_com関連記事unityroomのユーザー登録からゲームファイルのアップロードまで今回はUnityで作成してWebGL形式でビルドしたゲームを公開できるポータルサイト"unityroom"に公開してみたいと思います。2Dシューティングに挑戦Unity公式サイトに掲載されているチュートリアルの2Dシューティングに挑戦。今回は敵機のフォーメーションとスコア実装のステップを行いました。使用されているスクリプトベースの...記事を読むUnity:ローカルプレイヤーの特定~マルチプレイヤーネットワーキングのチュートリアルに挑戦Unityの公式チュートリアルに掲載されているマルチプレイヤーネットワーキングを勉強を進めている様子をお送りします。2017.2アップデートをチェック。JavaScriptが作成できなくなりました!ご意見ご感想お待ちしています。コメントデータの処理方法の詳細はこちらをご覧ください。ただいまゲーム制作中.。