所以我有一个ComponenetCopier脚本,有什么惊奇的复制了脚本。

问题是,当我构建游戏时,它不起作用,它会抛出以下错误并中止该过程,但有以下例外:


  System.ArgumentException:在System.Reflection.MonoProperty上找不到“ hideFlags”的获取方法


它死去的代码在这里:

PropertyInfo[] properties = type.GetProperties();
Debug.Log("Do i die here?");
foreach (PropertyInfo property in properties)
{
     property.SetValue(myNew_Component, property.GetValue(original, null), null);
}


当它在编辑器模式下工作时,我不知道为什么它会失败,但这已经困扰了我好几天了。
非常感谢您的帮助...

附:我正在使用反射来复制组件。

最佳答案

我认为hideFlags指的是此=> UnityEngine.HideFlags Doc

PropertyInfo[] properties = type.GetProperties();
    foreach (PropertyInfo property in properties)
    {
        // Add this or else u might run into problems later
        if (!property.CanWrite)
        {
            continue;
        }
        // Hide flags is an Enumeration. the default value for it is HideFlags.None
        // i assume u dont chnage this value, so for your use case this will be Ok
        if (property.PropertyType.IsEnum && property.ToString() == "UnityEngine.HideFlags hideFlags")
        {
            property.SetValue(my_Component, HideFlags.None);
            continue;
        }
        property.SetValue(my_Component, property.GetValue(original));
    }


上面的代码应该可以解决问题

关于c# - Unity Player抛出异常:System.ArgumentException:找不到'hideFlags'的Get方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57777511/

10-09 19:14