代码之家  ›  专栏  ›  技术社区  ›  behzad

如何在统一中不跟随对象

  •  0
  • behzad  · 技术社区  · 7 年前

    当我开枪时,它会追上敌人。我想要一个瞄准系统, 例如,子弹应该在第一眼看到敌人的位置(不是追逐物体,只是射击到敌人第一眼看到的位置)。 这是我的密码,它让子弹跟着敌人:

     void shoot() {
         GameObject bulletGO=(GameObject)  Instantiate(BulletPrefab, firepoint.position, firepoint.rotation);
         Bullet bullet = bulletGO.GetComponent<Bullet>();
         if (bullet != null) {
             bullet.Seek(target);
         }
    

    private Transform target;
    public float speed = 5f;
    public GameObject ImpactEffect;
    public void Seek(Transform _target) {
        target = _target;
    }
    
    // Update is called once per frame
    void Update () {
        if (target == null)
        {
            Destroy(gameObject);
            return;
        }
        Vector3 dir = target.position - transform.position;
        float distancethisframe = speed * Time.deltaTime;
        if (dir.magnitude <= distancethisframe)
        {
            HitTarget();
            return;
        }
    
        transform.Translate(dir.normalized * distancethisframe, Space.World);
    }
    

    你知道吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   PiotrK    7 年前

    替换

    private Transform target;
    //... 
    public void Seek(Transform _target) {
    target = _target;
    }
    //...
    Vector3 dir = target.position - transform.position;
    

    private Vector3 target;
    //...
    public void Seek(Transform _target) {
    target = _target.position;
    }
    //...
    Vector3 dir = target - transform.position;
    

    这样你就可以在Seek中计算和复制现有的目标位置,并使子弹飞到那个位置,即使实际的目标移动了。每次调用更新时,您实际占据当前目标位置的代码。