我正在尝试创建定位系统。
当我点击一个骷髅敌人时,我希望能够从骷髅脚本中获取健康和伤害,同样,当我点击另一个敌人时,我想获得他们的特定健康和损坏。
我能想到这样做的唯一方法是使用GetComponent
方法,但有没有办法使用一个使用变量的泛型GetComponent
,这取决于我所针对的敌人,所以我可以根据该变量获取所选敌人的数据?
答案 0 :(得分:4)
您没有显示任何示例代码,因此很难看到您拥有的内容并且没有成功,但这是解决问题的一种方法。
//Pseudocode
GameObject enemy = GetEnemy(); //This could be a raycast, collision or some other method.
Health enemyHealth = enemy.GetComponent<Health>();
这真的很简单。另一种方法可能是发送消息,让敌人在适当的时候处理它。 From the docs:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
void Example() {
gameObject.SendMessage("ApplyDamage", 5.0F);
}
}
从它的声音来看,你所遇到的问题不是得到另一个组件 ,而是你将一堆不相关的功能混合在一起。 一般来说,敌人gameobject
*应与主要玩家具有相同的health component
。健康代码不应该在Enemy
以及Player
和Destructible Box
组件中,否则您不仅要多次编写相同的代码,还难以与不同的实现进行交互同样的事情。
* 在高级情况下,可能需要多次执行健康脚本而不是单个巨大的类。在这些情况下,某种抽象是有用的 - 例如接口,继承或消息传递。