1)開發期資源管理的策略選擇
2)iOS14啓動就Crash
3)IL2CPP加密:global-metadata.dat在iOS下的解密問題
4)如何實現可程序控制的3D動做
5)Unity Editor內Screen的Width和Heightios
這是第212篇UWA技術知識分享的推送。今天咱們繼續爲你們精選了若干和開發、優化相關的問題,建議閱讀時間10分鐘,認真讀完必有收穫。網絡
UWA 問答社區:answer.uwa4d.com
UWA QQ羣2:793972859(原羣已滿員)app
Q1:由於打包須要用AssetBundle,可是開發中用AssetBundle不太友好,以上兩種加載都會有各自的問題:
Resources:須要放在Resources文件夾下,打包很差處理。
AssetDatabase:沒有異步加載方法,開發中沒辦法模擬一些須要異步加載的狀況。異步
目前項目用的Resources,打包機分了兩個項目,打APK的項目閹割了Resources,寫了單獨版本管理更新命令,可是依然挺麻煩。大部分公司都是用的AssetDatabase,請問是否有一些方法能夠模擬異步加載?編輯器
另外以上兩種方法都沒法模擬真實的卸載狀況,致使組員不合理操做時,打AssetBundle後會有內存泄漏或者丟失引用的狀況,能夠說一些你們公司開發時用的資源管理方案嗎?函數
A1:用AssetDatabase能夠加一些隨機延時模擬異步,資源加載的接口能夠封裝一下,作到根據配置來決定走AssetDatabase仍是走AssetBundle。咱們打包機會把打好的AssetBundle自動提交到SVN,能夠隨時更新下來,在編輯器下測AssetBundle比較方便。測試
另外:新的Addressable也能夠試試看。優化
感謝littlesome@UWA問答社區提供了回答動畫
A2:據說過一個項目組作法是:平時開發使用Resources來加載;打AssetBundle或者正式包時,按某些規則根據Resources的目錄自動生成一個新工程,這樣就不用維護兩個工程了。
感謝張迪@UWA問答社區提供了回答網站
A3:以前是協程模擬AssetDatabase下的異步,即LoadFromFileAsync。後面嘗試過一種方法,就是使用單獨的美術工程處理AssetBundle,而後程序工程不負責任何資源,只使用美術工程打包生成的AssetBundle。初聽上去流程比較複雜,一點點小的改動即須要操做2個Unity工程。可是其優勢也是很是多的。
代碼上能夠保留AssetDatabase的加載部分用於調試,固然能在平常開發中使用AssetBundle大部分時候能把AssetBundle的Bug暴露在Editor端,而不是上了真機纔出問題。
感謝cloud@UWA問答社區提供了回答
A4:之前是用Resources來加載,只不過會把資源放到Editor/Resources目錄下來避免被打進包內。而後要發佈的時候切換Flag,並讀取Editor/Resources目錄下資源進行打AssetBundle包。不過如今所有交給Addressables來管理了。
感謝黃程@UWA問答社區提供了回答
Q:在iOS 14發佈以後,就出現閃退問題了。和機型沒關,只要是iOS 14就必閃退的那種,iOS 13就正常。用的Unity版本是2018.2.3。請教有人遇到過嗎?
A:咱們iOS14也出了情況,有兩個表現:
- 啓動就閃退,多起幾回能夠過去。
- 啓動後到某個階段之間卡死(必卡跳不過)。
XCode裏看,始終是GfxDriver報錯,咱們渠道方發現,XCode裏【BuildSetting - Packaging - Product Name】不能含有中文,有中文就出這個問題,改掉就行了。
根本緣由尚不明確,我的猜想Product Name會影響Header Folder Path,多是代碼加載路徑中出現中文會出問題(相似早期Unity的情況)。但願對你有幫助。
感謝Walker@UWA問答社區提供了回答
Q1:爲了加大破解難度,須要對global-metadata.dat文件進行加密。
實現方式是:
1. 加密在導出Android和Xcode工程後進行,對global-metadata.dat按字節加密。
2. 修改:
Android:\Editor\Data\il2cpp\libil2cpp\vm\MetadataLoader.cpp
Mac:Unity.app\Contents\il2cpp\libil2cpp\vm\MetadataLoader.cpp
文件中的LoadMetadataFile函數,對從文件中讀取出來的內容按字節解密。
如今出現的問題是:在Android上沒有問題,能夠正常加密和運行遊戲。可是在Mac上,貌似解密函數沒有生效,致使啓動遊戲崩潰。
請教一下各位大佬:在Mac上,global-metadata.dat的讀取是否是不是經過這個函數。我看到Mac上Unity安裝目錄還有一個PlaybackEngines文件夾,裏面也有IL2CPP相關文件,例如MetadataLoader.h,但這個文件是隻讀的,沒法修改,並且也沒有找到MetadataLoader.cpp。Mac上解密不生效和這個文件有關嗎?
A:iOS上是直接連接預編譯好的PlaybackEngines\iOSSupport\Trampoline\Libraries\libil2cpp.a
可能須要本身把.a從工程裏移除,把IL2CPP源碼引入到工程裏。
Q2:工程是指iOS Support/Tramponline文件夾下的Xcode工程嗎?要把Unity.app\Contents\il2cpp\libil2cpp中的文件所有加入到這個工程裏面是嗎?
A:是指導出的項目工程。具體哪些文件可能須要本身試試了。能夠在Windows上導個IL2CPP的VS工程對照一下文件和編譯參數。
Q3:咱們最近遇到這個iOS加密Metadata的問題,請問最後有找到解決方案嗎?https://forum.unity.com/threa... 看這個帖子,彷佛是須要Unity源碼才能夠?
A:IL2CPP的代碼直接拖到XCode工程裏應該就能夠了。
感謝littlesome@UWA問答社區提供了回答
Q:咱們的需求是但願用程序實現靈活的拍掌動做,以下圖:
中間一個大模型,左右兩手,兩手掌要作拍掌動做,藍色點均可做爲拍掌點,就是說要讓程序控制拍到哪裏。目前想到的方案是:
1. 作不少個拍掌動畫,而後在Blend Tree裏用二維混合,但那樣不夠精確。
2. 用Final IK,控制兩手掌運動,但那樣作的動做不天然。
咱們但願儘可能減小K動做工做(外包耗不起),問有沒有其它方案可用?
A1:這種需求基本上都須要使用IK來作,Final IK是目前看到的Unity引擎中最爲成熟的IK解決方案了。若是仍是不行,可能須要考慮自行研發了。
該問答由UWA提供
A2:咱們以前用過2D Freeform Directional的Blend Tree來融合先後左右移動的動做,融合效果是比較理想的。道理上你分別作最左最右最上和最下四個拍掌動做,而後經過兩個參數分別控制左右和上下的融合,可以比較線性地對應起來,精確度應該能接受,不過我沒資源測試,也不肯定你對精確度要求程度,仍是建議作個Demo試試。
感謝鄧永健@UWA問答社區提供了回答
Q:在Unity 2018.4.23版本中測試,新增一個9:16的分辨率,此時獲取到的Width與Height是515x916,若是改動Game窗口大小,這個值也會變,請問這個具體規則是怎樣的呢?
發現應該是乘以了對應分辨率下的Scale值,好比在720x1280的分辨率下看Game窗口的Scale值是0.741,切成9:16後的分辨率正好是533x948(720x0.741 : 1280x0.741)。如今有API能獲取到這個值麼?
由於有一些UI操做,好比會把一張圖設爲和屏幕同樣大的大小,但在Editor下UI分辨率是720x1280,因此會和指望的值不同。若是把分辨率設爲720x1280(也是9:16),那麼獲取到的值就是對的。
主要是想知道規則,而後能根據515x916換算出來720x1280。
A:編輯器下,若是Game窗口採用的比例(Aspect Ratio)的模式,Screen獲取的就是Game窗口的實際大小。若是Game窗口採用的是固定分辨率(Fixed Resolution)。Screen獲取的就是設定的窗口大小。
感謝張首峯@UWA問答社區提供了回答
封面圖來源於網絡
今天的分享就到這裏。固然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,咱們早已在UWA問答網站上準備了更多的技術話題等你一塊兒來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之「石」,也能攻你之「玉」。
官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com 官方技術QQ羣:793972859(原羣已滿員)