2017-09-14 1 views
0

J'essaie d'utiliser le EventManager et d'organiser des événements pour calculer la distance entre les objets, et de faire quelque chose quand suffisamment d'objets sont proches de la cible.Comment créer un événement d'unité pour déterminer la distance entre les objets et faire quelque chose lorsque la distance est suffisamment petite?

J'ai regardé des vidéos sur YouTube et recherché des exemples sur Google, mais je n'ai pas trouvé quelque chose qui ressemble à ce que je veux. Bien sûr, j'ai aussi regardé les vidéos d'explication des événements en général, mais je ne comprends tout simplement pas. Ils sont tous en anglais, ce qui n'est pas ma langue maternelle, ce qui rend difficile à comprendre. Donc, aussi désolé pour toute erreur de grammaire. Ils parlent souvent si vite. Alors s'il te plait, ne pense pas que je suis paresseux, j'ai cherché des heures mais je ne comprends pas. J'ai un objet cible et plusieurs objets ennemis. Cet objet ennemi porte l'étiquette "Ennemi". L'objet cible peut se déplacer. J'ai fait une coroutine, donc quand la cible bouge, les ennemis suivent, jusqu'à une distance de 0.5. Mais à partir du moment où ils ont atteint la distance de 0.5, les ennemis ne bougeront plus. Au lieu de cela, ils devraient également suivre la cible lorsqu'ils ont déjà atteint leur position cible. Donc, pour éviter cela, j'ai changé le while(Vector3.Distance(transform.position, target.position) > 0.5f) en while 1 > 0, (donc juste toujours) et j'ai supprimé la partie du code qui était sur 'après la boucle while'. Mais ce n'est probablement pas la bonne façon. Donc, en bref, je veux faire un événement qui permet de suivre quand les ennemis atteignent ou perdent leur position cible. Quand trois ennemis sont sur leur position cible, je veux les rendre bleus.

Quelqu'un pourrait-il me montrer comment je peux faire cela? Je ne comprends pas maintenant, mais quand je vois comment cela fonctionne, je peux l'utiliser pour plus d'événements dans le jeu.

+1

Veuillez écrire le code approprié. – ryeMoss

+0

Donc, est votre problème avec les événements, ou est-ce avec la boucle while? Pour les événements, utilisez la classe 'UnityEvent' au lieu du modèle de programmation par défaut C# events +' Observable', pour observer la variable et faire quelque chose quand sa valeur atteint une valeur ou une plage donnée. Pour autant que je puisse comprendre vos problèmes, le modèle 'Observable' devrait également résoudre le problème de boucle' while'. – XenoRo

Répondre

0

Je pense que vous pouvez utiliser collisionneur de déclenchement, juste le rendre plus grand que votre objet cible, puis faire tout ce que vous voulez sur les ennemis dans les méthodes OnTriggetEnter, OnTriggerStay

0

En tant une autre technique que vous pouvez utiliser raycasts. Les raycasts vous fourniront plus de performances que les collisionneurs.

Vous pouvez localiser vos raycasts dans votre position cible, au cas où votre raycast frapperait l'ennemi puis les rendrait bleus. Par exemple;

public LayerMask enemyLayer; bool isTouch = false;

public bool isTouched(){ 
     if (Physics.Raycast(transform.position,-Vector3.up,1f,enemyLayer)) { 
      isTouch = true; 
      return isTouch ; 
     } 
     return !isTouch ; 
    }