一.小記
最近公司有個需求,需要用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。
這樣再次運行,就可以啦,我這裡實現的是點擊按鈕切換模型
------------------------------------------------------------------------------------------------------------------------------------------------------------
2017年03月10日09:49:20 更新
------------------------------------------------------------------------------------------------------------------------------------------------------------
有很多朋友會問,自己添加的點擊事件不響應,執行個體方法不響應,但是類方法卻響應。這裡其實是在程式啟動並執行時候,你所添加button的視圖控制器被U3D的系統方法替換掉了,導致按鈕被釋放,所以肯定也不會有事件響應了,下圖注釋的部分就是U3D系統替換你的ViewController的方法。
所以想要保證視圖控制器不被釋放,在建立的時候要加一個static即可解決。
需要demo的可以加我 歡迎支援