首先给结论,gameobject下面挂的脚本都是这个gameobject的组件!组件就是一个对象,它的类型就是这个脚本的类。
一些笔记:目前对于unity中 hierarchy面板里gameobject与挂在它下面的脚本的关系的个人理解。
有这个念头是在写连连看的时候产生的,当时有一个脚本是专门管理UI的,另外有一个脚本是gamelogic,这两个脚本都挂在一个名字为runtime的gameobject下。因为连连看是需要点击UI,然后相应去改变gamelogic脚本里面一些变量。当时苦恼应该怎么实现两个脚本的交互,虽然知道可以用事件去实现,让gamelogic脚本去监听UI脚本的来实现,但是不知道如何在一个脚本里面怎么去访问另外一个脚本的变量或者函数,因为脚本是一个类,如果是访问类非静态成员或者函数的话,是要通过对象来访问的,那么问题就来了,这两个脚本挂在gameobject下面后,这两个脚本对应的对象是谁呢?后来查阅了一下加上面向组件编程这个概念,我就懂了。
有这个念头是在写连连看的时候产生的,当时有一个脚本是专门管理UI的,另外有一个脚本是gamelogic,这两个脚本都挂在一个名字为runtime的gameobject下。因为连连看是需要点击UI,然后相应去改变gamelogic脚本里面一些变量。当时苦恼应该怎么实现两个脚本的交互,虽然知道可以用事件去实现,让gamelogic脚本去监听UI脚本的来实现,但是不知道如何在一个脚本里面怎么去访问另外一个脚本的变量或者函数,因为脚本是一个类,如果是访问类非静态成员或者函数的话,是要通过对象来访问的,那么问题就来了,这两个脚本挂在gameobject下面后,这两个脚本对应的对象是谁呢?后来查阅了一下加上面向组件编程这个概念,我就懂了。
所以如果是同一个gameobject下脚本互相访问,只要通过getcomponent<脚本名字>()就可以访问到这个脚本组件的所有public东西了!再啰嗦一句,因为脚本复用性高,所以做成一个组件,所以采用面向组件编程。举个例子,现在我想动态生成玩家和怪物,而玩家和怪物都共用一个脚本actorcomponent控制,那么我只要先用代码new出gameobject,然后相应地给这些gameobject挂上不同的模型,挂上相同的脚本actorcomponent即可,这样就是复用性和面向组件的体现。还有对自己啰嗦一下,脚本是需要解释的,是在unity里,它采用了c#,一个脚本写好了就进行编译,我也可以不采用c#,他们可以采用一套自己搞得语言来写,只要能解释好就可以了。解释之后的脚本其实就是去调用一些dll里面的类啊函数啊静态变量啊之类的,而dll估计就是事先写好的程序集。为毛unity不提供.h.cpp而是给dll呢?反正都是c++底层实现,非要弄dll让我们去调。因为unity不开源啊~( ̄▽ ̄~)~