Q:我想要在Editor下批量地對(duì)Animator Controller文件中每一個(gè)的State里的Animation Clip進(jìn)行替換,但好像沒(méi)有看到 Unity引擎有提供類似的API,只提供了能在Runtime時(shí)進(jìn)行替換的方法,類似下圖: 我現(xiàn)在想要達(dá)到的目地是在Editor下寫(xiě)一個(gè)批量替換Animation Clip的插件,請(qǐng)問(wèn)下Unity引擎是否有提供這樣的接口呢? A:在Unity 5.x 中已有一套完整且穩(wěn)定的 API 可以訪問(wèn)、修改和創(chuàng)建 Animator 中的任何元素。其命名空間是在 UnityEditor.Animations 下,以下Blog 中有一個(gè)簡(jiǎn)單的例子是通過(guò)腳本創(chuàng)建一個(gè) AnimatorController 以及其中的各種屬性和參數(shù)。http://blogs./2014/06/26/shiny-new-animation-features-in-unity-5-0/ 另外,如果需要修改Animation Clip,可以直接修改一個(gè) AnimationState 的 Motion 屬性。 Animation Clip可以繼承自 Motion。 Q:我用UGUI做的一個(gè)界面中有一個(gè)背景圖片,游戲中沒(méi)有做任何處理,關(guān)閉銷毀這個(gè)界面后這個(gè)圖片還在內(nèi)存中,但是我已經(jīng)調(diào)用過(guò)了Resources.UnloadUnusedAssets,如下圖所示。我的預(yù)設(shè)沒(méi)有打成AssetBundle,是放在Resource路徑加載的。請(qǐng)問(wèn)是什么原因?qū)е碌哪兀?/strong> A:在使用 Resources.Load 加載 UI 界面的情況下,即使“關(guān)閉銷毀這個(gè)界面”后,Resources.UnloadUnusedAssets 確實(shí)還是無(wú)法卸載對(duì)應(yīng)的圖集的。因?yàn)榇藭r(shí)該圖集依然被 Resources.Load 加載出來(lái)的 Prefab 引用。 對(duì)于這種情況,我們的建議是手動(dòng)調(diào)用 Resources.UnloadAssets 來(lái)手動(dòng)釋放圖集(可以通過(guò) Sprite.texture 來(lái)找到對(duì)應(yīng)的圖集),在重新實(shí)例化該 UI 界面時(shí),圖集也會(huì)自動(dòng)進(jìn)行 Reload 的。 Q:同樣的包同一個(gè)圖集,ETC2格式,在紅米Note1上會(huì)比酷派的內(nèi)存會(huì)大四倍,請(qǐng)問(wèn)這是什么原因造成的?如果不支持OpenGL 3.0,會(huì)造成這么大的影響嗎? A: ETC2 的格式理論上只在OpenGL ES 3.0 的設(shè)備上被支持,而在不被支持的設(shè)備上則會(huì)內(nèi)部自動(dòng)轉(zhuǎn)成 RGBA32/ARGB32的格式,這對(duì)于 RGBA Compressed ETC2 8bits 的紋理就是放大了 4 倍。因此,如果希望在 OpenGL ES 2.0 的設(shè)備上對(duì)透明材質(zhì)進(jìn)行壓縮,那么可以嘗試使用分離 Alpha 通道的方式,用兩個(gè) ETC1 來(lái)進(jìn)行壓縮。 Q:MeshBaker 烘焙的Mesh可以保存到Prefab中,但是不能像FBX一樣,設(shè)置Model導(dǎo)入設(shè)置中的Generate Lightmap UVs 等信息,請(qǐng)問(wèn)有沒(méi)有大招可以處理此情況? A:首先從理論上說(shuō),一個(gè) Mesh 只能有一個(gè) LightmapIndex 和 LightmapOffset 屬性,這就決定了 Mesh 的合并必須在 Lightmap 的烘焙之前。 而在做Mesh合并時(shí),需要注意到UV2對(duì)于一個(gè)Mesh而言,其所有三角面的UV區(qū)域都必須是互不重疊的,所以不能簡(jiǎn)單直接地合并。 考慮到合并前每一個(gè)Mesh的UV2區(qū)域都應(yīng)該是在[0,1]x[0,1]的區(qū)間中,在合并時(shí)可以給每一個(gè)UV2區(qū)域做一個(gè)縮小和平移,從而可以把每個(gè)區(qū)間在互不重疊的情況下,放到同一個(gè)[0,1]x[0,1]的區(qū)間中。 在UV2也正確拼合后,重新進(jìn)行Lightmap的烘焙即可得到正確的效果。 Q:如果我的Animator是直接引用了FBX里的動(dòng)畫(huà)文件,而不是復(fù)制了FBX的動(dòng)畫(huà)文件出來(lái)再引用,那么打包的時(shí)候會(huì)把FBX都打包嗎? A:這種情況下并不會(huì)把 FBX 打入 AssetBundle 中。將動(dòng)畫(huà)文件Copy出來(lái)通常是為了直接對(duì)動(dòng)畫(huà)文件打包,作為依賴包。 |
|
來(lái)自: 流波上的武 > 《u3d優(yōu)化》