Unity游戏编程之游戏对象管理

来源:互联网 发布:淘宝直播中控台网址 编辑:程序博客网 时间:2024/04/28 09:46

游戏对象GameObject的创建与销毁

游戏对象的创建在Unit IDE中的编辑模式与游戏运行模式并无二致,但是销毁对象时有所区别

1 创建空游戏对象

GameObject mytest = new GameObject("Test");
Destroy(mytest);
这会在游戏场景中创建空游戏对象Empty,即显示在Hierarchy中可以编辑该对象,并可以在Inspector中预览属性

在游戏模式下的销毁方法可以使用:Object.Destroy(),游戏模式区别与编辑模式,编辑模式在非运行状态下,同时可以指Unity的扩展窗口代码中。

在编辑模式或者说是在扩展编辑窗口代码中游戏对象的销毁需要使用:Object.DestroyImmediate()

游戏模式可以使用Application.isPlaying进行判断。

2 从游戏资源获取游戏对象,常是Prefab

通过预设获取游戏对象,同时可以读取预设的组件,并且可以同步修改预设组件数据

GameObject mytest;Object myObj;myObj = Resources.Load("Test/Test");mytest = Resources.Load("Test/Test", typeof(GameObject)) as GameObject;
以上两者或者的对象是一致的,通过ReferenceEquals(mytest,myObj)判断我们知道其实际上是同一个引用
TEST组件的代码:

public class TEST : MonoBehaviour {    public int testValue = 1;}
实时修改预设的组件数据

TEST testData = mytest.GetComponent<TEST>();if (testData != null)    testData.testValue = 100;


3 资源游戏对象并不会产生实例,即不会在游戏场景及Hierarchy中显示出来,实例化的方法是Object.Instantiate,实际上是通过资源对象创建克隆,还是调用了New

GameObject clone = Instantiate(myObj) as GameObject;GameObject clone2 = Instantiate(mytest) as GameObject;
与New方式创建一致,编辑模式使用Object.DestroyImmediate(),而游戏模式使用Object.Destroy()

4 资源的释放

对于Resource.Load(),资源释放函数为:

Resources.UnloadAsset()

更多的资源内存管理见:

http://answers.unity3d.com/questions/377950/unloadasset-with-gameobject-best-practice.html

http://answers.unity3d.com/questions/16020/how-can-i-unload-a-single-resource.html

http://answers.unity3d.com/questions/260144/resourcesunloadasset.html

http://forum.unity3d.com/threads/142807-How-to-UnloadAsset

http://forum.unity3d.com/threads/155553-Combinee-meshes-still-not-released-from-memory

http://forum.unity3d.com/threads/how-to-unloadasset.142807/

http://stackoverflow.com/questions/15065672/load-unload-assets-dynamically

http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html


0 0