很早就看到有这个东西了,但是一直没有去好好看,一看不知道,看了就爱上他了,真的是一个好用的东西。
用来存储数据的一个 资源文件 ,像是JSON、XML、文本文件这样的存储文件,可以用来存储数据。但是这里他在最开始的时候不需要再次读文件,就像是JSON在游戏开始时,我们需要加载JSON文件中的数据,我们就需要读取这个文件,然后在赋值给对象。他就可以直接使用其中的数据。因为他是资源文件,所以他有着资源文件的特性,我们ResourceLoad他就可以使用他了。
其实可以简单的理解为把你所有的数据都用变量在一个类中声明,然后我们使用的时候,直接实例化这个类就好了。
●他可以作为一个引用在脚本上,因为他是资源文件。
●不会被unity序列化机制影响,所以可以多场景共有。( 序列化文章 )
●在实例化对象时用它来做配置文件降低了内存的消耗
●有自己的回调OnEnable、OnDisable、OnDestroy。
用简单的例子来看看怎么用。
数据体类:
创建:
使用:
当然你也可以用菜单创建这个,如下:
今天就简单说说这个吧,其实他的用处和好处不仅仅是这么一点点,还有很多很多,今天就不一一说到了。
突然觉得这篇写的好水,虽然一直都好水。哈哈,见谅见谅。
脚本文件名称一定要与继承ScriptableObject的类名一样。不然会出现脚本为空的情况。
这样会导致你现在序列化存储的数据在,等你修改了场景或者打包的时候数据就不会存在了。就会出现下面这种情况。
如果你这个时候再次指定脚本为None,这个问题就解决了。但还是会想上一张图那样,但是数据就是一直序列化了,修改场景然后保存都不会出现第二张图的情况。
但是严谨的思维,还是把脚本文件名称一定要与继承ScriptableObject的类名弄成一样。这样的话那个script上就不是None,出错的概率会少一些。
创建一个预设物。m_rocket是预设物的名字, m_transformposition是预设物的位置,m_transformrotation旋转角度。
貌似可以这样:
GameObject go= (GameObject)Instantiate(flyswordon);//创建预设
gotransform position =new Vector3 (1 ,2,3);//重新摆放预设
gotransform Rotate (1,2,3 );//预设的旋转角
这样看好像清楚一点点。你要创建什么对象?如果是unity3d中的物体那是可以的,如果是脚本,不好意思,没见过动态创建脚本的,因为unity3d与其他引擎最大的不同在于它的gameobject和脚本使用方式,unity3d中脚本生效是通过挂载在物体上实现的。
只能动态的将写好的脚本添加到物体上,无法动态的新建脚本
//给游戏物体添加名为FoobarScript的脚本
var fbs : FoobarScript;
fbs = gameObjectAddComponent(FoobarScript);
这是js写法
public FoobarScript fbs;
public void Awake() {
fbs = gameObjectAddComponent();
}
这是C#写法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)