Unity3d Transform.LookAt也改变了位置

时间:2015-10-25 15:24:57

标签: unity3d

标题说明了一切。

我为NPC提供了以下脚本,这应该让他看起来并且咆哮玩家。 然而,当玩家进入NPC的范围时,NPC开始向玩家走去而不是仅仅面对他。

有什么想法吗?

using UnityEngine;

public class Barking : MonoBehaviour {

    public AudioSource barkingAudio;

    private GameObject player;
    private bool barking;

    void Start () {
        player = GameObject.FindGameObjectWithTag("Player");
        barking = false;
    }

    void Update () {
        if (barking)
            lookAtPlayer();
    }

    private void lookAtPlayer()
    {
        transform.LookAt(player.transform.position, Vector3.up);
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject == player)
        {
            barking = true;
            barkingAudio.mute = false;
            barkingAudio.Play();
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.gameObject == player) {
            barking = false;
            barkingAudio.mute = true;
            barkingAudio.Stop();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

由于我使用Rigidbody并手动旋转变换,因此出现了一些意想不到的行为。

我在网上发现了一些代码,我可以用以下代码替换Transform.LookAt方法:

    var qTo = Quaternion.LookRotation(player.transform.position - transform.position);
    qTo = Quaternion.Slerp(transform.rotation, qTo, 10 * Time.deltaTime);
    GetComponent<Rigidbody>().MoveRotation(qTo);

这解决了我的问题!