unity版本:unity 5.4.3f1?
xcode版本:xcode 8
一蕴掏、導(dǎo)出unity項(xiàng)目
1.File->Build Settings->ios->Switch platform 切換為iOS平臺,
2.player Settings.....(這個地方設(shè)置錯誤會導(dǎo)致導(dǎo)入ios工程之后出現(xiàn)200+錯誤)
3.File->Build Settings->Build(保存為xcode文件)
--------我是分割線------------
二调鲸、合并unity項(xiàng)目(2種方式盛杰,一是把你的工程集成到unity項(xiàng)目,二是把unity項(xiàng)目集成至你的工程)
(一)藐石,將原工程集成至unity工程
1饶唤,將原工程直接拖拽到Unity生成的工程里,在Unity的工程上進(jìn)行開發(fā)贯钩。
2,將原工程的main.m文件办素、AppDelegate.h和AppDelegate.m文件刪除,若有pch文件,也可與Unity工程中的Pch文件合并后刪除(刪除相關(guān)文件前請先備份臼闻,合并后請檢查pch路徑是否正確)愕鼓。
3,此時程序的主函數(shù)入口為Classes/main.mm需曾,AppDelegate為Classes/UnityAppController.mm吗坚,程序的pch文件為Classes/Prefix.pch。將原工程的相應(yīng)代碼拷貝到相對應(yīng)的文件中即可呆万。
4商源,因?yàn)楝F(xiàn)在程序的入口在Unity工程端,所以原工程的主界面需在Unity工程運(yùn)行后(如下圖谋减,“showGameUI”方法調(diào)用之后)再添加到keyWindow上即可牡彻。
(二),將unity項(xiàng)目集成至原工程
1出爹,將unity與iOS工程放置與同一根目錄庄吼,將Unity工程中的`Classes`、`Data`和`Libraries`严就、‘MapFileParser.sh’文件夾復(fù)制到自己的工程根目錄总寻。
2,添加文件梢为,Data 選擇Create folder references渐行,Classes和Libraries 選擇Create groups轰坊。
3,在Build settings中設(shè)置Pch文件(如工程已有pch文件殊轴,請將兩個pch文件合并)衰倦。我的做法是,復(fù)制unity ?Classes中Pch文件中的代碼添加至自己的Pch文件中旁理,刪除classes中的Pch文件
4.復(fù)制Classes中的main.mm文件中的代碼樊零,刪除你的main.m中的代碼,粘貼過去孽文,刪除main.mm驻襟,修改main.m為main.mm;
5,在Build Phases新建運(yùn)行腳本語句Run Script
rm -rf "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Data"
cp -Rf "$PROJECT_DIR/Data" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Data"
6.在Build settings中設(shè)置Header Search Paths?
$(SRCROOT)/Libraries/libil2cpp/include
$(SRCROOT)/Libraries/bdwgc/include
$(SRCROOT)/Classes/Native
"$(SRCROOT)/Classes"
7芋哭,在Build settings中設(shè)置Other C Flags
-mno-thumb
-DINIT_SCRIPTING_BACKEND=1
8沉衣,在Build Phases中導(dǎo)入以下庫(這里具體請查看導(dǎo)出的ios工程里面的庫,千萬不要重復(fù)導(dǎo)入)
9减牺,在Build Phases中將所有.mm文件(除了CameraCapture.mm,MetalHelper.mm,DisplayManager.mm文件)打上MRC標(biāo)簽豌习。
10.編譯真機(jī)運(yùn)行(此時運(yùn)行項(xiàng)目進(jìn)入unity界面)
-------------------我是分割線----------------
三、在iOS工程中打開unity項(xiàng)目 拔疚,(我們項(xiàng)目的入口為main.mm肥隆,main函數(shù)之后調(diào)用UnityAppController.mm,也就是以前項(xiàng)目的AppDelegate.m文件不調(diào)用稚失,可以刪除)
1.修改工程啟動方式栋艳,由先啟動unity視圖,修改為先啟動我們的ViewController
我們加入了一個myPageEnable變量句各,表示我們的myPage是否被啟動過吸占,如果啟動做,就不再重復(fù)執(zhí)行凿宾,注釋掉startUnity: 改為myPageEnable:如下圖矾屯。(此時,運(yùn)行項(xiàng)目會進(jìn)入我們自己的界面)
我用單利保存了當(dāng)前的application 和當(dāng)前的self,(用于以后點(diǎn)擊按鈕進(jìn)入unity)
這樣初厚,我們就實(shí)現(xiàn)工程直接先啟動我們的視圖问拘,其實(shí)總結(jié)一下很簡單,把APP的rootViewController修改成我們的惧所,并且停用原有Unity的相同功能代碼骤坐。
2.在iOS中打開unity界面
首先,unity一旦被打開下愈,我們是不需要徹底關(guān)閉掉的纽绍,當(dāng)從unity返回我們的View 時,將unity view暫停到后臺势似,并把window的rootviewcontroller設(shè)置為我們的rootViewController
我們已經(jīng)知道拌夏,啟動Unity的函數(shù)是
- (void)startUnity:(UIApplication *)application僧著,所以重新調(diào)用這個函數(shù)即可
在我們的控制器里面點(diǎn)擊按鈕(redpacketButton是紅包按鈕)打開unity:
注意一點(diǎn),startUnity方法只能使用一次障簿。多次調(diào)用同樣會導(dǎo)致應(yīng)用Crash盹愚,并報(bào)錯:“should not be reached at domain.c”,所以我們用restartUnity(這個方法寫在UnityAppController.mm中)
3.關(guān)閉unity界面(這里有兩種方法站故,一皆怕,調(diào)用unity中的back函數(shù)。二西篓,我們自己寫退出按鈕)
值得注意的是:在extern "C"中愈腾,不能用OC的self和self.window獲取到appController和window,必須使用UnityAppController對象提供的方法GetAppController()和UnityGetGLView()來獲取岂津。
3.1, 調(diào)用unity中的back函數(shù)(這個函數(shù)應(yīng)和unity開發(fā)人員溝通虱黄,統(tǒng)一命名),調(diào)用方法:
extern "C"? void back(){
//你的代碼
}
3.2 自己寫退出按鈕
Unity View啟動時在頁面中初始化一個我們實(shí)現(xiàn)寫好的關(guān)閉按鈕的UIView,按鈕點(diǎn)擊事件方法和上面一樣
-------------------我是分割線----------------
四吮成。Unity與iOS傳值
4.1 iOS發(fā)消息給unity
// 添加這句代碼橱乱,它負(fù)責(zé)向Unity傳遞參數(shù);(具體參數(shù)和unity開發(fā)人員協(xié)商)
extern void UnitySendMessage(const char *, const char *, const char *);
IOS調(diào)用Unity函數(shù)需要用到UnitySendMessage方法粱甫,方法中有三個參數(shù)
UnitySendMessage("gameobject", "Method",msg);
參數(shù)一為unity腳本掛載的gameobject(可以理解為具體的unity中某個對象或者物體)
參數(shù)二為unity腳本中要調(diào)用的方法名
參數(shù)三為傳遞的數(shù)據(jù)仅醇,注意:傳遞的數(shù)據(jù)只能是char *類型
4.2 unity向iOS 傳值,這個我沒有用到魔种,大家可以google ?網(wǎng)上案例很多。
結(jié)語
實(shí)用公眾號: 啊帥科技分享粉洼。免費(fèi)蘋果id节预,軟件,小飛機(jī)等属韧。
最近公司開發(fā)AR紅包安拟,寫出這個博客給大家作為參考。因?yàn)槭浅醪浇佑|unity,自己也翻越了很多資料宵喂,如果有錯誤糠赦,希望大家指正。后期會不斷更新補(bǔ)全集成中遇到的各種問題锅棕。
有疑問可以給我發(fā)郵件(或者QQ)拙泽,看到了必定回復(fù):1020351736@qq.com?
QQ群號:129018636