U3D和iOS的整合問題

2021-07-23 20:00:10 字數 3462 閱讀 3448

最近做了乙個專案,需要和u3d的合作,第一次做這種專案,當兩邊都做完了工程,開始進行合併的時候,蒙 了,各種報錯,不知所云。還好廣大同行的無私奉獻精神,幫我度過了難關。特此寫下我的糾結路程,希望也可以幫助到遇到相同困難的你

u3d的版本5.4.1f

xcode版本是8.0

這兩個版本都是這時候最新的版本。

我採用的是把u3d匯出的ios 匯入到ios工程中。

(1)乙個執行都沒有錯誤的u3dios工程

(2)乙個執行都沒有錯誤的iosnative工程。

(3)乙個真機,u3dios不做特殊處理必須在真機上進行測試,所以在編譯的時候要選擇裝置。不然會報200個不知所云的錯誤。

(4)參考文件

[1][2]

(1)把u3d中的 classes、data、libraries、mapfileparser.sh 檔案先貼上到iosnative工程的根目錄下

(2)注意這裡幾個檔案的新增方式,如果新增方式錯誤了,會導致整合的徹底失敗

classes、libraries、mapfileparser.sh 通過add 新增到專案中,注意(選擇copy items if need 選擇 create groups)

我只有通過add新增是正確的,通過別的方式都是錯誤的

data新增到專案中 (選擇copy items if needs,選中 create folder references)這個不是通過add新增的,我的測試通過add新增是失敗的。

(3)新增framework

下面的這些都需要新增到ios 原生工程中去。

注意:libiconv.2.dylib 這個的新增方法

add other 然後全域性搜尋 command+shift+g 然後輸入/usr/lib 查詢就可以了

(4)新增runscript,這個在xcode8的版本上不用寫

(5)新增 search paths

(6)預處理檔案.pch

需要把u3d和ios的.pch檔案集成為乙個。可以通過 prefix header 檢視工程中使用的是哪個.pch檔案的路徑

(8)新增user-defined (unity_runtime_version版本號與匯出工程的unity版本號一致)

(9)將classes/main.mm全部內容複製到ios的main.m 並把ios中的main副檔名改為.mm, 修改如下**

然後要刪除classes/main.mm檔案

在ios的main.mm中做如下修改

//這裡關於window的初始化一定要寫

self

.window = [[uiwindow alloc] initwithframe:[uiscreen mainscreen].bounds];

self

.window

.backgroundcolor = [uicolor whitecolor];

secondhousetabbarcontroller * second = [[secondhousetabbarcontroller alloc]init];

self

.window

.rootviewcontroller = second;

self

[self

[self

.window makekeyandvisible];

return

yes;

} [self

} [self

} [self

} [self

} [self

}

@inte***ce

(12)檔案重複的錯誤

(13)公升級到xcode8的時候,出現了問題 .o檔案的衝突(重複)

是因為 other link flage 中 寫了 -all-load 這個去掉就可以 了

(14)刪除main.storyboard

移除main inte***ce中的預設main

到此我的程式可以了,如果你的還有錯誤,就可以參考我的給出的參考文件。

並且其中乙個參考文件是有demo的。

後續再遇到什麼問題,在更新這篇文字吧。

藍色的是folder 黃色的是group。 那麼它們有什麼區別呢?

group 和 folder的區別

group 一般只在你的工程中是資料夾的形式,但是在本地的目錄中還是以散亂的形式放在一起的,除非你是從外部以group的形式引用進來的。參與編譯

folder 只能作為資源,整個引用進專案,不能編譯**,也就是說,以folder形式引用進來的檔案,不能被放在complie sources列表裡面。不參與編譯

U3D層的運用

layermask下面簡單說一下層的開關方法 1.首先引入 的概念 與 交集 10000001 10000100 10000000 或 並集 10000001 10000100 10000101 非 反轉 10000001 01111110 2.int mylayermask 1 curlayer ...

U3D層的運用

layermask下面簡單說一下層的開關方法 1.首先引入 的概念 與 交集 10000001 10000100 10000000 或 並集 10000001 10000100 10000101 非 反轉 10000001 01111110 2.int mylayermask 1 curlayer ...

u3d載入外部的c DLL

環境 window平台下,vs2017,unity2018.2 mac環境下操作差不多,此處就不寫了 一 封裝和載入純邏輯庫 和unity不相干 1 新疆乙個c 工程,因為我的unity提示要求在 編譯器 環境下只支援netframework3.5,所以這裡建立的時候我選擇了3.5版本 2 新增如下...