どうも、チャーさんです。
あなたはUnityで敵に索敵機能をつけたいですか?
この記事ではUnityで敵に索敵機能をつける方法を説明します。
なので、
この記事を読めば、あなたは敵に索敵機能をつけることができます。
ですが、この記事を読まないと、索敵機能を作るのに
時間がかかって苦労すると思いますので、
unityで敵に索敵機能を持たせたいなら、
ぜひこのまま記事を読んでください。
動画はこちら
目次
Unityで敵に索敵機能を持たせるにはこの3つをしましょう
ということで、本題です。
Unityで敵に索敵機能を持たせるには、大まかに以下をすれば可能です。
- 敵オブジェクトにSphere Colliderをつける。
- OnTriggerStayメソッドを使う。
- 索敵範囲にプレイヤーが入った時の敵の動作を決める。
(この記事ではプレイヤーに向かって進んでくるを例にします)
をすれば敵に索敵機能をつけることができます。
ということで1つずつ説明していきます。
まず、
敵オブジェクトにSphere Colliderをつける
ですが、このSphere Colliderがいわゆる索敵エリアに
なります。索敵の範囲ですね。
ということでまず早速、敵オブジェクトにSphere Colliderを
セットしてください。
Sphere Colliderは、Add Componentをクリックして
Physicsをクリックすると出てきます。
そしてSphere Colliderをセットしたら、その中の、
Radius(半径という意味)の数字を1,2,3,4と大きくして
みてください。
すると、球状のColliderの範囲がどんどん大きくなりますね。
このColliderの範囲が敵オブジェクトの索敵範囲になりまして、
例えばプレイヤーがこのColliderの範囲に入ると、
敵オブジェクトが敵(敵からみた敵はプレイヤー)を発見した
状態になります。
*ココ大事です
で、ここで大事なのですが、このままだと索敵範囲として
設定したColliderとぶつかってしまうので、
コンポーネントのSphere ColliderにあるIsTriggerという
部分をクリックして、チェックをつけるようにしましょう。
こうすると、プレイヤーが敵の索敵範囲に入っても
オブジェクト同士が衝突して索敵範囲に入れないと
いうことがなくなり、
プレイヤーがColliderの中に侵入できるようになります。
こうしないと索敵はできないので、ぜひ忘れずやりましょう。
で次に、
OnTriggerStayメソッドを使おう
ですが、
このメソッドを使うと、先ほど設定したSphere Collider(索敵範囲)
にプレイヤーが侵入したとき、敵オブジェクトに何らかの
動作をさせることができます。
ゲームでは、敵の索敵範囲にプレイヤーが侵入すると
何かしらのアクションを取るので、
OnTriggerStayメソッドを使うことで、それを実現できます。
でコードとしては、以下です。
void OnTriggerStay(Collider col){
}
このように記述すると、敵の索敵範囲に何かオブジェクトが
侵入すると、中括弧の中にある記述が、発動するという
形です。
とりあえず試すのに簡単なのは以下のコードです。
void OnTriggerStay(Collider col){
Debug.Log(“見つけた!”);
}
これをスクリプトに書いて、敵オブジェクトの
コンポーネントに貼り付けて、実行モードにして、
何かしらオブジェクトを敵の索敵範囲に入れてみましょう。
すると、console画面に見つけた!って表示されるようになります。
で次に、
索敵範囲にプレイヤーが入った時の敵の動作を決めよう
ですが、この記事では索敵範囲に入ったら、
敵がプレイヤーの方を向いて追いかけてくるという機能を
作ります。
難しく感じるかもですが、コードは簡単です。
以下の変数宣言と、OnTriggerStayの部分のコードを足しましょう。
public Transform player;
void Start()
{
}
void OnTriggerStay(Collider col){
if(col.gameObject.name == “player”){
transform.LookAt(player);
transform.Translate(0,0,0.1f);
}
}
そして、プレイヤーにあたるオブジェクトには
playerという名前をつけて、
このコードを保存して、敵オブジェクトに
貼り付けたらインスペクターにある変数部分にHierarchyにある
プレイヤーオブジェクトをドラッグアンドドロップして、
プレイヤーオブジェクトを取得しましょう。
するとプレイヤーが敵オブジェクトの索敵範囲に入った瞬間、
プレイヤーに向かって進んできます。
コードの補足説明
でこれはなぜそうなるかとか、コードに関して
一応補足説明しておきます。
まず、transform.LookAt(player);
ですが、このメソッドは、()の引数の中に指定した
オブジェクトの方を見るというメソッドになります。
でこれをすることで敵オブジェクトは、
プレイヤーが敵の索敵範囲に入った瞬間、プレイヤーの方角に
振り向くようになります。
また引数にはTransform型のオブジェクト情報を
指定する必要があるので、
public Transform player;
の変数宣言部分で、プレイヤーオブジェクトの
transform情報を取得してるわけです。
で次に、
transform.Translate(0,0,0.1f);
ですが、これをかくと、プレイヤーに向かって
敵オブジェクトが前進するようになります。
transform.Translateはオブジェクトを移動させるメソッド
でして、引数()の中に数字を指定すると、
進む方向を指定できます。
LookAtと組み合わせる場合、z軸に進ませる必要があるので、
()の中で3番目(x,y,zの順)に進ませたい速さを指定しましょう。
ということでコードの補足説明は以上ですが、
これで敵に索敵機能を持たせ、
索敵範囲にプレイヤーが侵入したら、プレイヤーに
向かって進んでくるという機能を作ることができました。
まとめ
ということでこの記事のまとめに入ります。
Unityで敵に索敵機能を持たせたいなら、
大まかに、
- 敵オブジェクトにSphere Colliderをつける。
- OnTriggerStayメソッドを使う。
- 索敵範囲にプレイヤーが入った時の敵の動作を決める。
をすれば良いです。
するとあなたのUnityにいる敵オブジェクトが、
索敵をしてプレイヤーが侵入したら何か色々させることが
できます。(もちろんプレイヤーを攻撃してくるとかも)
そうしたらゲーム的に面白い感じになるので、
ぜひ今回の記事の内容を実践して、
敵に索敵機能を持たせてみてください。
ということで、以上です。
読んでいただきありがとうございました。
チャーさん