2015-07-18 1 views
0

J'utilise l'unité 5 C# et j'ai un gameobject avec 2 déclenchement collisionneurs un d'eux est dans un endroit différent. Je dois pouvoir utiliser OnTriggerStay2D et OnTriggerEnter2D pour eux mais j'ai besoin de trouver quel déclencheur est entré. En ce moment, si j'entre le 1er déclenchement (polygone), le OnTriggerEnter est activé pour le 2nd (case). Comment puis-je distinguer les deux collisionneurs ???unité OnTriggerStay2D() pour deux déclencheurs

public void OnTriggerEnter2D(Collider2D other) //2nd collider trigger 
{ 
    if (other.tag == "Player") { 
     Found = true; //if the player is in shooting range 
     Idle = false; 
    } 
} 
public void OnTriggerStay2D(Collider2D other) //1st collider trigger 
{ 
     if (Found != true) { 
      if (other.tag == "Player") { 
       Shield = true; 
       Idle = false; 
      } 
    } 
} 

public void OnTriggerExit2D(Collider2D other) //2nd collider trigger 
{ 
    if (other.tag == "Player") { 
     Found = false; 
     Shield = false; 
     Shooting = false; 
     Idle = true; 
    } 
} 

J'ai essayé de faire le 1er déclencheur OnTriggerStay2D public void (PolygonCollider2D autre), mais il dit: « Ce paramètre de message doit être de type: Collider2D Le message sera ignoré. » Ce que j'essaie de faire est d'avoir un trigger polygonal devant l'objet gameobject et un trigger différent de l'objet gameobject, donc quand vous approchez de l'objet gameobject, vous entrez dans le 1er trigger et il met son bouclier approchez-vous-en (à portée de tir), il mettra son bouclier et commencera à vous tirer dessus.

Répondre

0

Eh bien collider2d détecte tous les types de 2d collisionneurs. Peu importe si c'est un polygone ou juste une boîte. Comme les suggestions de documentation il n'a pas besoin d'être public ou privé. Cela prend seulement un collider2d comme son argument cependant.

A des fins de débogage, pourquoi ne pas utiliser print?

Print("you've entered the trigger function"); 

De même, je n'utiliserais pas 2 collisionneurs de déclenchement différents sur le même GameObject. Pourquoi ne pas simplement créer 2 gameobjets distincts pour une détection plus complète. Chaque GameObject avec son propre collisionneur de trigger peut avoir des tags différents.

Si vous devez utiliser 2 collisionneurs de déclenchement sur un objet. Ce qui n'est pas la meilleure idée. Vous pouvez utiliser shapeCount pour déterminer celui qu'il frappe. Bien que, comme je l'ai dit, je ne serais pas en mesure de faire 2 collisionneurs de déclenchement sur le même objet quand tout ce que vous essayez de faire peut être plus facile sur deux objets séparés.

Cependant, les liens ne sont généralement pas interdits je pense. Je regardais et j'étudiais ces vidéos. Ils sont très utiles pour expliquer le moteur et ils ne sont même pas très longs. https://unity3d.com/learn/tutorials/modules/beginner/2d Ils ont même une vidéo expliquant les collisionneurs 2D.

0

Ceci est ma solution. Dans un de mes jeux j'ai un rocher, j'ai un déclencheur qui va supprimer un bloc en dessous pour qu'il tombe, j'ai alors un autre trigger qui dit au rocher de commencer à bouger à gauche ou à droite j'ai aussi un autre trigger qui va supprimer boulder une fois que le rocher entre en contact.

Donc, vous pouvez créer 2 nouveaux objets de jeu, créer un nouveau fichier CS et les nommer de manière appropriée, puis avec ces deux nouvelles classes leur permettre d'intégrer l'objet de jeu auquel vous faites référence dans votre question.

Puis, quand ils sont déclenchés, vous pouvez utiliser le code de leur classe.

Donc, votre première classe deviendrait quelque chose comme ça

public void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.tag == "Player") { 
     Enemy.Found = true; //if the player is in shooting range 
     Enemy.Idle = false; 
    } 
} 

public void OnTriggerExit2D(Collider2D other) 
{ 
    if (other.tag == "Player") { 
     Enemy.Exit2DTrigger(); 
    } 
} 

L'autre classe serait quelque chose comme ça

public void OnTriggerStay2D(Collider2D other) 
{ 
     if (Enemy.Found != true) { 
      if (other.tag == "Player") { 
       Enemy.Shield = true; 
       IEnemy.dle = false; 
      } 
    } 
} 

public void OnTriggerExit2D(Collider2D other) 
{ 
    if (other.tag == "Player") { 
     Enemy.Exit2DTrigger(); 
    } 
} 

Puis dans votre classe ennemi vous auriez

public void Exit2DTrigger() 
{ 
    Found = false; 
    Shield = false; 
    Shooting = false; 
    Idle = true; 
} 

PS N'avez-vous pas besoin d'utiliser other.gameObject.tag == "Player"?