一.小記
最近公司有個需求,需要用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文件沒有權限執行,這樣我們進入中端,給予這個文件權限
這樣,報錯就能夠成功解決了,再次運行就會出現沒有加工處理過的原生的unity3D的內容了
文件能正常編譯運行,我們就可以進行下一步了。
我們在導出的工程中自己添加文件MyViewInit
在文件中寫入自己想要實現的代碼
當一個簡單的界面搭建好之后,我們就要先測試一下是否能夠添加到U3D模型界面,在工程文件夾中找到Classes文件夾,點擊展開,找到UnityAppController.mm文件,該文件是U3D工程的啟動文件
在文件的最上部分,導入自己寫的文件的頭文件
#import "MyViewInit.h"
找到方法
在方法最底部添加布置UI的代碼
其中UnityGetGLViewController() 是U3D模型視圖中的根視圖控制器
(如果在老版本的unity3D中可能需要對此進行更改)
然后就可以點擊運行進行測試了,不出什么意外的話,就可以顯示在模型視圖上了
怎么樣,效果立竿見影吧!
下面進行最重要的一步,向U3D模型發送消息,回到MyViewInit.m文件,為兩個button添加的點擊事件完成實現,別忘了在.h文件聲明
為了防止發生小意外找不到錯誤,可以先在這里打印,看看按鈕是否響應點擊事件,如果能成功打印,那就萬事大吉了。
這里要著重說一點,雨松MOMO在他的一篇文章中講述了這方面的內容,他使用的是繼承自UIViewController的文件,并使用對象方法來寫UI和點擊事件,不知道為什么,添加的UI空間可以顯示,但是button不響應點擊事件,我還暫時沒有深究原因,待后續更新。
在點擊事件中,使用U3D已經寫好的方法
UnitySendMessage("mycamera", "changeModel", "");
第一個參數?填寫接受方法的物品或者模型名稱。
第二個參數 填寫方法名字。
第三個參數 填寫要穿的參數,沒有要傳的參數直接寫"",這里不能寫nil,會crash。
這樣再次運行,就可以啦,我這里實現的是點擊按鈕切換模型
后續還會將此工程嵌入到已完成的iOS項目中進行整合,我還會繼續更新!
----------------------------------------------------------------------------------------------------
2017年03月10日09:49:20 ?更新
----------------------------------------------------------------------------------------------------
有很多朋友會問,自己添加的點擊事件不響應,實例方法不響應,但是類方法卻響應。這里其實是在程序運行的時候,你所添加button的視圖控制器被U3D的系統方法替換掉了,導致按鈕被釋放,所以肯定也不會有事件響應了,下圖注釋的部分就是U3D系統替換你的ViewController的方法。
所以想要保證視圖控制器不被釋放,在創建的時候要加一個static即可解決。
我的新浪微博:任性的驢
歡迎關注!!!