Unityに関連する記事です

 この手順ではインポートしたアセットを利用して1種類目のモグラの障害物の実装していきます。
ゲームを実行すると自動的にモグラが隠れます。キャラが一定範囲に近づくと顔を出して邪魔をするような仕掛けにします。


<実装画像 Sceneビュー>



<実装動画 キャラが一定範囲に侵入するとモグラが顔を出す>
https://gyazo.com/21ace8b032e36e3370fb1bf5029f3a86


手順12 −モグラの障害物の実装−

19.モグラを設置する
20.スクリプトを用意して、モグラの制御を行う


新しく学習する内容


 ・Rigidbody を利用した子オブジェクトのコライダーの判定について
 ・スクリプトによるゲームオブジェクトの移動処理


19.モグラを設置する

1.設計


 障害物と一口にいっても色々なタイプがあります。今回は、始めは隠れていて、近づくと邪魔をするような障害物を設計します。
インポートしたアセット内にモグラのゲームオブジェクトがあり、挙動のイメージ的にも合いますので、こちらを障害物として利用しましょう。

 モグラのゲームオブジェクトはゲーム内の状況に応じて制御を行う必要がありますので、新しくスクリプトを1つ作成して、
それを利用してモグラのゲームオブジェクトを制御させます。

 具体的には、ゲームスタートと同時にモグラを地面の中に隠す処理、一定の距離にペンギンのキャラが近づいたら姿を現す処理などをスクリプトを使って制御します。

 なおここでは、障害物としてキャラの滑るのを邪魔する役割を持っていますが、それ以上の役割やルールは設定していません。

 まずは作業をしやすいように GoalSet ゲームオブジェクトを一時非表示にするか、あるいは斜面の一番下にくるように移動させてください。


GoalSet ゲームオブジェクトを動かす場合



2.Floor ゲームオブジェクトの子オブジェクトとして Obstacles ゲームオブジェクトを作成する


 最初に障害物用のゲームオブジェクトをまとめて管理するためのゲームオブジェクトを作成します。

 Floor ゲームオブジェクトを選択して右クリックをしてメニューを開き、Create Empty を選択します。
新しい空のゲーオブジェクトが作成されますので、名前を Obstacles に変更します。
 このゲームオブジェクトをフォルダ代わりに利用して、障害物関連のゲームオブジェクトをこちらの中に配置します。


ヒエラルキー画像



インスペクター画像


 それではこのゲームオブジェクトを活用して、モグラのゲームオブジェクトを設置していきましょう。


3.Obstacles ゲームオブジェクトの子オブジェクトとして、Mole ゲームオブジェクトを作成する


 Obstacles ゲームオブジェクトの子オブジェクトとして、Mole ゲームオブジェクトを作成します。

 モグラのゲームオブジェクトをフォルダから探して、ヒエラルキー上の Obstacles ゲームオブジェクトにドラッグアンドドロップして作成します。

パス
Assets/JKT_Art/Animals/mole_monster/mole_attack.prefab


フォルダ



インスペクター画像




 名前を Mole に変更します。


ヒエラルキー画像



インスペクター画像



Sceneビュー画像


 続いて、設定を行います。


4.Mole ゲームオブジェクトの設定を行う


 Mole ゲームオブジェクトの設定を行います。

 最初にプレファブの状態を解除します。Mole ゲームオブジェクトの上で右クリックをしてメニューを表示し、
Prefab => Unpack Completely を選択します。これでプレファブ状態ではなく、通常のゲームオブジェクトになります。
ヒエラルキーの青いアイコンや名前が黒い状態に戻ります。





 4つの手順がありますので、順番に設定をしていきます。



 最初に、Transform コンポーネントを操作して、位置・回転・大きさを調整します。
下記のインスペクター画像や、Sceneビュー、Gameビューも見ながら、適宜なサイズに調整してください。
ポイントは、下半身を始めから斜面の中に入るようにして、手がちょこんと出るようにすることです。


Mole ゲームオブジェクト インスペクター画像



Sceneビュー画像



Sceneビュー画像



Gameビュー画像




 次に、Animator コンポーネントの Apply Root Motion のチェックを外してください。
アニメーションには座標の移動を伴う処理が含まれていることがあります。このチェックが入っている場合には、アニメーションに合わせて座標の移動が行われます。
その場合、スクリプトでの座標移動制御が難しいため、こちらのチェックを外すことにより、アニメーションに伴う座標移動を行わなくなり、スクリプトでのみ座標変更が可能になります。


