[英]OntriggerEnter not called playerController
我有一個附加到盒子的腳本,盒子上有兩個用於物理的碰撞器和一個(略大)用於在我的玩家走過它時檢測OntriggerEnters。 我有一個附加到框中的腳本,執行以下操作:
public class ColorChangeCollision : MonoBehaviour {
private GameObject Element;
private Color32 BaseColor, CollisionColor;
private Material ElementMaterial;
void Start () {
Element = this.gameObject;
BaseColor = new Color32(255,255,255,255);
CollisionColor = new Color32((byte)Random.Range(0, 255),(byte)Random.Range(0, 255),(byte)Random.Range(0, 255), 255);
ElementMaterial = Element.gameObject.GetComponent<Renderer>().material;
}
private void OnControllerColliderHit(ControllerColliderHit other)
{
Debug.Log("collision...");
ElementMaterial.color = CollisionColor;
}
private void OnTriggerEnter(Collider other)
{
Debug.Log("enter");
}
private void OnTriggerStay(Collider other)
{
Debug.Log("staying..");
}
private void OnTriggerExit(Collider other)
{
Debug.Log("left...");
ElementMaterial.color = BaseColor;
}
}
主要問題 OnTriggerEnter
或OnControllerColliderHit
永遠不會被調用,其他觸發事件也不會被調用。
請參閱下面的框的設置圖像及其組件:
請參閱此處了解應該調用該框的OntriggerEnter
或OnControllerColliderHit
函數的播放器:
編輯我修改了所有元素到@Programmer的建議。 但OnControllerColliderHit
事件仍然沒有被調用..(注意這個功能是附在盒子上)
關於如何設置場景和代碼有3個問題:
1 。 你錯過了一個Rigidbody
。 這應該附加到“Cube”GameObject,因為使用CharacterController將Rigidbody附加到GameObject是不可行的。
2 。 你有兩個BoxColliders附加到一個GameObject(“立方體”)。 不要這樣做。 這可能會導致許多問題,包括多次調用回調函數或不調用回調函數。
當你需要觸發器和非觸發器對撞機時該怎么辦?
創建一個空子GameObject將觸發器放在那里。 你可以做到這一點。
3 。 您正在使用CharacterController
因此您應該刪除 OnTriggerXXX
回調函數。 使用CharacterController
,建議使用它的回調函數OnControllerColliderHit
。
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
......
}
4 。 CharacterController並不意味着用作觸發器。 它們用於檢測碰撞。
您有兩個選項可以檢測觸發器:
A。 從“多維數據集”對象中刪除isTrigger
要么
B。 在CharacterController下添加一個子空GameObject,然后將CapsuleCollider或任何其他對撞機添加到它。 您不必將其標記為isTrigger,因為“Cube”已經標記為is。 你也不應該將Rigidbody連接到這個兒童對撞機上。
創建一個名為“CC”的新圖層,並使CharacterController和新的子GameObject位於“CC”圖層中。 轉到物理碰撞矩陣設置並使其“CC”層不會與“CC”層碰撞。 這將確保CharacterController不會檢測來自tis子對象的collsion。
您現在可以使用OnTriggerXXX
回調函數來檢測CharacterController和“Cube”對象之間的沖突。
其中一個需要有剛體來檢測碰撞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.