読者です 読者をやめる 読者になる 読者になる

第4回 Unityゲーム 開発記録 敵の攻撃バリエーションを増やす

f:id:moshi1121:20170306144202p:plain

f:id:moshi1121:20170321213607p:plain

こんな感じに、敵さんに3方向に攻撃をしていただくのが今回の目的です。

 

Instantiate関数を使用して弾を生成しています。弾にはあらかじめ直進方向に進むスクリプトをアタッチしてあります。

さて、Instantiate関数には回転方向を指定する引数が設定されています。見てみましょう。

docs.unity3d.com

public static Object Instantiate(Object original, Vector3 position, Quaternionrotation); 

Object originalには生成するオブジェクトを、Vector3 positionには生成する位置を、Quaternion rotationにはオブジェクトの回転方向を指定するわけですが、最後のQuaternionがなかなか曲者でして、理解できませんでした。

そこでどうしたかというと、とりあえず生成しておいて、あとから回転方向を指定することにしました。一連の流れがこちら。

 var obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,180);
obj.tag = "Enemy_Bullet";

 いったん生成したオブジェクトをobjに保存しておき、transform.Rotateで回転方向を指定しています。最後のtagは自分自身の弾で敵さんが死んでしまわないように設定しています。

これを

var obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,180);
obj.tag = "Enemy_Bullet";

obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,170);
obj.tag = "Enemy_Bullet";

obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,190);
obj.tag = "Enemy_Bullet";

 こうして、10度ずつ向きをずらしてみました。動きを確認してみましょう。


敵の攻撃バリエーションを増やす

 

悪くないのではないのでしょうか。ただ、コードが汚いですね。プレイヤーにも同じような機能を持たせたいので、後々整理します。