从另一个脚本(Unity)访问非MonoBehaviour脚本

时间:2015-04-16 09:26:04

标签: c# reflection unity3d

我正在开发Unity项目,我想从另一个脚本访问非MonoBehaviour脚本。 我不能使用GetComponent导致脚本不是MonoBehabiour,有没有解决方案? 以下是一些可以帮助您理解的代码:

public class SomeClass {
    public static float coolVar = 1.0f;
            private string someVar; // EDIT : I need to access this var too and AnotherClass.someVar won't work obviously  



public class AnotherClass {
    // i want to be able to access coolVar and change her value
// i know i can do SomeClass.coolVar but i was looking for another way close to a GetComponent approach 

我的SomeClass类充满了我需要编辑的静态var,我没有实现那些变量,我无法修改它们(我知道这是不好的做法)。

也许反思是最好的方式:

typeof(SomeClasse).GetField(name).SetValue(null, value);

1 个答案:

答案 0 :(得分:0)

您只需要在项目的Assets路径中包含非MonoBehaviour类的脚本,您就可以在其他行为类中使用它。 请注意在外部类中仅使用.NET 2.0规范,如果您在其上使用了命名空间,请在行为脚本中添加using。

#External class 
namespace DefNamespace
{
public class ModelList
{
    private static List<GameObject> models;

    private ModelList ()
    {
    }

    public static List<GameObject> Models{
        get{
            if(models == null) models= new List<GameObject>();
            return models;
        }set{
            models=value;
        }
    }

}
}

然后在MonoBehaviour或其他课程中:

#Behaviour
using DefNamespace;

public class DefBehaviour : MonoBehaviour
{
    Start(){
        GameObject go=ModelList.Models[0];
    }
}