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

标签 c# unity-game-engine gameobject

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

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

我能想到的唯一方法是使用 GetComponent 方法,但是有没有办法使用通用的 GetComponent 来根据敌人使用变量我已经确定了目标,这样我就可以根据该变量获取选定敌人的数据?

最佳答案

您没有显示任何示例代码,因此很难看出您已经解决了什么问题以及尚未解决什么问题,但这是解决问题的一种方法。

//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否则,您不仅会多次编写相同的代码,而且在与同一事物的不同实现进行交互时也会遇到困难。

* 在高级情况下,可能需要多个运行状况脚本实现而不是单个大型类。在这些情况下,某种抽象是有用的 - 例如接口(interface)、继承或消息传递。

关于c# - 将 GetComponent<>() 与变量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748759/

相关文章:

ios - 如何防止 ios 平台上 unity 图像质量下降

c# - 场景统一变化时,两个游戏对象之间保持链接

c# - Unity如何让GameObject Speed获得速度

c# - "Cannot insert explicit value for identity column in table ' 电影 ' when IDENTITY_INSERT is set to OFF."

c# - 将复杂的json反序列化为类似字典的结构

C# 代码生成器

c# - 如何在 C# 中构建具有未指定数量参数的方法

unity-game-engine - 统一2D : dynamically create a hole in a image

c# - Hololens 上的 C# Unity 中未找到模块 C++ .dll

c# - Unity3D - 获取组件