【问题标题】:Unity3D - A generic way to compare one field's value to another field or valueUnity3D - 将一个字段的值与另一个字段或值进行比较的通用方法
【发布时间】:2015-12-24 17:33:04
【问题描述】:

在 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,但不知道如何使其工作。

【问题讨论】:

  • 那你说的就是要根据不同的字符属性状态来运行不同的脚本吗?我不太明白你想达到什么目的。
  • @neo 一个函数,它将循环遍历未知类型元素的引用列表(?),将每个元素与给定值或相同类型的不同元素进行比较。
  • 通过反思可以找出手头的类型并决定如何处理它。什么是让你很难过的部分?
  • @neo 我需要存储它是什么类型,以及将与该字段进行比较的值,而且我不知道如何访问例如结构内部的字段,而不必比较整个结构或其他东西。我什至不知道如何写它。
  • 你用过反射吗?

标签: c# unity3d field system.reflection


【解决方案1】:

使用 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 ();
        }
    }
}

编写一些代码来比较它们和自定义检查器编辑器。

我应该更频繁地阅读文档。

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 2020-11-19
    • 2015-09-08
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多