在unity中我在一个脚本A.cs中算出了一条路径并在每个路径节点上实例化一个Cube并且用一个Arraylist数组保存这些Cube,然后我要在另一个脚本B.cs上如何调用这个保存Cube实例的arraylist数组(就是在另一个脚本中操作这个Arraylist并删除arraylist里面的Cube)。
我最初是把在A.cs中的arraylist如是定义;
static public ArrayList Roadnode;
然后经过一系列的操作Roadnode中保存着路径节点上的Cube。
我在B.cs中这样写:
protected A a;
在Start()中
a = GetComponent<A>();
然后 我这样测试Debug.Log(A.Roadnode.Count);然后就报错:NullReferenceException: Object reference not set to an instance of an object,为什么呢,该如何获取Roadnode数组呢,求指点,在线等;
我的两个脚本是绑定在同一个gameobject上的,然后我试了一下说的第四点:
//A.cs
static public A instance;Awake(){ instance = this;}
在B.cs中
Update(){ Debug.Log("Seeker.Roadnode.Count::" + Seeker.seek.Roadnode .Count );},如果你的意思是这样,还是一样的错误
如果你是用A做类名, 哪就应该是:
A.Roadnode.Count。
instance 是A的实例名!你调用的时候要用类名。它指向它自己的A类实例,这是singleton 模式,如果场景中存在多个A类实例就会出问题, instance就会仅指向最后一个被实例化的A类实例。比如,你如果有3个包含A的GO,那么在顺序上,instance只会指向时间上最后一个生成的A实例。
Singleton的目的是把A类的实例固定为唯一,并限定A类只能有一个实例,再用static public暴露他的调用,让场景中所有类都可以随时调用A的实例。我给你的那个例子是简化版本的。理论上整个场景中应该仅允许存在一个A类的实例化。这样做相当于unity 本身的脚本的类, 比如Mathf,Physics(建议查下singleton相关的知识)
如果你两个脚本打算放在一个GO上,建议直接用 GetComponent调用, 而不是用Singleton模式。如果你用Singleton模式,最好把A类单独放到一个空GO上。我之前说的几个方法是因为我不知道你具体要怎样应用。
我用C#写的你给我js的,这个答案貌似在论坛上也见过。。。