C# Unity3D-比较一个字段的通用方法';将值转换为另一个字段或值

C# Unity3D-比较一个字段的通用方法';将值转换为另一个字段或值,c#,unity3d,field,system.reflection,C#,Unity3d,Field,System.reflection,在Unity3D上有一个叫做“UnityEvent”的东西。我可以在任何类的任何实例上调用任何方法,只要该方法是公共的。它也有很好的GUI public class MyEventType : UnityEvent { } public MyEventType OnEvent; void Main(){ OnEvent.Invoke(); } 我试图完成的是探索和对话系统。到目前为止,我可以用它来触发其他地方编写的脚本事件。但是,我还需要一些东西来检查一些变量,如果它们的值小于,小于,

在Unity3D上有一个叫做“UnityEvent”的东西。我可以在任何类的任何实例上调用任何方法,只要该方法是公共的。它也有很好的GUI

public class MyEventType : UnityEvent { }
public MyEventType OnEvent;
void Main(){
    OnEvent.Invoke();
}
我试图完成的是探索和对话系统。到目前为止,我可以用它来触发其他地方编写的脚本事件。但是,我还需要一些东西来检查一些变量,如果它们的值小于,小于,等于,小于或等于,小于或等于任何给定值或不同的变量

例如: 我们的英雄来到医院。他和医生谈话。对话控制器必须检查玩家的健康状况(可通过character.stats.currentHP访问)是否小于其最大健康状况(character.stats.maxHP),如果是,屏幕上会出现一个选项“What's up doc?”


当然,我可以为每个对话选项使用不同的脚本,这会更简单,但重点是让不知道如何编写代码的人(如我)构建任务和对话。我曾经考虑过system.reflection,但不知道如何让它工作。

system.reflection解决了这个问题,我所需要了解的只是一遍又一遍地阅读文档,直到理解为止。 显然,我所需要做的几乎就是两人一组列出这些课程:

public class FieldReference
{
    public GameObject gObject;
    public string component;
    public string fieldName;
    public string value {
        get {
            return gObject.GetComponent (component).GetType ().GetField (fieldName).GetValue (gObject.GetComponent (component)).ToString ();
        }
    }
}
编写一些代码将它们与自定义检查器编辑器进行比较


我应该更经常地阅读文档。

那么,您是说希望根据不同的字符属性状态运行不同的脚本吗?我不太明白您试图实现的是什么。这是一个函数,它将循环遍历未知类型元素的引用列表(?),将每个元素与给定值或相同类型的不同元素进行比较。通过反射,您可以找到手头的类型并决定如何处理它。给你带来困难的部分是什么?@neo我需要存储它是什么类型,以及将与字段进行比较的值,而且我不知道如何访问字段,例如,在一个结构中,而不必访问整个结构或其他内容。一开始我甚至不知道怎么写。你用过反思吗?