1.新建两个脚本,在脚本2中实例化脚本1。
2.在脚本2中用脚本1实例化对象调用脚本1中的公有变量,赋初值。
3.创建两个物体,将两个脚本绑定不同物体。
4.将物体1拖拽到脚本2的变量上进行赋值。
1、首先我们创建一个新的项目。
2、在Layout下选择2 by 3,如图所示。
3、此时我们切换到Project面板。
4、在Project面板空白处右键选择create》C#,,如图。
5、创建完成,可以自行命名。
6、双击打开即可编写脚本。
不太清楚实际情况,但是,
(1)你这样写的前提是,A 和 B 必须同时实例化到同一个gameObject上(这两个脚本得同时应用到一个物体上),否则你的a = GetComponent()肯定为null ,因为B调用这个Get,而他本身所处的gameObject本没有A这个脚本组件,A的实例在另一个物体上。 估计这是你报错的一个原因。
(2)用static声明全局变量似乎没必要,static的作用应该是让变量在类被实例之前就得到实例化。用static的话,那么应该是要达到这样的目的,即用类名直接调用变量或函数(Mathf类里面的很多数学数值和函数都是这样的例子),你这个情况如果用了static那就最好应该为了这样的目的:
A.Roadnode.count
(3)实时操作数组,最好用List<>,具体可以参考msdn List的用法,
(4)如果你的目的只是为了让B能够通过代码访问A的变量,一般的public 变量就足够,其余你只需要解决B通过何种途径正确访问A。比如,你可以把A做成singleton:
static A instance;
Awake(){ instance = this;}),让A有一个static实例指向自己, 那B就直接用 A.instance 来获取A的实例,这样就可以在任何地方直接访问A的变量和函数。
又或者用 GameObject.Find("名字") 遍历所场景中所有有的对象,最后用GetComponent找到A的实例,这个方法效率很低,最好是在初始化函数里调用。
在A.js中用静态声明 static var 变量:bool;
然后在B.js中直接用 B.变量 调用;
或者用 GameObject.Find("gameobject名字").GetComponent(A).变量 调用;