Unity 项目符号不起作用

本文关键字:不起作用 符号 项目 Unity | 更新日期: 2023-09-27 18:26:21

using UnityEngine;
using System.Collections;
public class AIEnemy : MonoBehaviour {
   public GameObject bullet;
  public float bulletSpeed = 10;
  public Transform player;
    // Use this for initialization
    void Start () {
    }
    // Update is called once per frame
    void FixedUpdate () {

    }
 void OnTriggerStay2D(Collider2D col)
    {
        if(col.tag == "Player")
       {
           // Debug.DrawRay(transform.position, player.position - transform.position);
          RaycastHit2D rhit2d = Physics2D.Raycast(transform.position, player.position - transform.position, Mathf.Infinity);
          if (rhit2d.collider.tag == "Player")
            {
             var clone = Instantiate(bullet, transform.position, Quaternion.identity) as Rigidbody2D;
            clone.velocity = (player.position - transform.position * bulletSpeed);
          }
        }
    }
}

这就是我的代码。当玩家停留在扳机碰撞器中时,它会找到玩家并向它开火。但我的问题是,子弹不会朝玩家走去,它只是掉下来。我已将项目符号设置为触发器,因此这不是问题所在。(顺便说一句,这是一个2D游戏(该项目在Github上:https://github.com/Massaxe/2D-AI/

Unity 项目符号不起作用

我马上看到的一个问题与bulletGameObject 型有关。我将假设此GameObject引用是您构建并链接到AIEnemy实例的预制件。这里要注意的关键是,GameObject通常充当一对多Component实例的容器,Rigidbody2D本身就是一个。以下代码是我用来访问Rigidbody2D组件的代码:

var clone = Instantiate(bullet, transform.position, Quaternion.identity) as GameObject;
var rigidBody = clone.GetComponent<Rigidbody2D>();
rigidBody.velocity = (player.position - transform.position * bulletSpeed);

至于数学,我会像这样计算速度:

var vel = player.position - transform.position;
vel.Normalize();
vel *= bulletSpeed;
rigidBody.velocity = vel;

这样做的作用是计算 2 个位置之间的矢量,但是,在应用子弹速度之前,它会对矢量进行归一化(这意味着矢量的幅度为 1,但保持适当的方向(。然后,将子弹速度应用于归一化向量。

为了进一步扩展这一点,我想指出,如果子弹自行下落,很可能有 2D 引力施加在子弹上,这可能是也可能不是您要找的。此外,还要检查阻力系数,好像是任何大于0的值,都会导致子弹随着时间的推移而减速(可以想象成摩擦力(。