前提・実現したいこと
以下のURLを参考にして、2Dゲームで誘導弾を実装しました。
ターゲットである"Enemy"のタグのオブジェクトに向かって理想的な動きはするのですが、ターゲットがなくなった(=null)際にその時点での座標で停止し、Rigidbody2Dの重力で落ちるだけの挙動になります。
そうではなく、
1,ターゲットのいない時は一定の向きに飛ぶ
2,ターゲットが来たら向かっていく
3,ターゲットがなくなった際に現在動いている方向に直進して抜けていく
というような自然な動きで弾を飛ばしたいのですが改善案はありますでしょうか?
該当のソースコード
C#
1void Start() 2 { 3 position = transform.position; 4 rigid = GetComponent<Rigidbody2D>(); 5 target = GameObject.FindWithTag("Enemy"); 6 } 7void Update() 8 { 9 acceleration = new Vector3(5f,15f,0); //初速度 10 Tracking(); 11 } 12 13 void Tracking() 14 { 15 var diff = target.transform.position - transform.position; //ターゲットとの距離 16 17 acceleration += (diff - velocity * period) * 2f / (period * period); //加速度a = 2(d-vt) / t*t 18 19 period -= Time.deltaTime; //period秒後に着弾 20 if (period < 0f) 21 { 22 return; 23 } 24 25 velocity += acceleration * Time.deltaTime; //v = at 26 position += velocity * Time.deltaTime; //d = vt 27 transform.position = position; 28 }
試したこと
Tracking();内の移動処理
{position += velocity * Time.deltaTime; //d = vt
transform.position = position;}
この部分を非アクティブにして
rigid.MovePosition(transform.position + velocity * Time.deltaTime);
こちらをFixedUpdate()で入力したところマシな動きにはなったが射出した弾の何発かが急に謎の方向に吹っ飛んで行ったりした。
個人的な見解として、target = nullの時、diff の値がおかしくなり、accelerationがおかしくなり、という流れは読めるのですが改善策が思いつかないので質問させていただきました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 04:25
2020/07/19 07:24 編集
2020/07/19 10:13 編集
2020/07/19 07:25
2020/07/19 09:45
2020/07/19 09:50