onCollisionEnter指定对象?

时间:2014-05-17 04:19:41

标签: unity3d naming

我目前正在为一个班级项目制作一个无限跑步者类型的游戏,我需要一些碰撞帮助。

游戏设置为2d平台,其中角色正在通过无限隧道运行(或看起来像是通过滚动纹理运行)。玩家必须使用跳跃来避开类似于Flappy Bird的障碍物。我现在正在使用的脚本设置为当玩家与障碍物碰撞时游戏将重新加载。

问题:
问题在于我使用的代码适用于所有碰撞,因此当玩家击中地面平台时,游戏会重新加载。

我想要发生什么: 我希望这个角色能够在平台上奔跑并在遇到特定障碍时死亡。

所以我认为我需要指定一个GameObject来碰撞?

这是我目前的代码:

// Update is called once per frame
void Update ()
{
    // Jump
    if (Input.GetKeyUp("space"))
    {
        rigidbody2D.velocity = Vector2.zero;
        rigidbody2D.AddForce(jumpForce);
    }

    // Die by being off screen
    Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
    if (screenPosition.y > Screen.height || screenPosition.y < 0)
    {
        Die();
    }
}

// Die by collision
void OnCollisionEnter2D(Collision2D other)
{
    Die();
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}
}

1 个答案:

答案 0 :(得分:1)

使用标签。例如,为地面使用地形标记。如果object标签是terrain,那么不要死。

这是一个简单的例子:

   void OnCollisionEnter2D(Collision2D other)
   {
      if (other.collider.tag == "Terrain")
      {
         Debug.Log("Don't die!");
      }
      else
      {
         Debug.Log("Die!");
      }
   }