在Unity中使用LookAt()函数

时间:2017-04-17 18:45:09

标签: c# function unity3d

所以我有一项任务,我必须为学校做一项任务,敌人在枪式游戏中射击玩家。我已经阅读了Unity教程中的LookAt()函数,并将其用于我的知识。但它似乎没有起作用。以下代码是我到目前为止的代码:

public class EnemyControl : MonoBehaviour {
private Rigidbody rb;
public GameObject Bullet_Emitter2;
public GameObject EnemyBullet;
public float speedOfBullet;
private int score;
public Text countText;
public Text winText;
private GameObject Temporart_Bullet_Handler2;
public Transform player;
public Transform enemy;

void Start()
{
    rb = GetComponent<Rigidbody>();
    score = 0;
}

private void Update()
{
    enemy.LookAt(player);
}
// Update is called once per frame
void FixedUpdate () {
    int fire = Random.Range(0, 100);
    if(fire == 0 || fire == 1 || fire == 5)
    {
        Temporart_Bullet_Handler2 = Instantiate(EnemyBullet, Bullet_Emitter2.transform.position, Bullet_Emitter2.transform.rotation) as GameObject;

        Temporart_Bullet_Handler2.transform.Rotate(Vector3.right * 90);
        Rigidbody Temporary_Rigid_Body;
        Temporary_Rigid_Body = Temporart_Bullet_Handler2.GetComponent<Rigidbody>();

        Temporary_Rigid_Body.AddForce(transform.up * speedOfBullet);

        Destroy(Temporart_Bullet_Handler2, 20.0f);
    }
}

}

问题是我的敌人现在只是看着地面而不是我然后向下射击。有没有办法解决这个问题?我已经附上了玩游戏的玩家的形象吗?

enter image description here

在放入LookAt()函数之前,我的太空人只是静止不动并且直线发射子弹但是我需要AI来跟踪玩家而不是静止。有没有其他方法可以在不使用LookAt()的情况下执行此操作,或者我使用此函数是否错误?

先谢谢你的帮助?

1 个答案:

答案 0 :(得分:0)

我会在评论中发帖,但由于声誉不佳,我还不能

正如Serlite指出的那样,LookAt()只面向GameObject的trasnform.forward(当对象未旋转时希望为(0,0,1))朝向作为参数传递的目标

要修复&#39;这只是将一个空的GameObject添加到你的Hirarchy并将你的AI对象设置为它的孩子

Empty GameObject
 - AI GameObject (with your script)

现在,您可以设置对象的全局旋转(旋转父对象),使AI转发面向z +。