为什么我用Instantiate产生prefab的时候unity 加载prefab会死掉

[已解决]怎么让instantiate生成的物体在其他游戏对象的下面
就是我用prefab然后instantiate生成的物体不在UI下面 &所以不能在游戏界面中显示呢。。。。该怎么解决726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/Mon_10_d045327acf5a2d6.jpg');" alt="运行的时候的hierarchy" />这就是运行时候的hierarchy这些clone不在UI Root(2D)下面
要评论请先&或者&
首先:获取你实例化的对象Transform myTrans = Instantiate(_trans) as T然后设置该物体的父物体myTrans.parent = targetO// targetObject需要你在外部传入的
:首先:获取你实例化的对象Transform myTrans = Instantiate(_trans) as T然后设置该物体的父物体myTrans.parent = targetO// targetObject需要你在外部传入的 &&GameObject xijun = Instantiate(prefab,transform.localPosition, Quaternion.Euler(0,0,0)) as GameO&&xijun.transform.Rotate(Vector3.left*90);&&xijun.transform.parent =//背景就是我想要的父级我的代码是这样的。。。。。为啥会错误呢 &QAQ 小白再次求助
你prefab是什么类型的变量?
GameObject xijun = Instantiate(prefab,transform.localPosition, Quaternion.Euler(0,0,0)) as GameO
xijun.transform.Rotate(Vector3.left*90);
xijun.transform.parent =//背景就是我想要的父级我的代码 .. ( 16:57) &&xijun.transform.parent = beijing.就不会有错了一篇搞懂 Unity 記憶體管理(上):Prefab - 推酷
一篇搞懂 Unity 記憶體管理(上):Prefab
小編最近在台科大教書,過程中被問到什麼事Prefab,講解過後發現其實同學好像似懂非懂。最近又在 FB 被陌生人敲問 Prefab 與記憶體相關的問題。所以摟!爽快點,就一次在這邊用幾篇文章把這些問題講清楚吧!先來看看 Untiy 原廠怎麼解釋Prefab:
A Prefab is a type of asset — a reusable GameObject stored in Project View. Prefabs can be inserted into any number of scenes, multiple times per scene. When you add a Prefab to a scene, you create an instance of it. All Prefab instances are linked to the original Prefab and are essentially clones of it. No matter how many instances exist in your project, when you make any changes to the Prefab you will see the change applied to all instances.
簡單解釋 Prefab,它就是一個將在 Project 裡所編輯的 GameObject,存成 “檔案” 以供之後重復使用。想想一個 GameObject 裡我們會做什麼事情?AddComponent對吧!不管這個 Component 是來自 Unity 原生提供或由開發者自行撰寫,終究我們會對這個 GameObjec t賦予所需要的能力,透過添加Component的方式。所以 Prefab 這個檔案描述、記錄了開發者在 GameObject 裡,所引用了所有的Component。
好,接下來怎麼使用 Prefab?Unity 原廠解釋,要使用 Prefab 需呼叫函數 Instantiate&做實體化動作。所以可想而知,當我們呼叫&Instantiate 後,Unity 背地裡做了三件事情:
讀取 Prefab 檔案格式
根據檔案所記載之 Component(所有繼承MonoBehavior的class ),一個個new出來後AddComponent
讀取在 Project 編輯時,每個 Component 於 Inspector 所儲存的Public編輯參數,套回 Component 實體
但記住一件事,我們透過&Instantiate 所生成的 GameObject 都只是 Prefab 的 Clone。這群 Clone 版本的 GameObject 與 Prefab 的關係為單向聯結。什麼是單向聯結?就是說 Clone 的個體,所修改變動的任何參數都不會影響 Prefab 本身與其它 Clone 實體。但如果我們對 Prefab 做變更,則所有 Clone 個體都會被影響。
聽到這應該已經懂 Prefab 了,但 Unity 其實在背後還有一些事沒告訴我們。除了 New 出 Component 之外,還有沒有別的“ 資源” 被Create出來?在&Instantiate&的時候?想想…
Mesh Filter 這個 Component 是不是跟 Mesh 資料綁在一起?MeshRenderer 是不是跟 Material 綁在一起?Material是不是又跟 Shader、Texture 綁在一起?所以當我們在對 Prefab 做&Instantiate 時,除了上述的 AddComponent 外,Unity 也會暗地將這些與 Component 有關的的資源同時載入,若這些資源原本並不存在的話。
這些在背地裡所載入的資源通常與顯示或者物理有關,例如說:Mesh、Shader、Texture 這些都是放在 Video Memory 的東西,它們只需要於內存有一份實體即可。這也說明了,為什麼第一次在&Instantiate Prefab 時,通常遊戲出現 Lag 現象。因為載入這些資源,有時需要跟顯示卡同步的緣故。
哪我們問,是不是呼叫 Destroy 刪除所有 Instantiate 出來的 Prefab,這些隱藏資源就會被回收釋放記憶體呢?答案:NO。怎麼驗證?當然不是這邊說個 NO 就是,Right?做個小實驗,當把所有 Prefab 的 Clone 都呼叫 Destroy 刪除後,再重新Clone 一次試試看,這時會發現遊戲並不會有像第一次載入時的 Lag 現象。
當然這問題需討論到 Resource 與 AssetBundle,我們下次再續…&To Be Continued
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 unity 动态创建prefab 的文章

 

随机推荐