通过其名称 unity 的字符串访问脚本变量

时间:2021-04-10 00:23:24

标签: c# unity3d types

我的场景包含两个对象 - 第一个是 DataHolder 对象,它包含一个带有单个整数的简单脚本,我在编辑器中将其设置为 5。第二个是 DataReader 类,我想用它从分配给 DataHolder 的脚本中访问“x”的值。

重要的是,在 DataReader 类中,我只有对 Data 脚本的引用和我想要的变量字符串。特别是,我不是在寻找像“dataScript.x”这样的答案,因为我正在寻找的特定属性名称将由用户选择,所以我不能像那样硬编码。

[我的场景]

My Scene

[数据持有者对象]

Data Holder Object

[数据读取器对象]

Data Reader Object

这是分配给 DataHolder 的数据脚本中的代码:

debug

这是分配给 DataReader 的 DataReader 脚本中的代码。我已经在编辑器中分配了脚本和 propertyName,但没有得到我期望的结果 - 我以为这会打印出 x 的值,但它打印出“未找到”。:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Data : MonoBehaviour
{
    public int x;
}

如何从 DataReader 的 Data 脚本中访问 x 的值,请记住,我真的在寻找通过名称字符串访问 Data 中任意命名字段的能力?

1 个答案:

答案 0 :(得分:1)

public class DataReader : MonoBehaviour
{
    public UnityEngine.Object script;
    public string propertyName;

    void Start()
    {
        Type scriptClass = script.GetType();
        FieldInfo[] fields = scriptClass.GetFields();
        bool found = false;
        foreach (var field in fields)
        {
            if (field.Name == propertyName)
            {
                Debug.Log("The value was: " + field.GetValue(script).ToString());
                found = true;
            }
            else
            {
            }
        }
        if (!found)
        {
            Debug.Log("Not found.");
        }
    }
}

字段是存储数据的变量,属性是为私有字段提供读取、写入或计算的成员。很容易让他们感到困惑。根据您想用这个工具做什么,我还会研究BindingFlags