インスペクター画像


LIGHT11 様
【Unity】ルートモーションの概念と設定方法をサクッと理解する
https://light11.hatenadiary.com/entry/2019/04/18/0...



 続いて3つ目です。Rigidbody コンポーネントを追加します。
インスペクターの一番下にある Add Component ボタンを押して、Rigidbody コンポーネントを追加します。

 Use Gravity のチェックを外して重量の影響を受けないようにしてください。また、フラッグのゲームオブジェクトと同じように
FreezeRotation のすべての軸にチェックを入れて斜面のゲームオブジェクトによって滑ったり、キャラと接触したときに動いてしまわないようにしてください。


インスペクター画像



 他には設定の変更はありません。



 最後に、CapsuleCollider コンポーネントを追加します。
インスペクターの一番下にある Add Component ボタンを押して、CapsuleCollider コンポーネントを追加します。

コライダー



 コライダーがかなり小さい可能性がありますので、Edit Collider ボタンを押して、Sceneビューを確認しながら、
コライダーの大きさをモグラのゲームオブジェクトの大きさになるように調整をします。

 ある一定の大きさよりもコライダーが小さくできない状態になった場合には、Direction の設定を変更してコライダーの広げられる軸を変更してみてください。

 下記のインスペクター画像などを参考にしてください。(細かい数字をそのままにする必要はありません)


参考
インスペクター画像



Sceneビュー画像



Sceneビュー画像



Sceneビュー画像



 以上で設定は完了です。


5.Mole ゲームオブジェクトの子オブジェクトとして SeachArea ゲームオブジェクトを作成する


 最後に、Mole ゲームオブジェクトの子オブジェクトに「キャラの侵入を判定するための見えないゲームオブジェクト」を追加します。
このゲームオブジェクトにコライダーを用意して、IsTrigger にチェックを入れて、モグラの前方に配置します。
そしてコライダーの範囲を【キャラの侵入を感知する】範囲として利用します。

 またモグラは斜面の中に隠れるので、コライダーは上方に設置します。


実装画像







 Mole ゲームオブジェクトの上で右クリックをしてメニューを開き、Create Empty を選択します。
新しい空のゲームオブジェクトが作成されますので、名前を SearchArea に変更します。


ヒエラルキー画像



 Transform コンポーネントを Rotation X を -15 にしてください。こうすることで斜面のゲームオブジェクトと角度が一致します。


インスペクター画像




 肝心のコライダーを追加します。
インスペクターの一番下にある Add Component ボタンを押して BoxCollider コンポーネントを追加してください。

 IsTrigger のチェックを忘れずに入れてください

 コライダーの大きさは自由に設計してください。

 前方や横方向に広くするほどキャラの侵入する判定範囲が広くなり、キャラとモグラの位置が遠い段階でモグラが顔を出すようになり、避けるための難易度は下がります。
逆に小さくすればキャラとモグラが近い段階でモグラが顔を出すようになるので、避けるための難易度は上がります。

 ここではある程度の標準とする大きさで用意しておいて、広い狭いの個性を出すのはプレファブ化してからの方がやりやすくなると思います。
下記のインスペクター画像は、Sceneビュー画像のコライダーのサイズになります。


インスペクター画像



Sceneビュー画像



Sceneビュー画像



 以上でモグラのゲームオブジェクトは完了です。


6.<Rigidbody を利用した子オブジェクトのコライダーの判定について>


 親オブジェクトではなく、子オブジェクトにコライダーの設定がある場合、親オブジェクトに Rigidbody コンポーネントを追加しておくことによって
OnTriggerEnter メソッドが反応するようになります

 今回は親オブジェクトである Mole ゲームオブジェクトに Rigidbody コンポーネントがアタッチされていますので
そのおかげで、子オブジェクトの SearchArea が侵入判定を行うことが出来ています

 今後も活用できるテクニックですので、この機会に覚えておきましょう。


20.スクリプトを用意して、モグラの制御を行う

1.設計


 Mole ゲームオブジェクトの設定が完了しましたので、このゲームオブジェクトの制御を行うためのスクリプトを作成します。

 どのような制御を行いたいかを、順番に書き出してみます。

 1.ゲームスタートと同時に、モグラを見えないようにする
 2.キャラが一定の距離に近づいたら、モグラを見えるようにする

 最初の制御ですが、モグラのゲームオブジェクト自体を非表示にして見えなくする方法もありますが、
