敵から飛んでくる弾が、プレーヤーの位置を正確に捉えるのではなく、誤差をつけて命中率を下げるしくみを作成しましょう。
自機(プレーヤー)に向けて1秒おきに発射されるSphere。
ランダムで少しポイントがずれています。
関連記事:
自機狙い(プレーヤーに向けた)発射 -3Dゲーム
ボールをキャッチして投げ返す
キャラクターコントローラーに発射機能
3D空間でプレーヤーを追いかけるオブジェクト
狙う位置をランダムでずらす
Cubeを2個作成し、それぞれの名前をEnemy、Playerとします。
Playerを青、Enemyを赤に設定し、距離をとります。
Sphereを作成し、リジッドボディを追加。
プロジェクトビューにドラッグ&ドロップし、プレハブ化します。
Sphereの元データは削除しておきます。
BallShot.csを作成し、Enemyに追加します。
BallShot.csを記述します。
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 33 34 35 36 37 38 39 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { [SerializeField] GameObject player; [SerializeField] GameObject ball; private float ballPower = 30.0f; private float time = 1.0f; private float randomX; private float randomY; private Vector3 targetPos; void Update() { transform.LookAt(targetPos); time -= Time.deltaTime; if(time <= 0) { randomX = Random.Range(-1.0f, 1.0f); randomY = Random.Range(-1.0f, 1.0f); targetPos = new Vector3( player.transform.position.x + randomX, player.transform.position.y + randomY, player.transform.position.z ); Shot(); time = 1.0f; } } void Shot() { GameObject shotObj = Instantiate(ball, transform.position, Quaternion.identity); shotObj.GetComponent<Rigidbody>().velocity = transform.forward * ballPower; } } |
PlayerとBallのフィールドに、それぞれのオブジェクトを入れます。
ゲームプレイしてみましょう。
1秒おきにプレーヤーに向けて発射。
ランダムで少しずつ位置がずれて、プレーヤーに当たります。
関連記事:
自機狙い(プレーヤーに向けた)発射 -3Dゲーム
ボールをキャッチして投げ返す
キャラクターコントローラーに発射機能
3D空間でプレーヤーを追いかけるオブジェクト