2015-10-25 97 views
0

標題說明了一切。Unity3d Transform.LookAt也改變位置

我提供了一個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(); 
     } 
    } 
} 
+0

當你註釋掉transform.LookAt行時會發生什麼?我可以想出爲什麼這會移動你的對象的唯一原因是,如果你的對象的起源不在你認爲它的位置,那麼它不會直接移動。我的實際猜測是另一個腳本是負責的 – Tom

+0

當我註釋掉transform.LookAt行時,NPC不再移動,也不會向玩家旋轉。這導致我相信這種方法被竊聽了。 此外,我沒有在任何其他源文件中引用NPC。 –

+0

- 更新:刪除NPC上的剛體組件解決了我的問題。不知道如何或爲什麼會發生這種情況。要在Google上搜索更多內容! –

回答

0

因爲我使用的是剛體並手動旋轉變換,所以出現了一些意想不到的行爲。

我發現了一些代碼網上,我可以用替換Transform.LookAt方法:

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

這個固定我的問題!