Unity3D與iOS交互1(Unity里調(diào)用iOS原生)

此篇文章基于Unity version 5.3.6p6 與Xcode7.3。

在項目開發(fā)過程中,因為Unity3D打包之后默認都是只能用真機運行。其實Unity3D打包的項目也是可以用模擬器運行的,只是需要改下配置。

一、Unity3D打包后iOS如何使用模擬器?

(如果真機運行,不需要模擬器忽略此處,直切跳轉(zhuǎn)到二。暫時沒有研究如何打包后同時使用真機和模擬器, 可以分開打包)

具體步驟如下:

1.打開Unity3D項目,點擊菜單欄File選項,然后點擊Build Settings (快捷鍵Command+Shift+B),點擊Player Settings進入配置界面,如圖


找到最下面Other Settings設(shè)置里面的Target SDK (不同的Unity3D版本可能不同,有的是SDK Verson)。這里默認的是Device SDK,既真機狀態(tài)。我們想要在模擬器下,此處選擇Simulator SDK。然后就可以打包了。(注:選項Target Device 可以選擇我們需要運行的設(shè)備,默認是iPhone+iPad)


2.打包成功以后,打開Unity-iPhone.xcodeproj。查看工程狀態(tài)。我的工程是可以直接運行各個模擬器了。有的時候會出現(xiàn)如圖現(xiàn)象,不要著急

進入工程設(shè)置Build Settings 設(shè)置界面,在Architectures目錄下,找到Supported Platforms,選擇iOS,這時候在工程里面就可以選擇各個模擬器運行了。(這里可以選擇你支持的各個平臺類型)

二.Unity3D與iOS交互~~簡單的傳值

?Unity3D和iOS交互核心步驟如下:

? ? ? ? ? ? ?1.新建一個Unity3D項目;

? ? ? ? ? ? 2.新建一個iOS項目,新建一個ViewController.m,ViewController.m .h文件并導(dǎo)入Unity3D原始項目的Plugins文件加下(Plugins具體作用,下面會詳細解說),用于與Unity3D交互;

? ? ? ? ? ? ?3.打包成Xcode項目,運行測試。

1.新建一個Unity3D項目并打開。

2.新建一個iOS項目打開,創(chuàng)建繼承于UIViewController的文件,這里我命名為UnityToIOSString。(我們也可以創(chuàng)建繼承于NSObject)

3.在Unity3D項目的Assets文件夾下創(chuàng)建一個Plugins文件夾,再創(chuàng)建一個UnityToIOS文件夾,專門用來放原生代碼文件。把UnityToIOSString文件復(fù)制到UnityToIOS文件夾中。(注:Plugins文件夾用來放native插件。它們會被自動包含進build中去。注意這個文件夾只能是Assets文件夾的直接子目錄。)

4.打包成Xcode項目,接下來就是最關(guān)鍵的地方~~擼代碼?。。。。。?/h4>

1.帶參數(shù)無返回值

第一步:在Xcode項目中找到我們導(dǎo)入的UnityToIOSString文件。編寫交互函數(shù),用來unity調(diào)取。

在Unity C#中都是用調(diào)用C語言函數(shù),而我們在Xcode中編寫代碼,所以我們要加上標準C編寫的Dll函數(shù)。如上圖(別忘了在.h文件中寫函數(shù))。

第二步:在Unity中創(chuàng)建一個封裝類UnityToIOS,引入在Xcode中定義的方法,方法名必須與Xcode一樣。

要引入頭文件usingSystem.Runtime.InteropServices;? 為了[DllImport("__Internal")]。在聲明實現(xiàn)方法的時候要加上修飾符extern,專門給外部調(diào)用的修飾符,與DllImport屬性一起使用,該方法前面必須聲明static。

第三步:在Unity中創(chuàng)建一個事件文本ButtonIOSTest,創(chuàng)建UI事件,調(diào)用封裝方法。

保存后,基本上就完事了。但是這里面有2個小坑。1.我們在Unity中編寫的代碼并沒有在我們導(dǎo)出的Xcode項目中,要重新生成Xcode項目。2.我們在第一步寫的代碼并沒有在Unity中,我們要手動的把代碼復(fù)制會Unity中的UnityToIOSString中(暫時我沒有找到好的方法。如果誰有可以告訴我一聲)。完成這2點之后,我們就要重新Build生成Xcode項目,這里我們最好是Append而不要用Relpace。好了,運行Xcode看效果吧。

2.帶參數(shù)有返回值 -- 原理是一樣的,上圖。(注:有返回值的時候,因為考慮到內(nèi)存管理機制的問題,在回調(diào)的時候哦要加char *MakeStringCopy (const char *string)方法)

PS: 還有無參數(shù)無返回值,無參數(shù)有返回兩種函數(shù),原理一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容