今回は、斜面のゲームオブジェクトの中に隠すように位置を調整することでゲーム画面から見えない状態にしています。
このように、見えない、という状態を再現するだけでも色々な方法が考えられます

 続くキャラが一定の距離に近づいたら、という処理と、モグラを見えるようにする、という処理は1つずつ実装する手順を考えます。
 
 まず一定の距離に、という部分には、先ほど Mole ゲームオブジェクトの子オブジェクトとして作成した SearchArea ゲームオブジェクトのコライダーを利用します。
モグラのゲームオブジェクトの前方に配置したこのゲームオブジェクトが「一定の距離」として扱うようにします。
そしてこの範囲内にキャラが侵入した状態を「キャラが一定の距離に近づいたら」と判定するように考えてみます。

 その判定が行われて始めて、モグラを見えるようにする、という処理を実行するように連動されます。
モグラは地面の中に隠れている状態ですので、この位置をゲーム開始前の位置に戻してあげれば、モグラを見えるようにすることができるでしょう。

 必要な処理は、モグラのゲームオブジェクトの位置の変更、そして、侵入判定の処理です。

 自分でコメントを書いてみて、処理を実装してみましょう。


2.JumpUpObject スクリプトを作成する


 宣言フィールドには2つの変数を用意しています。
1つはキャラのスタート地点の高さを覚えておくための変数、もう1つはキャラを斜面の中にどの位下げて配置するかの補正値です。

 Start メソッドでは Hide メソッドを呼び出し、ゲーム実行と同時にモグラのいた高さを記録し、
その後、斜面のゲームオブジェクトの中に隠れる位に位置を下げます。

 OnTriggerEnter メソッドを利用して、SearchArea ゲームオブジェクトのコライダーに侵入したゲームオブジェクトのうち、
Player タグのゲームオブジェクトのみ判定を行うように制御をします。これを指定しないと斜面のゲームオブジェクトのコライダーにも反応します。

 Player タグが設定されたゲームオブジェクト(Penguin)のコライダーが侵入した場合、HeadUp メソッドを呼び出して
スタート時点の高さにモグラの位置を戻します。


 以上のように制御することで、モグラを隠しておいて、一定の距離にキャラが侵入した場合にモグラを斜面の上に移動させることで表示させてキャラの邪魔を指せます。


JumpUpObject.cs

<= クリックすると開きます。



3.Mole ゲームオブジェクトに JumpUpObject スクリプトをアタッチする


 作成した JumpUpObject スクリプトが動くように、Mole ゲームオブジェクトにドラッグアンドドロップしてアタッチします。


Mole ゲームオブジェクト インスペクター画像


 
 最後に Penguin ゲームオブジェクトの設定を行います。


4.Penguin ゲームオブジェクトに Tag を設定する


 JumpUpObject スクリプトの OnTriggerEnter メソッドの条件式に合致するように、Penguin ゲームオブジェクトの Tag を Player に設定します。
 

Penguin ゲームオブジェクト インスペクター画像



 これで Penguin ゲームオブジェクトの Tagによって、OnTriggerEnter メソッドの処理の if 分岐文の条件が満たされることになり、
Penguin ゲームオブジェクトがコライダーに侵入すると、HeadUp メソッドが実行されるようになります。


5.ゲームを実行して動作を確認する


 すべての設定が完了しましたので、ゲームを実行してキャラをモグラのSearchArea ゲームオブジェクトのコライダーの中に侵入させてください。
Debug.Log として Console に Penguin ゲームオブジェクトの Tag が表示されます。また、ゲーム上では隠れていたモグラが顔を出せば制御成功です。

 Sceneビューも合わせて確認しましょう。


<実行動画>
https://gyazo.com/3006f29acc1842d834393deaa8d4ab84


 もしも SearchArea のコライダーに侵入できない場合には、IsTrigger のスイッチが入っているかを確認します。
また侵入はできるものの OnTriggerEnter メソッドが実行されない場合には、Mole ゲームオブジェクトに Rigidbody コンポーネントがアタッチされているかを確認します。


 以上でこの手順は終了です。

 次は 手順13 −DOTweenによる補間処理の実装− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます