Unity导出的iOS工程进行整合,解决CPU占用过大问题

1、首先将导出工程的Class、Library、Data文件Copy到iOS原生工程中去,另外导出需要Copy的文件也是以导出工程为基准的,例如,使用Vuforia来开发的Unity的项目到处时还需要添加Vuforia等文件夹,其中MapFileParser是神马文件,我也不清楚,希望有了解的大神指导

将Unity工程下的3个文件夹Classes、Libraries、Data添加至iOS工程中,添加时注意选择Copy items if needed选项,Classes和Libraries文件夹选择Create groups, 而Data文件夹选择Create folder references选项。

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第1张图片

2、添加相关的框架framework,如果Unity用的是ARKit开发的,导出来的需要添加ARKit框架

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第2张图片

3、配置Build Settings相关选项,这些配置也是以Unity导出的工程为基准来做的

(1)Enable Bitcode->NO

(2)Other Linker Flags

添加-weak_framework CoreMotion -weak-lSystem

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第3张图片

(3)Header Search Paths

添加以下选项:

"$(SRCROOT)"

"$(SRCROOT)/Unity5Native/Classes"

$(SRCROOT)/Unity5Native/Classes/Native

$(SRCROOT)/Unity5Native/Libraries/libil2cpp/include

$(SRCROOT)/Unity5Native/Libraries

注意:根据工程实际路径来配置,$(SRCROOT)是指.xcproj文件所在的路径,Classes和Libraries文件夹是在与Unity5Native.xcproj文件同级的Unity5Native文件夹下面的,所以SRCROOT下面要再添加Unity5Native层级。如果此处路径配置不正确,可能会出现诸如il2cpp-config.h file not found的编译错误。

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第4张图片

4)Library Search Paths

添加以下选项:

"$(SRCROOT)"

"$(SRCROOT)/Unity5Native/Libraries"

(5)Custom Compiler Flags->Other C Flags

添加-DINIT_SCRIPTING_BACKEND=1

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第5张图片

如果出现以上问题,可能得需要在Other C Flags中添加

-DRUNTIME_IL2CPP=1

(6)C Language Dialect选择C99 [-std=c99]

(7) 新建pch文件:PrefixHeader.pch

(8) 设置Prefix Header的路径

根据pct文件所在路径实际设置,由于我是放在Supporting Filegroup组下面的,实际在与Unity5Native.xcproj文件同目录下的Unity5Native文件夹下。

(9)Precompile Prefix Header选择YES

(10)C++ Language Dialect选择C++11 [-std=c++11]

(11)Enable C++ Runtime Types选择NO

(12)Warnings-Objective C->Overriding Deprecated Objective-C Methods选择YES

(13)Warnings-Objective C->Unintentional Root Classes选择YES

(14)User-Defined

添加如下选项:

GCC_THUMB_SUPPORT->NO

GCC_USE_INDIRECT_FUNCTION_CALLS->NO

UNITY_RUNTIME_VERSION->5.4.0f3

UNITY_SCRIPTING_BACKEND->il2cpp

4、pch文件内容替换

将Classes文件夹下的Prefix.pch文件中的内容全部复制粘贴到PrefixHeader.pch文件的

#define PrefixHeader_pch

#endif/* PrefixHeader_pch */

之间,并且引入UnityAppController.h文件如图所示:

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第6张图片

5、Supporting Files下面的main.m

重命名成main.mm

将Classes文件夹下的main.mm文件中的全部内容复制到Supporting Files文件夹下的main.mm文件中,并进行修改:

//const char* AppControllerClassName = @”UnityAppController”;

const char* AppControllerClassName = “AppDelegate”;

Build Phases中移除Classes下的main.mm

6、UnityAppController.h

作如下修改:

//inline UnityAppControllerGetAppController()

//{

// return (UnityAppController)[UIApplication sharedApplication].delegate;

//}

#import"AppDelegate.h"

inline UnityAppController*  GetAppController()

{

AppDelegate *delegate= (AppDelegate *)[UIApplication sharedApplication].delegate;

return delegate.unityController;

}


Unity导出的iOS工程进行整合,解决CPU占用过大问题_第7张图片

7、AppDelegate.h和AppDelegate.m

AppDelegate.h文件作如下修改:

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第8张图片

AppDelegate.m文件作如下修改:

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第9张图片
Unity导出的iOS工程进行整合,解决CPU占用过大问题_第10张图片
Unity导出的iOS工程进行整合,解决CPU占用过大问题_第11张图片

8、在工程的根视图中的ViewDidLoad如下

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第12张图片

其按钮的点击事件showUnityView如下

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第13张图片

其中,在按钮的点击事件中发送了一个通知,在UnityAppController.mm的applicationDidBecomeActive:方法中添加了一个通知,用来监听是否启动Unity

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第14张图片

另外当Unity启动后,即不需要再次调用applicationDidBecomeActive该方法,故使用NSUserDefaults添加一个字段,来判断是否是第一次启动,故在AppDelegate的didFinishLaunchingWithOptions方法中,添加一个初始值,

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第15张图片

并在ViewController的点击事件中,来判断是否是第一次启动,并且,Unity启动后,需要改变该字段,同时将通知中心移除。

Unity导出的iOS工程进行整合,解决CPU占用过大问题_第16张图片

通过这种方式可以保证,在不调用Unity时,程序的CPU占用相对较小。

其中导出的问题,常见的一些配置bug,参考

http://www.jianshu.com/p/fd52e2cf2f42

http://blog.csdn.net/dylan_lwb_/article/details/51452470

另外导出工程也可参考该博客

http://qingqinghebiancao.github.io/2016/09/07/Unity集成到iOS本地工程中/

你可能感兴趣的:(Unity导出的iOS工程进行整合,解决CPU占用过大问题)