簡體   English   中英

OntriggerEnter沒有調用playerController

[英]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;
    }
}

主要問題 OnTriggerEnterOnControllerColliderHit永遠不會被調用,其他觸發事件也不會被調用。

請參閱下面的框的設置圖像及其組件:

請參閱此處了解應該調用該框的OntriggerEnterOnControllerColliderHit函數的播放器:

球員屬性 3d場景的球員

編輯我修改了所有元素到@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM