史上最全unity與xcode集成教程

unity版本:unity 5.4.3f1?

xcode版本:xcode 8

一、導出unity項目

1.File->Build Settings->ios->Switch platform 切換為iOS平臺,

2.player Settings.....(這個地方設置錯誤會導致導入ios工程之后出現200+錯誤)

3.File->Build Settings->Build(保存為xcode文件)

--------我是分割線------------

二、合并unity項目(2種方式,一是把你的工程集成到unity項目,二是把unity項目集成至你的工程)

(一),將原工程集成至unity工程

1,將原工程直接拖拽到Unity生成的工程里,在Unity的工程上進行開發。

2,將原工程的main.m文件、AppDelegate.h和AppDelegate.m文件刪除,若有pch文件,也可與Unity工程中的Pch文件合并后刪除(刪除相關文件前請先備份,合并后請檢查pch路徑是否正確)。

3,此時程序的主函數入口為Classes/main.mm,AppDelegate為Classes/UnityAppController.mm,程序的pch文件為Classes/Prefix.pch。將原工程的相應代碼拷貝到相對應的文件中即可。

4,因為現在程序的入口在Unity工程端,所以原工程的主界面需在Unity工程運行后(如下圖,“showGameUI”方法調用之后)再添加到keyWindow上即可。

(二),將unity項目集成至原工程

1,將unity與iOS工程放置與同一根目錄,將Unity工程中的`Classes`、`Data`和`Libraries`、‘MapFileParser.sh’文件夾復制到自己的工程根目錄。

2,添加文件,Data 選擇Create folder references,Classes和Libraries 選擇Create groups。

3,在Build settings中設置Pch文件(如工程已有pch文件,請將兩個pch文件合并)。我的做法是,復制unity ?Classes中Pch文件中的代碼添加至自己的Pch文件中,刪除classes中的Pch文件

4.復制Classes中的main.mm文件中的代碼,刪除你的main.m中的代碼,粘貼過去,刪除main.mm,修改main.m為main.mm;

5,在Build Phases新建運行腳本語句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中設置Header Search Paths?

$(SRCROOT)/Libraries/libil2cpp/include

$(SRCROOT)/Libraries/bdwgc/include

$(SRCROOT)/Classes/Native

"$(SRCROOT)/Classes"

7,在Build settings中設置Other C Flags

-mno-thumb

-DINIT_SCRIPTING_BACKEND=1

8,在Build Phases中導入以下庫(這里具體請查看導出的ios工程里面的庫,千萬不要重復導入)


9,在Build Phases中將所有.mm文件(除了CameraCapture.mm,MetalHelper.mm,DisplayManager.mm文件)打上MRC標簽。

10.編譯真機運行(此時運行項目進入unity界面)

-------------------我是分割線----------------

三、在iOS工程中打開unity項目 ,(我們項目的入口為main.mm,main函數之后調用UnityAppController.mm,也就是以前項目的AppDelegate.m文件不調用,可以刪除)


1.修改工程啟動方式,由先啟動unity視圖,修改為先啟動我們的ViewController

我們加入了一個myPageEnable變量,表示我們的myPage是否被啟動過,如果啟動做,就不再重復執行,注釋掉startUnity: 改為myPageEnable:如下圖。(此時,運行項目會進入我們自己的界面)

我用單利保存了當前的application 和當前的self,(用于以后點擊按鈕進入unity)

這樣,我們就實現工程直接先啟動我們的視圖,其實總結一下很簡單,把APP的rootViewController修改成我們的,并且停用原有Unity的相同功能代碼。

2.在iOS中打開unity界面

首先,unity一旦被打開,我們是不需要徹底關閉掉的,當從unity返回我們的View 時,將unity view暫停到后臺,并把window的rootviewcontroller設置為我們的rootViewController

我們已經知道,啟動Unity的函數是

- (void)startUnity:(UIApplication *)application,所以重新調用這個函數即可

在我們的控制器里面點擊按鈕(redpacketButton是紅包按鈕)打開unity:

注意一點,startUnity方法只能使用一次。多次調用同樣會導致應用Crash,并報錯:“should not be reached at domain.c”,所以我們用restartUnity(這個方法寫在UnityAppController.mm中)

3.關閉unity界面(這里有兩種方法,一,調用unity中的back函數。二,我們自己寫退出按鈕)

值得注意的是:在extern "C"中,不能用OC的self和self.window獲取到appController和window,必須使用UnityAppController對象提供的方法GetAppController()和UnityGetGLView()來獲取。

3.1, 調用unity中的back函數(這個函數應和unity開發人員溝通,統一命名),調用方法:

extern "C"? void back(){

//你的代碼

}

3.2 自己寫退出按鈕

Unity View啟動時在頁面中初始化一個我們實現寫好的關閉按鈕的UIView,按鈕點擊事件方法和上面一樣


-------------------我是分割線----------------

四。Unity與iOS傳值

4.1 iOS發消息給unity

// 添加這句代碼,它負責向Unity傳遞參數;(具體參數和unity開發人員協商)

extern void UnitySendMessage(const char *, const char *, const char *);

IOS調用Unity函數需要用到UnitySendMessage方法,方法中有三個參數

UnitySendMessage("gameobject", "Method",msg);

參數一為unity腳本掛載的gameobject(可以理解為具體的unity中某個對象或者物體)

參數二為unity腳本中要調用的方法名

參數三為傳遞的數據,注意:傳遞的數據只能是char *類型


4.2 unity向iOS 傳值,這個我沒有用到,大家可以google ?網上案例很多。


結語

實用公眾號: 啊帥科技分享。免費蘋果id,軟件,小飛機等。

最近公司開發AR紅包,寫出這個博客給大家作為參考。因為是初步接觸unity,自己也翻越了很多資料,如果有錯誤,希望大家指正。后期會不斷更新補全集成中遇到的各種問題。

有疑問可以給我發郵件(或者QQ),看到了必定回復:1020351736@qq.com?

QQ群號:129018636

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • unity版本 2017.1.1f1 Xcode版本8.2.1 (8C1002) 第一步 導出unity的Xco...
    野生塔塔醬閱讀 3,880評論 5 4
  • 關于unity導出工程與已有iOS工程合并網上面已經有很多的教程,但是還是要記錄一下自己的經歷過程。從最基本的說明...
    Mory閱讀 9,332評論 121 13
  • - 說明 參考網址unity導出工程導入到iOS原生工程中詳細步驟 我現在有兩個工程,一個是從unity中導出的i...
    Bob_Running閱讀 1,097評論 0 0
  • 整理最大的力量來自于通過整理這個外在動作改變自己的內心。 如果整理的過程沒有讓自己的內心有所觸動和變化,那么生活和...
    袁春楠閱讀 334評論 0 1
  • 我尋遍所有禮堂,都裝不下我那倔犟的信仰。 有多少熾烈癡狂,最后變成了多少個夜深人靜的煙霧繚繞。 過往歲月,這壺酒,...
    姜牧之5373閱讀 260評論 0 0