? ? ? unity3d第一個項目已經(jīng)算是完成了,從cocos引擎轉(zhuǎn)過來也有一段時間了,下面列出一些在使用中遇到的坑或者unity3d與cocos2d差異比較大的地方。適合其他引擎轉(zhuǎn)U3D或者純新手小白,萬一有路過的大神請踩了我這朵野花指出錯誤,好好學(xué)習(xí)天天向上。游戲主要是2D界面,搭配live2d偽3D效果。我也想做純3D的可是沒有錢啊。
一 .版本以及部分插件工具
? ? ?(1).unity_5.3.5p6
? ? ?(2).UGUI
? ? ?(3).DoTween
? ? ?(4).SceneManager
? ? ?(5).live2d
? ? ?(6).playerMaker;Anti-Cheat(都已棄用)
二.經(jīng)驗總結(jié)
? ? (1).分辨率適配
? ? ? ? ?1.使用UGUI Canvas ?Render Mode :Screen space-Camera 綁定攝像機,攝像機采用正交 Orthographic Canvas Scaler:UI Scale Mode 采用 Scale With Screen Size ; Reference Resolution 使用640*960分辨率, Screen Match? Mode:expand.
? ? ? ? ?2.部分背景設(shè)為1136*1136 在iphone5,6上依然會有白邊,目前解決方案是背景設(shè)為1138*1138。
? ? ? ? ?3.建議美術(shù)CG與背景出圖大小為,1024*1024(不重要的背景可512*512通過拉伸顯示)。
? ? ?(2).資源相關(guān)及優(yōu)化
? ? ? ? ?1.圖片盡量使用尺寸為2的次冪 32*32,64*64 到 2048*2048,format 采用 compressed 壓縮,個別尺寸不好做處理資源又大,可以采用16bit,采用這一方法美術(shù)需少使用漸變色,否則圖片會嚴(yán)重色塊化。
? ? ? ? 2. 圖片也可直接導(dǎo)入PSD(相當(dāng)于圖集),texture Type 使用Sprite(2D and UI); SpriteMode 使用Multiple, 然后使用 Sprite? Editor自動切割,適用某個界面一堆小圖。缺點是每次替換PSD需重新切割,改動有可能會使之前自動切割的被重新命名。
? ? ? ? 3.圖片參數(shù)需把Generate Mip Maps 選項勾掉,可減少一定大小,這個選項的功能是在3D游戲中視野遠近影響物體模糊。
? ? ? ? 4.字體可使用ttf,不需要美術(shù)單一出atlas, text控件也支持富文本、描邊、陰影等。
? ? ? ? 5.plist不再可用,策劃需提供TEXT文本或JSON等。
? ? ? ? 6.音頻文件支持.AIFF? .WAV? .MP3 .OGG 。
? ? ? ? ? ?視屏文件支持.MOV? .MPG? .MPEG .MP4? .AVI? .ASF。
? ? ? ? 7.修改stripping level,通過庫剖離來減少DLL的空間大小。
? ?(3).UGUI、腳本、其他控件相關(guān)
? ? ? ? ?1.一個場景盡量使用一個canvas,需顯示不同層級可使用多個攝像機,不同攝像機culling mask不同layer,通過修改攝像機Depth來控制層級關(guān)系。
? ? ? ? ?2. live2d比較特殊,如果需要將其他控件置于它的上面,除了用單一攝像機照射外,還需改變Live2d的Z軸與它攝像機Clipping Planes的Far參數(shù)。
? ? ? ? ?3.需要做屏蔽層,只需創(chuàng)建一個panel 即可,改變它的層級即可屏蔽下方的點擊與觸摸。
? ? ? ? ?4.如果在一個button上添加image等其他控件,其他控件的范圍大小也會影響到按鈕的點擊區(qū)域。
? ? ? ? ?5.支持幀動畫,只需全部選中圖片拖入Hierarchy即可生成。
? ? ? ? ?6.U3D粒子系統(tǒng)不支持particle Designer等粒子生成插件,但源生的功能更強,可實現(xiàn)預(yù)加熱功能。
? ? ? ? ?7.動畫建議使用自帶的animator控件,也可以使用ITween,DoTween,HotTween等一些插件來實現(xiàn)簡單的位移變形等。
? ? ? ? ?8.如果使用tween類插件,建議使用DoTween,更加類似cocos寫法,性能優(yōu)化等比較好,(NGUI自帶itween)。
? ? ? ? ?9.注意所有的tween類插件均不支持image sprite單個透明度的變化,只能修改材質(zhì)透明度,而所有的UGUI image控件共用同一材質(zhì),除非每個image單獨添加材質(zhì)。也可通過單獨手寫腳本來控制透明度變化,需要在update里計算,比較繁瑣。
? ? ? ? ?10.腳本中一般使用的update有 Update 與FixedUpdate等,update 跟當(dāng)前幀數(shù)相關(guān),fixedUpdate則是物理時間,所以一些物理邏輯要放入FixedUpdate進行。
? ? ? ? ?11.想在場景切換后還保持某個GameObject存在使用方法?DontDestroyOnLoad(transform.gameObject);
? ? ? ? ?12.把一些模型投影到ui上可以用RenderTexture,也可用這個創(chuàng)建小地圖、鏡相、動態(tài)陰影等效果。注意rendertexture消耗比較大。
? ? ? ? ?13.unity 5.0后增加了AudioMixer混音器,可以把所有audioSource輸出放入同一音軌,通過這個實現(xiàn)全局音樂開關(guān)和音效開關(guān)。
? ? ? ? ?14.游戲暫停可使用 Time.timeScale?=?0。
? ? ? ? ?15.使用u3d自帶animator編輯動畫,動畫結(jié)束后可添加回調(diào)、動畫可倒播。通過狀態(tài)機可完成比較復(fù)雜的動畫模塊,特定情況下的動畫需要與腳本同時控制。
? ? ? ? ?16.3D物理碰撞同樣使用于2D,GameObjecr上需添加剛體控件。
? ? ? ? ?17.粒子貼圖與cocos相似,尺寸大小最好小于64*64。
? ? ?(4)多語言
? ? ? ? ?1.簡體版與繁體版,通過修改text所掛的ttf來實現(xiàn),文字盡量在unity里輸入,減少貼圖上文字的數(shù)量,這樣只需改變ttf即可實現(xiàn)簡體繁體的切換。
? ? ? ? ?2.英文版等共存,unity內(nèi)需要輸入的文字全部寫在text里,需要寫腳本通過key value來讀取每個text顯示的內(nèi)容。
? ? ? ? ?3.一些界面圖片上的文字不好通過UNTIY輸入來替換的(比如IAP禮包等界面),可創(chuàng)建多個不同的prefab,進入場景時候通過區(qū)分
語言環(huán)境來調(diào)用。
? ? ?(5)與IOS Android 交互
? ? ? ? ? 1.多語言 通過Application.systemLanguage區(qū)分當(dāng)前設(shè)備語言環(huán)境。注意:ios9以后Unity通過Application.systemLanguage返回的簡體中文和繁體中文都是SystemLanguage.Chinese,所以需要在ios 上返回當(dāng)前語言參數(shù)給unity。
? ? ? ? ?2.ios上顯示插屏等會應(yīng)為Unity 的rootViewController時長改變而造成奔潰或者不顯示,需要在調(diào)用第三方SDK彈出時候添加
UnityAppController *appController = (UnityAppController *)[UIApplication sharedApplication].delegate;
? ? ? ? ?3.Andoird 需要在點擊購買后彈出屏蔽層,否則點擊過快或造成傳入的參數(shù)改變。提供去除屏蔽的回調(diào),java層在購買和失敗后調(diào)用。
? ? ? ? ?4.iap與兌換碼最好寫成單例,某些Android渠道要求在一開始調(diào)用IAP回調(diào),回復(fù)購買只在IOS與google版本中顯示,需留好接口在不同渠道中開啟或關(guān)閉。
? ? ? ? ?5.unity使用ARC,ios某些廣告低版本SDK未使用,需要在這些廣告類中單獨添加參數(shù) -fobjc-arc。
三.遺留問題
? ? ?1.shader等使用不熟練。
? ? ?2.過場采用sceneManager插件,用GUI實現(xiàn),如使用UGUI animator如何實現(xiàn)。
? ? ?3.所有按鈕點擊放大等效果公用一個animator,再觸摸屏幕其他區(qū)域有可能會使其他按鈕響應(yīng)放大效果。
? ? ?4.Android下手機如果有系統(tǒng)提示或來電,在進入游戲內(nèi)游戲聲音丟失,需重啟游戲。
? ? ?5.scorllview背包等因為包含物品數(shù)量較少沒有使用動態(tài)池。