簡體   English   中英

如何檢查物體碰撞

[英]How to check objects collisions

我希望檢查3個對象(boxColliders)是否與其他多維數據集發生沖突。如果沖突為TRUE,則對象腳本必須通知Player。如何在兩個腳本之間移動? 如果物體與立方體碰撞,玩家將無法朝這個方向移動。

圖片

我嘗試過類似的操作,但腳本僅檢查播放器。

void OnCollisionStay(Collision collisionInfo){
      if(collisionInfo.gameObject.tag == "Finish")
    {

        Debug.Log ("collision");
    }

}

這是完整的播放器代碼

private Vector3 offset;

public GameObject player;
public GameObject center;

public GameObject right;
public GameObject left;


public int step=9;

public float speed =(float) 0.01;

bool input=true;

void Start () {

}

void Update () {


    if(input==true)
    {

        if (Input.GetKey (KeyCode.RightArrow)) {

            StartCoroutine ("moveRight");
            input = false;

        }
        if (Input.GetKey (KeyCode.LeftArrow)) {
            StartCoroutine ("moveLeft");
            input = false;
        }

    }

}


 IEnumerator moveLeft(){

    for(int i=0;i<(90/step);i++){

        player.transform.RotateAround (left.transform.position, Vector3.forward, step);
        yield return new WaitForSeconds (speed);
    }
    center.transform.position = player.transform.position;
    input = true;

}

 IEnumerator moveRight(){

    for(int i=0;i<  (90/step);i++){
        player.transform.RotateAround (right.transform.position, Vector3.back, step);
        yield return new WaitForSeconds (speed);
    }
    center.transform.position = player.transform.position;
    input = true;

}

void OnCollisionStay(Collision collisionInfo){
    if(collisionInfo.gameObject.tag == "Finish")
    {

        Debug.Log ("collision");
    }

}

將碰撞器和碰撞事件放在要識別碰撞的所有GameObject上。 如果您只想訪問其他對象的腳本,但是不確定要與哪個對象發生沖突,則可以執行以下操作:

void OnCollisionStay(Collision collisionInfo)
{
    var cubeScript = collisionInfo.gameObject.GetComponent<CubeScriptTypeHere>();        
    var playerScript = collisionInfo.gameObject.GetComponent<PlayerScriptTypeHere>();

    if(cubeScript != null)
    {
        //This object hit a cube
        //Do something with cubeScript
    }
    if(playerScript != null)
    {
        //This object hit a player
       //Do something with playerScript
    }
}

顯然,將“ ScriptTypeHere”替換為您命名的實際腳本。 然后,您可以從碰撞事件訪問外部腳本的所有公共方法,屬性等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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