1)Timeline中粒子系統受FixedTime影響問題
2)函數體內局部變量在GC的時候沒法釋放
3)Mac版本升級至10.15後,Unity導入新的MP3文件卡住或者閃退
4)升級到MacOS Catalina後Unity出現空白錯誤
5)如何獲取已打包好的APP的Unity開發版本號macos
Q:新建工程後,新建立一個Timeline和ParticleSystem,將ParticleSystem放入Timeline中,調大系統的FixedTime,在Editor運行狀態下會明顯發現粒子系統播放時出現卡頓(若是隻是在Timeline預覽是正常的)。看API和相關接口均未發現有相關的說明。請問這個是正常狀態嗎?若是但願粒子系統不受物理時間影響應該如何操做呢?Unity版本2018.4.0與2019.2.9均發現該問題。數組
A: 解決方案:
一、不勾選Control Particle Systems選項,這樣Timeline只負責粒子系統的生命週期管理,不會驅動粒子系統播放,相應的壞處就是在不運行遊戲時不能預覽粒子的效果了。
![]()
二、修改官方代碼,重寫一個播放粒子的軌道。緩存
緣由查找:
使用dnSpy打開UnityEngine.Timeline.dll,查看ControlPlayableAsset的代碼。能夠看到當updateParticels爲true時,會把ParticleSystem收集起來,傳入SearchHiearchyAndConnectParticleSystem方法中。app
而後在上述方法中,會爲每一個粒子系統建立一個ParticleControlPlayable,在以後的邏輯會把這些Playable鏈接到這個Timeline系統的output上。函數
在ParticleControlPlayable類中,能夠看到在PrepareFrame方法中,會調用粒子系統的Simulate方法。
測試
Timeline就是在這裏驅動粒子系統播放的。網站
這裏調用的ParticleSystem.Simulate方法的原型以下圖:
加密
發現最後一個fixedTimeStep參數默認爲true。spa
因此在這裏更新粒子系統默認就使用了FixedTimestep。把反編譯的代碼拷貝出來,修改一下類名,本身重寫一個播放粒子的軌道和片段,測試便可。
感謝張首峯@UWA問答社區提供了回答.net
Q:當前咱們有一個模塊使用協程調用,UnityWebRequest以及FileStream來實現安卓上從StreamingAsset 拷貝文件到 PersistentDataPath中,代碼以下:
public static IEnumerator CopyStreamingToPersistentPathByUnityWebRequestItor(string str) { string des = Application.persistentDataPath + "/data.cache"; using (UnityWebRequest www = UnityWebRequest.Get(str)) { yield return www.SendWebRequest(); if (!string.IsNullOrEmpty(www.error)) { Debug.LogError("WWW Error : " + str); } else { Debug.Log("WWW Successful"); byte[] bytes = www.downloadHandler.data; FileStream fileStream = new FileStream(des, FileMode.Create); if (fileStream != null && fileStream.CanWrite) { fileStream.Write(bytes, 0, bytes.Length); fileStream.Flush(); fileStream.Close(); fileStream.Dispose(); Debug.Log("Copy to " + des); } else { fileStream.Close(); fileStream.Dispose(); Debug.LogError("Copy Faild"); } } } }
而後使用UWA GOT檢測發現這塊byte[]始終駐留在內存中,即便在執行完協程後調用GC.Collect也沒法回收該byte數組,不知道有沒有相關的解決方案?
A1:重寫DownloadHandlerScript,使用流的方式直接寫入目標地址就能夠了。對於UnityWebRequest的DownloadHandler,小文件沒問題,大文件就要出事。若是加載一個20MB的文件,那麼不只Mono堆分配20MB,Native Heap也分配一樣大小的byte數組,並且Native 中會不斷刷新數組大小直到知足。採用Stream方式緩存,Mono堆大小就只取決於緩存池的大小,Native heap也不會撐大,能夠大幅度下降PSS。
感謝題主Wangtao@UWA問答社區提供了回答
Q:Mac版本:10.15 ;Unity版本:2018.2.11f1
詳細描述:未升級Mac版本前,新MP3文件正常導入,能夠正常識別文件。升級後,若是在Unity開着的狀況下拖入文件,Unity會直接閃退(如圖1),從新打開顯示資源未識別(如圖2)。若是Unity在關着的狀態下,放入MP3文件,打開項目一直顯示正在導入且不會完成,刪除MP3文件後才能正常打開項目。懷疑升級Mac後Unity仍是使用了Mac舊的API,可是項目又暫時不能升級Unity版本,問下這種狀況有什麼好的解決方案嗎?你們有碰過這種狀況嗎?
圖1
圖2
A:這個官方論壇上有相關的問題:
https://forum.unity.com/threads/installing-unity-on-macos-catalina.689089/
升級Unity版本便可。
感謝閻楊將@UWA問答社區提供了回答
Q:咱們最近升級了Mac系統到最新的Catalina,而後打開本身的工程之後一直有一個空白的錯誤,清不掉也點不開,Unity的版本是2017.4.10,跟Unity論壇上這我的的錯誤是同樣的。
https://forum.unity.com/threads/macos-catalina-blank-error-appears-with-no-info.761903/
我看ISSUE TRACKER上有這樣一個問題:
https://issuetracker.unity3d.com/issues/macos-empty-error-appears-in-the-console-window-when-certain-files-are-present-in-the-project-with-macos-catalina?_ga=2.1691889.1595892744.1571291033-1700034320.1508724105
是說2017不會修復嗎?求助有人遇到相同的問題嗎?
(PS:.net版本從3.5調到4.6就沒了,不過感受不是解決辦法。)
A:發現T4M裏面有個js腳本,工程裏面不能有js腳本,刪除了就行了。
感謝題主關@UWA問答社區提供了回答
Q:有什麼辦法能夠獲取已打包好的APP的Unity開發版本號嗎?好比經過Assembly-CSharp.dll能否讀出Unity版本號?
A:若是AssetBundle沒加密混淆,能夠用AssetStudio打開AssetBundle、AssetStudio的標題欄,會顯示該AssetBundle的版本號。換言之,AssetBundle裏應該存有相應的Unity版本號。
感謝noah@UWA問答社區提供了回答
今天的分享就到這裏。固然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,咱們早已在UWA問答網站上準備了更多的技術話題等你一塊兒來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之「石」,也能攻你之「玉」。
官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com 官方技術QQ羣:793972859(原羣已滿員)