13.敵に射撃がヒットした時、ノックバックする
今回の実装は大きく2つ。本当は1つでもよいのだが、よりコンセプトをとがらせるため追加の実装を行う。
* 銃から発射しているRayが敵にヒットした時、Rayの方向に敵を移動させる
* ノックバックの距離と角度にすこしランダム性を持たせる
* 予定調和にせず緊張感を保たせたい
Rayが敵にヒットした時、Rayの方向に敵を移動させる
ヒットした時の処理に、Rigidbody.AddForce(shootRay.direction)を追加すれば実装できると思っていたが、試してみたところAddForceが効いている感じがない。
公式リファレンスを確認してみると、NavMeshAgentを付与したキャラクターを動かしたいときには、NavMeshAgent.velocityを使えとのこと。
ではそれを踏まえてもう一度。PlayerShootingクラスをいじっているが、EnemyMovementクラスに新たなメソッドを用意してもいいかもしれない。
武器種によってノックバック距離を変えるならPlayerShootingくらす、エネミーによるならEnemyMovementクラスに書くのがよいのだろうが、両方でやりたい場合はどうしたらいいだろうか。今は分からないので棚上げにして、実装を進めよう(EnemyMovementクラスに記述して、PlayerShootingクラスから調整用の引数を渡して実行、が正解な気がする)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//ノックバックの強さ public int nbPower = 10; void Shoot () { (略) if(Physics.Raycast (shootRay, out shootHit, range, shootableMask)) { EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); if(enemyHealth != null) { (略) //ノックバックの実装 shootHit.collider.GetComponent<UnityEngine.AI.NavMeshAgent>().velocity = shootRay.direction.normalized * nbPower; } (略) } |
挙動はこんな感じ。
ノックバックの距離と角度にランダム性を持たせる
上まで出来ていればそう難しくない。
距離はnbPowerの取る値をランダム化させれば良いし、角度もshootRay.directionのxとzの値に少しランダム値を±させてやればよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//ノックバックの強さ振れ幅 public int maxNbPower = 10; void Shoot () { (略) if(Physics.Raycast (shootRay, out shootHit, range, shootableMask)) { EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); if(enemyHealth != null) { enemyHealth.TakeDamage (damagePerShot, shootHit.point); //ノックバックの実装 //ノックバック角度の振れ幅 float x = Random.Range(-10.0f, 10.0f); float y = Random.Range(-10.0f, 10.0f); //ノックバック距離の振れ幅 int nbPower = Random.Range(1, maxNbPower); //角度の振れ幅を加算 shootRay.direction += new Vector3(x, 0, y); //距離の振れ幅を乗算して代入 shootHit.collider.GetComponent<UnityEngine.AI.NavMeshAgent>().velocity = shootRay.direction.normalized * nbPower; } (略) } |
これで実装できたのがコチラ。値の幅は調整の余地があるけども、ランダムでノックバックするようになりました。ただ、触ってみた感触もしかしたらランダムいらないかも。思ったより違和感がある。値の調整でも違和感が拭い去れなければ削除しよう。
次回はコチラ
Unity公式チュートリアルSurvival Shooter WITH PK Chapter.14「武器変更を実装する」
前回はコチラ
Unity公式チュートリアルSurvival Shooter WITH PK Chapter.12「射撃にリロードを設ける」
「Unity公式チュートリアルSurvival Shooter WITH PK Chapter.13「敵に射撃がヒットした時、ノックバックする」」への1件のフィードバック