使用带有变量的GetComponent<>()

本文关键字:GetComponent 变量 | 更新日期: 2023-09-27 18:13:09

我正在尝试创建一个目标系统。

当我点击一个骷髅敌人时,我希望能够从骷髅脚本中获得生命值和伤害,同样地,当我点击一个不同的敌人时,我希望获得他们的特定的生命值和伤害。

我能想到的唯一方法是使用GetComponent方法,但是否有一种方法可以使用通用的GetComponent,使用一个变量,这取决于我所瞄准的敌人,所以我可以根据该变量获得选定敌人的数据?

使用带有变量的GetComponent<>()

您没有显示任何示例代码,因此很难看出您有哪些问题没有解决,但这是解决问题的一种方法。

//Pseudocode 
GameObject enemy = GetEnemy(); //This could be a raycast, collision or some other method.
Health enemyHealth = enemy.GetComponent<Health>();

这真的很简单。另一种方法可能是发送一个信息,如果合适的话,让敌人处理它。来自文档:

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。健康代码不应该出现在EnemyPlayerDestructible Box组件中,否则你不仅会多次编写相同的代码,而且还会在与同一事物的不同实现进行交互时遇到困难。

<引用类>

* 在高级情况下,可能需要多个健康脚本的实现,而不是一个庞大的类。在这些情况下,某种抽象是有用的——例如接口、继承或消息传递。