溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

[unity3d]unity平臺的預(yù)處理

發(fā)布時間:2020-05-26 03:53:25 來源:網(wǎng)絡(luò) 閱讀:413 作者:蓬萊仙羽 欄目:游戲開發(fā)

在開發(fā)中,特別是unity的跨平臺中,我們經(jīng)常會在各個平臺游走,如安卓版,蘋果版,PC版......。在此不同的平臺上,有可能我們需要做不同的操作。然而我們就可以用unity的自帶的平臺宏定義方式來做平臺的判斷。Unity幫我們定義了如下平臺預(yù)處理:

 名稱  描述
UNITY_EDITOR Define for calling Unity Editor scripts from your game code.
UNITY_STANDALONE_OSX Platform define for compiling/executing code specifically for Mac OS (This includes Universal, PPC and Intel architectures).
UNITY_DASHBOARD_WIDGET Platform define when creating code for Mac OS dashboard widgets.
UNITY_STANDALONE_WIN Use this when you want to compile/execute code for Windows stand alone applications.
UNITY_STANDALONE_LINUX Use this when you want to compile/execute code for Linux stand alone applications.
UNITY_STANDALONE Use this to compile/execute code for any standalone platform (Mac, Windows or Linux).
UNITY_WEBPLAYER Platform define for web player content (this includes Windows and Mac Web player executables).
UNITY_WII Platform define for compiling/executing code for the Wii console.
UNITY_IPHONE Platform define for compiling/executing code for the iPhone platform.
UNITY_ANDROID Platform define for the Android platform.
UNITY_PS3 Platform define for running PlayStation 3 code.
UNITY_XBOX360 Platform define for executing Xbox 360 code.
UNITY_NACL Platform define when compiling code for Google native client (this will be set additionally to UNITY_WEBPLAYER).
UNITY_FLASH Platform define when compiling code for Adobe Flash.
 

 

   以后我們可以根據(jù)如上宏定義就可以去輕而易舉的很容易去在我們代碼中加入判斷了。我舉個簡單例子,如下:

using UnityEngine; using System.Collections;  public class Recompile : MonoBehaviour {      private string platform = string.Empty;     // Use this for initialization     void Start()     {         DebugPlatformMesaage();     }      void DebugPlatformMesaage()     {  #if UNITY_EDITOR         platform = "hi,大家好,我是在unity編輯模式下"; #elif UNITY_XBOX360        platform="hi,大家好,我在XBOX360平臺"; #elif UNITY_IPHONE        platform="hi,大家好,我是IPHONE平臺"; #elif UNITY_ANDROID        platform="hi,大家好,我是ANDROID平臺"; #elif UNITY_STANDALONE_OSX        platform="hi,大家好,我是OSX平臺"; #elif UNITY_STANDALONE_WIN        platform="hi,大家好,我是Windows平臺"; #endif         Debug.Log("Current Platform:" + platform);     } }

上面如果我是在Editor狀態(tài)下的話,就能看見打印出:     [unity3d]unity平臺的預(yù)處理

 

我們也可以自己定義宏定義,在PlayerSetting中定義:

[unity3d]unity平臺的預(yù)處理

 

例如我在上面圈起來的地方填寫一個CUSTOM_ITF這個預(yù)編譯指令。然后在DebugPlatformMesaage函數(shù)尾部加入這句話

//新添加的內(nèi)容 #if CUSTOM_ITF         customMsg = "我自定義了預(yù)編譯"; #endif         Debug.Log(customMsg);

然后我們運(yùn)行看下,你就能在控制臺看見我們輸出的信息了:

[unity3d]unity平臺的預(yù)處理

 

    當(dāng)我們把我們自定義的宏定義給去掉的時候,我們打印的信息就不會出來。

 

除了這些,unity中還有各個版本的宏定義,一般開發(fā)插件的大牛都會用到。

 

UNITY_2_6 Platform define for the major version of Unity 2.6.
UNITY_2_6_1 Platform define for specific version 1 from the major release 2.6.
UNITY_3_0 Platform define for the major version of Unity 3.0.
UNITY_3_0_0 Platform define for the specific version 0 of Unity 3.0.
UNITY_3_1 Platform define for major version of Unity 3.1.
UNITY_3_2 Platform define for major version of Unity 3.2.
UNITY_3_3 Platform define for major version of Unity 3.3.
UNITY_3_4 Platform define for major version of Unity 3.4.
UNITY_3_5 Platform define for major version of Unity 3.5.
UNITY_4_0 Platform define for major version of Unity 4.0.
UNITY_4_0_1 Platform define for major version of Unity 4.0.1.
UNITY_4_1 Platform define for major version of Unity 4.1.
UNITY_4_2 Platform define for major version of Unity 4.2.
 

 

    其實(shí)預(yù)編譯在我們對unity開發(fā)的時候還有一個很好的作用,我們Debug的時候是IO,其實(shí)會消耗CPU的,從而影響了我們的性能,我們想在開發(fā)的時候進(jìn)行Debug,但不想在到處的時候打印出,在這個時候我們就可以用預(yù)編譯來判斷他是否是在Editor狀態(tài)下,從而做出相應(yīng)的操作!
    預(yù)處理命令從來不會被翻譯為可執(zhí)行中的命令,但會影響編譯過程的各個方面。例如:使用預(yù)處理器指令可以禁止編譯器編譯代碼的某一部分,如果計(jì)劃發(fā)布兩個版本的代碼,即基本版本和有更多功能的企業(yè)版本,即可以使用這些預(yù)處理指令。在編譯軟件的基本版本時,使用預(yù)處理器指令還可以禁止編譯器編譯于額外相關(guān)的代碼。另外,在編寫提供調(diào)試信息的代碼時,也可以使用預(yù)處理器指令。在銷售軟件時,一般不希望編譯這部分代碼。預(yù)處理器指令開頭都有符號#。我們unity的不是分專業(yè)版和免費(fèi)版嗎,其實(shí)有可能就是用到了預(yù)編譯,從而編譯不同的版本。


如果對預(yù)編譯不熟的同學(xué)可以去百度,或者谷歌下,我也是在查閱后才明白的!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

un %d
AI