微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CodeGo.net> Unity-SendMessage的,但变量而不是函数/方法

是否有等效的SendMessage来更改变量而不是调用函数

例如,我有

for(int i = 0; i < elements.Count; i++)
{
    elements[i].SendMessage("selectMe", SendMessageOptions.DontRequireReceiver);
}

接着:

public bool selected;
public void selectMe()
{
    selected = true;
}

所以selectMe()只是一个附加步骤.有没有办法自行切换“选定”值? GetComponent()毫无疑问,因为变量位于不同的脚本中,具体取决于对象-所有这些脚本的确包含变量“ selected”.

简而言之,我正在寻找类似的东西:

elements[i].SendMessage("selected", true, SendMessageOptions.DontRequireReceiver);

(以上不返回错误,但也不起作用)

解决方法:

这不是一个方法,但是如果您使用C#反射,则有一种方法

foreach (Component comp in GetComponents<Component>()) {
    // Modify this to filter out candidate variables
    const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | 
                               BindingFlags.Instance | BindingFlags.Static;

    // Change any 'selected' field that is also a bool
    FieldInfo field = comp.GetType().GetField("selected", flags);
    if (field != null  && field.FieldType == typeof(bool)) {
        field.SetValue(true);
    }

    // Change any 'selected' property that is also a bool
    PropertyInfo property = comp.GetType().GetProperty("selected", flags);
    if (property != null && property.PropertyType == typeof(bool)) {
        property.SetValue(true);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