iOS與unity3D交互整合的那些事

一.小記

最近公司有個需求,需要用unity3D建立3D模型,并且實現切換功能,由于做開發時間不算長,又沒有接觸過unity3D, 所以只能一頭霧水去網上查找資料,也看了雨松MOMO的文章,不過都是幾年前的了,有些東西已經不適用了,只能邊看邊研究,今天終于有點眉目了,可以在unity3D導出的iOS工程文件的基礎上,對3D建模的頁面進行修改,并能夠執行一些操作了。

二.實現細節

unity3D 版本: 5.3.4

Xcode ? ?版本: 7.3.1

首先就是需要做unity3D的人員將相應的模型上綁定好腳本,并告知你模型或者說要操作的對象的名稱和要調用的方法名稱,這里由于我要實現的是切換攝像機的角度,所以名稱為mycamera(我希望是駝峰命名myCamera,可惜unity3D那邊不是我寫的,就不要在意這些細節了,自己注意就好),導出的時候在playerSetting中做好各種設置,選擇使用模擬器調試、SDK版本什么的,這里就不贅述了。

導出的包如果是壓縮后傳過來的,那么解壓后需要稍等一會才能看見文件夾中的xcodeproj文件,不知道什么原因可能是文件太大了吧......

打開xcodeproj文件,首先編譯一下試試,很大可能報一個錯誤

編譯報錯

意思是說MapFileParser.sh文件沒有權限執行,這樣我們進入中端,給予這個文件權限

給MapFileParser.sh權限

這樣,報錯就能夠成功解決了,再次運行就會出現沒有加工處理過的原生的unity3D的內容了

比如像這個杯子的3D模型

文件能正常編譯運行,我們就可以進行下一步了。

我們在導出的工程中自己添加文件MyViewInit

添加自己的文件

在文件中寫入自己想要實現的代碼

MyViewInit.h


MyViewInit.m
MyViewInit.m

當一個簡單的界面搭建好之后,我們就要先測試一下是否能夠添加到U3D模型界面,在工程文件夾中找到Classes文件夾,點擊展開,找到UnityAppController.mm文件,該文件是U3D工程的啟動文件

找到UnityAppController.mm文件

在文件的最上部分,導入自己寫的文件的頭文件

#import "MyViewInit.h"

找到方法

didFinishLaunching

在方法最底部添加布置UI的代碼

布置UI

其中UnityGetGLViewController() 是U3D模型視圖中的根視圖控制器

(如果在老版本的unity3D中可能需要對此進行更改)

然后就可以點擊運行進行測試了,不出什么意外的話,就可以顯示在模型視圖上了

添加UI控件后的視圖

怎么樣,效果立竿見影吧!

下面進行最重要的一步,向U3D模型發送消息,回到MyViewInit.m文件,為兩個button添加的點擊事件完成實現,別忘了在.h文件聲明

實現button點擊事件

為了防止發生小意外找不到錯誤,可以先在這里打印,看看按鈕是否響應點擊事件,如果能成功打印,那就萬事大吉了。


這里要著重說一點,雨松MOMO在他的一篇文章中講述了這方面的內容,他使用的是繼承自UIViewController的文件,并使用對象方法來寫UI和點擊事件,不知道為什么,添加的UI空間可以顯示,但是button不響應點擊事件,我還暫時沒有深究原因,待后續更新。


在點擊事件中,使用U3D已經寫好的方法

UnitySendMessage("mycamera", "changeModel", "");

第一個參數?填寫接受方法的物品或者模型名稱。

第二個參數 填寫方法名字。

第三個參數 填寫要穿的參數,沒有要傳的參數直接寫"",這里不能寫nil,會crash。

這樣再次運行,就可以啦,我這里實現的是點擊按鈕切換模型

切換模型

后續還會將此工程嵌入到已完成的iOS項目中進行整合,我還會繼續更新!


----------------------------------------------------------------------------------------------------

2017年03月10日09:49:20 ?更新

----------------------------------------------------------------------------------------------------

有很多朋友會問,自己添加的點擊事件不響應,實例方法不響應,但是類方法卻響應。這里其實是在程序運行的時候,你所添加button的視圖控制器被U3D的系統方法替換掉了,導致按鈕被釋放,所以肯定也不會有事件響應了,下圖注釋的部分就是U3D系統替換你的ViewController的方法。


U3D系統方法會換掉你的控制器


所以想要保證視圖控制器不被釋放,在創建的時候要加一個static即可解決。




歡迎支持

我的新浪微博:任性的驢

歡迎關注!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容