2017-05-30 41 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了。当玩家击中平台时,我只是禁用重力并启用它。