2017-05-30 42 views
0

我得到了一個盒子對撞機和一個觸發器的立方體。當玩家站在上面時,它會掉下來。統一降落平臺在落地的同時穿過地面

我希望平臺在與某物發生碰撞後自行銷燬,在此之前,將其自身初始化。

所以我的代碼如下這樣:

void OnTriggerEnter(Collider col) 
{ 
    if (col.CompareTag("Player")) 
     isFalling = true; 
} 

void OnCollisionEnter(Collision col) 
{ 
    if (!col.gameObject.CompareTag("Player")) 
    { 
     Instantiate(gameObject, startPosition, startRotation); 
     Destroy(gameObject); 
    } 
} 

void Update() 
{ 
    if (isFalling) 
    { 
     fallingSpeed += Time.deltaTime/20; 
     transform.position = new Vector3(transform.position.x, transform.position.y - fallingSpeed, transform.position.z); 
    } 
} 

好吧,當我的平臺崩潰了,它只是通過地面。甚至沒有發現碰撞。

有人得到了我的提示嗎?

回答

0

如果您的對撞機設置爲觸發,它不會觸發OnCollisionEnter事件。相反,把你的代碼在這樣的OnTriggerEnter

void OnTriggerEnter(Collider col) 
{ 
    if (col.CompareTag("Player")) { 
     isFalling = true; 
    } 
    else 
    { 
     Instantiate(gameObject, startPosition, startRotation); 
     Destroy(gameObject); 
    } 
} 
+0

沒有我的平臺有一個對撞機和第二個碰撞觸發器 – Question3r

1

所以我剛剛得到了我的錯誤。

該平臺沒有附加剛體。因此它無法與地面相撞。

這是我的新代碼:

private void Start() 
    { 
     data.PlatformRigid.useGravity = false; // Disable the gravity to make it stay in the air 
    } 

    private void OnTriggerEnter(Collider col) 
    { 
     if (!data.Activated) // just do this 1 time 
     { 
      if (col.CompareTag("Player")) // just start executing the following code if the colliding object is the player 
      { 
       data.Activated = true; // don't execute this code a second time 
       data.PlatformRigid.useGravity = true; // start falling 
      } 
     } 
    } 

    private void OnCollisionEnter(Collision col) 
    { 
     if (!col.gameObject.CompareTag("Player")) 
     { 
      Instantiate(gameObject, data.StartPosition, data.StartRotation); // Create itself at default 
      Destroy(gameObject); // Destroy itself 
     } 
    } 

我並不需要計算在更新fallspeed了。當玩家擊中平臺時,我只是禁用重力並啓用它。