将GetComponent<>()与变量一起使用?

时间:2014-07-15 01:57:14

标签: c# unity3d gameobject

我正在尝试创建定位系统。

当我点击一个骷髅敌人时,我希望能够从骷髅脚本中获取健康和伤害,同样,当我点击另一个敌人时,我想获得他们的特定健康和损坏。

我能想到这样做的唯一方法是使用GetComponent方法,但有没有办法使用一个使用变量的泛型GetComponent,这取决于我所针对的敌人,所以我可以根据该变量获取所选敌人的数据?

1 个答案:

答案 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以及PlayerDestructible Box组件中,否则您不仅要多次编写相同的代码,还难以与不同的实现进行交互同样的事情。

  

* 在高级情况下,可能需要多次执行健康脚本而不是单个巨大的类。在这些情况下,某种抽象是有用的 - 例如接口,继承或消息传递。