关于unity动态添加游戏对象问题,如何动态添

关于unity动态添加游戏对象问题,如何动态添,第1张

//游戏对象 private var obj:GameObject//渲染器 private var render:Renderer//贴图 private var texture:Texturefunction Start () { //获取游戏对象 obj = GameObject.Find("Cube")//获取该游戏对象的渲染器 render = obj.GetComponent("Renderer")} function OnGUI() { if (GUILayout.Button("Color",GUILayout.Width(100),GUILayout.Height(50))) { //改变渲染的颜色 render.material.color = Color.green//添加组件贴图 render.material.mainTexture = null} if(GUILayout.Button("add",GUILayout.Width(100),GUILayout.Height(50))) { render.material = nullrender.material.mainTexture = texture} }

你要创建什么对象?如果是unity3d中的物体那是可以的,如果是脚本,不好意思,没见过动态创建脚本的,因为unity3d与其他引擎最大的不同在于它的gameobject和脚本使用方式,unity3d中脚本生效是通过挂载在物体上实现的。

只能动态的将写好的脚本添加到物体上,无法动态的新建脚本

//给游戏物体添加名为FoobarScript的脚本

var fbs : FoobarScript

fbs = gameObject.AddComponent(FoobarScript)

这是js写法

public FoobarScript fbs

public void Awake() {

fbs = gameObject.AddComponent()

}

这是C#写法

Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。

(1).assetBundle就是内部数据读取完后自动创建了一个assetBundle而已Create完以后,等于把硬盘或者网络的一个文件读到内存一个中,这时也就是个AssetBundle内存镜像数据块。释放方式是AssetBundle.Unload(false)

(2).用AssetBundle.Load(同Resources.Load) 会从AssetBundle的内存镜像里读取并创建一个Asset对象,使用Resources.UnloadUnusedAssets()释放全部和Resources.UnloadAsset(gameobject)释放单个;

(3).Instaniate一个Prefab,是一个对Assets进行Clone(复制)+引用结合的过程,使用GameObject.Destroy(gameobject)

(注意)游戏对象可能不是动态加载时,但是可能他的材质、图集是动态加载的请把这些应用置为空。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11574651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存