如何用同一个脚本处理多个敌人?

我正在做一个基本的自上而下的射手,有点像…核王座或以撒的绑定,但因为我是新来的统一,这是我需要做的学校,我是很急,所以我没有足够的时间去查看所有的文档,所以我很抱歉,如果我问的太多了。

事情是这样的:我有玩家四处移动,一个剑在鼠标方向旋转,点击鼠标激活剑周围的触发对撞机,它的目的是击中其范围内的所有敌人

问题 :

我应该如何“计划”我的脚本? 我的意思是,我有一个处理单击和OnTriggerEnter的剑脚本,它应该以某种方式(检查它)检查它是否碰到敌人,并且访问敌人脚本来修改它的生命点,但是如何处理GameObject Enemy = GameObject.FindObjectWithTag("Enemy")[...] ? 因为这只是给我一个敌人

我再次道歉,因为我真的很关注一点,我不认为有必要提供所有的代码,因为我不真的需要你提供代码,只是…指导方针或做这种基本模式东西的。

万分感谢!。

你的推理开始是好的,但是当你试图减less敌人的HP时你会迷失方向。 让我们从剑重新开始:

在你的Sword脚本中,你有一个OnTriggerEnter2D函数。 在这个function中,你可以检查对撞机是否属于“Enemy”types,如果是,则应用“损坏”function:

 void OnTriggerEnter2D(Collider2D collider) { GameObject objectCollided = collider.gameObject; // Get a reference to the object hit if (objectCollided.CompareTag("Enemy")) // If the object is an enemy { objectCollided.getComponent<EnemyController>().doDamage(swordStrength); // Here you call the enemy function that will lower his health } } 

更高级的解决scheme是将这种行为概括为任何可损坏的对象。 让我们想象一下,将来你想添加可破坏的物品,比如可破坏的墙。 这个墙会使HP受到伤害,当HP达到0时就会死亡,就像敌人一样。

这是可以通过一个脚本组件“损坏”,你会添加到任何有损坏的预制件:

 public class Damageable : MonoBehavior { public int maxHP; // This has to be set in the inspector private int currentHP; void Start() { currentHP = maxHP; } void doDamage(int damage) { currentHP -= damage; if (currentHP <= 0) Destroy(gameObject); } } 

通过将此脚本附加到预制件上,它变得易受损害。 那么,在你的剑脚本中:

 void OnTriggerEnter2D(Collider2D collider) { GameObject objectCollided = collider.gameObject; // Get a reference to the object hit Damageable damageableComponent = objectCollided.getComponent<Damageable>(); if (damageableComponent) // If the object is damageable { damageableComponent.doDamage(swordStrength); // Here you damage the object, without knowing which type it is } } 

我希望这有帮助。