Unity 3D如何针对不同对象的触发/碰撞发生不同的事情? C#

时间:2016-03-28 18:28:04

标签: c# unity3d collision-detection

我有代码,当敌人在玩家身上使用僵硬的身体与玩家发生碰撞并点击检查员中对撞机的触发器时会发生什么。当玩家击中敌人时,生命数量会下降。我现在有一个空的游戏对象(轨道),它有一个僵硬的身体,并勾选了一个敌人向前移动的箱式对撞机的触发器。一旦敌人到达触发器,它应该向另一个空的游戏对象(backTrack)移回,使其看起来像是再次向后走。在任何时候,如果玩家击中敌人,生命计数下降1并且敌人在起始位置重生。我的问题是我无法区分与玩家碰撞和跟踪,因为当敌人击中跟踪时,如果玩家击中敌人并且敌人在起始位置重生,它会做什么应该做的。这是我的代码:

 private bool triggered = false;
 public GameObject track1;
 void moveBackTrack(){
     float move1 = moveSpeed * Time.deltaTime;
     transform.position = Vector3.MoveTowards (transform.position, backTrack.position, move1);
 }
 void OnTriggerEnter(Collider col)
 {
     if (!triggered)
     {
         triggered = true;
         if (col.gameObject = track1) {
             moveBackTrack ();
         } else {
             Destroy (gameObject);
             print ("Collision Enter: " + col.name);
             GameManager.Instance.lives -= 1;
             GameManager.Instance.setLivesText ();
             GameManager.Instance.SpawnTrackEnemy ();
         }
     }
 }

1 个答案:

答案 0 :(得分:1)

为玩家和敌方对象设置标记ID,然后订阅曲目的OnCollisionenter事件。当另一个对象与轨道对象的对撞机发生碰撞时,这将触发。

g.fillRect(x,y,image.getIconWidth(), image.getIconHeight());

通过单独处理每个对象的标记名称,您可以更好地维护代码,从而更容易编码到每个单独的条件。我建议您为玩家和敌人设置类似的OnCollissionEnter处理程序,具体取决于游戏逻辑中可能出现的条件数。