私は発射体のポイントを地上のある高さに持っており、敵(右から左へ、そして水平軸の射撃点に向かって移動している)は地面にあります.私が持っている発射体の動きは、角度をつけて下向きの動きで直接発射します敵ですが、発射体が最初に上向きになり、次に敵を撃ちたいと思います。
以下にスナップショットを添付しました。
これが私のコードです:
using UnityEngine;
using System.Collections;
public class bullet : MonoBehaviour {
public Transform target;
private Transform mytransform;
public GameObject bulletprefab;
public GameObject enemyprefab;
private gamenemy e;
public float firingAngle = 20;
public float gravity = 9.8f;
void Awake()
{
mytransform = transform;
}
// Use this for initialization
void Start () {
mytransform.LookAt(target);
StartCoroutine (project ());
//follow();
}
IEnumerator project()
{ yield return new WaitForSeconds(0.25f);
float target_Distance = Vector3.Distance(mytransform.position * target_Distance , target.position);
// Calculate the velocity needed to throw the object to the target at specified angle.
float projectile_Velocity = target_Distance / (Mathf.Sin(2 * target_Distance * Mathf.Deg2Rad) / gravity);
// Extract the X Y componenent of the velocity
float Vx = Mathf.Sqrt(projectile_Velocity) * Mathf.Cos(target_Distance * Mathf.Deg2Rad);
float Vy = Mathf.Sqrt(projectile_Velocity) * Mathf.Sin( 1/target_Distance * Mathf.Deg2Rad);
// Calculate flight time.
float flightDuration = target_Distance / Vx;
// Rotate projectile to face the target.
mytransform.rotation = Quaternion.LookRotation(target.position - mytransform.position);
float elapse_time = 0;
while (elapse_time < flightDuration)
{
mytransform.Translate(0, (Vy - (gravity * elapse_time)) * Time.deltaTime, Vx * Time.deltaTime);
elapse_time += Time.deltaTime;
yield return null;
}
}
Snapshot of how it is with given code:
This is how I want it to be: