Unity 导出的Xcode工程
来源:互联网 发布:json2.js下载 编辑:程序博客网 时间:2024/06/05 10:55
Unity 导出的Xcode工程
想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯GAD游戏开发行业精英群156225479
本文主要讲解Unity导出的Xcode工程的目录结构。
我所用软件的版本:
Unity 5.3.5f1
Xcode 7.3
前导步骤
第一步,创建一个新的工程 Build_to_iOS_Android
第二步,创建一个新文件 CSharpToCPP.cs
using UnityEngine; public class CSharpToCPP { public void Func(int num) { if (num < 1) { return; } else { Debug.Log("Log:Time" num); } }}
第三步,创建
Plugins/iOS/iOS_EmptyMM.mm
StreamingAssets/ALL_EmptyTxt.txt
第四步,保存一下场景,如下图
第五步,选择iOS平台,Build导出Xcode工程
第六步,打开所导出的Xcode工程
进入正题
1、程序入口
任何程序都有一个入口,Unity导出的Xcode工程中也不例外,通过下图我们可以看到,在应用的入口中创建了UnityAppController的对象。
通过下图我们可以看到,UnityAppController是继承了UIApplicationDelegate。
下图为一个UIApplication的生命周期,我们可以看到系统事件存在着非常有用的监听,在UnityAppController.mm里面我们也可以看到对应的函数,这意味着在Unity中一样可以收到这些事件,以后我们将继承UnityAppController,并重写这些监听。
2、C# -> C :
在Unity中,我们用的是C#、JS进行编程(我是C#党),但是导出Xcode工程后,这些代码都转换成了C 代码。
在Player Settings里面我们可以看到脚本的运行模式有两种,一种是IL2CPP,另一种是Mono2x(以后肯定会被CPP替代,我就不讲了),通常我们会选择IL2CPP,因为效率高。
选择IL2CPP我们的逻辑代码将全部转换为C 代码,下图为CSharpToCPP.cs转换成的C 代码。
以下代码是上图中的翻译代码,对比我们一开始写的CSharpToCPP.cs里逻辑,应该能够看懂其中的逻辑。
// System.Void CSharpToCPP::Func(System.Int32) extern Il2CppClass* Int32_t2847414787_il2cpp_TypeInfo_var; extern Il2CppClass* String_t_il2cpp_TypeInfo_var; extern Il2CppClass* Debug_t1588791936_il2cpp_TypeInfo_var; extern Il2CppCodeGenString* _stringLiteral2043233667; extern const uint32_t CSharpToCPP_Func_m1441544591_MetadataUsageId; extern "C" void CSharpToCPP_Func_m1441544591 (CSharpToCPP_t373417985 * __this, int32_t ___num0, const MethodInfo* method) { static bool s_Il2CppMethodIntialized; if (!s_Il2CppMethodIntialized) { il2cpp_codegen_initialize_method (CSharpToCPP_Func_m1441544591_MetadataUsageId); s_Il2CppMethodIntialized = true; } { int32_t L_0 = ___num0; if ((((int32_t)L_0) >= ((int32_t)1))) { goto IL_0008; } } { return; }IL_0008: { int32_t L_1 = ___num0; int32_t L_2 = L_1; Il2CppObject * L_3 = Box(Int32_t2847414787_il2cpp_TypeInfo_var, &L_2); IL2CPP_RUNTIME_CLASS_INIT(String_t_il2cpp_TypeInfo_var); String_t* L_4 = String_Concat_m389863537(NULL /*static, unused*/, _stringLiteral2043233667, L_3, /*hidden argument*/NULL); IL2CPP_RUNTIME_CLASS_INIT(Debug_t1588791936_il2cpp_TypeInfo_var); Debug_Log_m1731103628(NULL /*static, unused*/, L_4, /*hidden argument*/NULL); return; }}
由于C 代码是机器自动生成的,可读性催人尿下,所以最好参照自己的C#代码进行阅读。
由于Unity -> Xcode -> 设备,编译时间太过漫长了,所以在问题排查时,我会尝试注释或简单修改C 代码,实现问题定位等。
3、资源 StreamingAssets -> Data/Raw
Unity导出Xcode工程后,原工程中的各种资源都被压缩、打包、加密后存放在Data文件夹中,这一点和Android是一致的,网上也有很多资源解密的方法,大家有需要可以自行搜索。
我们重点说一下Unity中的StreamingAssets文件夹,通过下图我们可以看到,StreamingAssets文件夹中的ALL_EmptyTxt.txt文件被完整地拷贝到Data/Raw文件夹中,实际上不光是文件,文件夹也会原封不动地拷入该文件夹。
至于这有什么用,比如说,配置文件放在这里,上手机调试的话可以在Xcode工程中直接修改配置,而不需要到Unity里重新导出Xcode工程。
4、Plugins/iOS -> Library/Plugins/iOS
Plugins/iOS文件夹中通常会放一些 *a.、*h、*.m文件,这些文件将拷贝至在Xcode工程的Library/Plugins/iOS文件夹中,在Xcode编译时也将被编译。
实际操作过程中,我会把自己为iOS写的OC、C、C 代码、SDK提供的.a文件放到里面,以避免每次编译后都要在Xcode工程里重新导入。
5、Icon
在Unity的Player Settings是中,我们可以添加相应的Icon
这些Icon图片将被重新压缩、命名最后放入下图中的位置。
由于Unity内只能导出这些分辨率大小(比如iPadPro的icon无法导出),而且Unity会根据我们选择的图片压缩格式重新生成Icon(如果格式没选对容易图片变模糊),所以我选择到Xcode工程中替换这些文件。
6、闪屏
Unity在iOS有很多种闪屏方案,具体方案效果大家可以自行搜索~
下图为常见的单图片闪屏导出位置,与Icon一样,我一般在这边替换,哦对,不要忘了取消ShowUnitySplashScreen的勾选。
7、Framework
在Unity的Plugins/iOS/中文件可以为自身简单勾选配置一些Framework依赖,见下图。
这些依赖将自动添加到Xcode工程中,我们可以在Frameworks文件夹检查是否添加。
8、Player Settings -> 设置
在Unity的Player Settings中存在着大量的配置,这些配置将反应到Xcode工程中,在下图中圈出了部分,这些东西并不复杂,我也就不赘述了。
- Unity 导出的Xcode工程
- Unity-导出Xcode工程时的自动配置
- iOS Xcode原生项目集成Unity导出的工程
- Xcode原生项目集成Unity导出的工程
- 关于unity导出xcode的工程中unity的内容部分。备忘录
- Unity编程笔录--Unity导出Xcode工程ShareSDK功能的配置
- Unity导出XCode工程的时候自动修改工程设置添加依赖
- Unity 导出xcode工程中 怎么设置为Append的方式导出之命令行
- iOS - 将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法
- Unity导出Xcode工程 在模拟器上调试
- Unity生成的xcode工程问题
- Unity导出xcode项目
- Unity 导出的xcode工程运行报错line 2: /Users/wangxiangheng/Desktop/IOS/MapFileParser.sh: Permission denied
- Unity导出Andriod工程
- Unity导出Gradle工程
- Xcode7.3编译unity导出工程出现 Error "unknown type name __declspec" after Xcode 7.3 upgrade
- unity-metaio在xcode的导出编译出错
- Unity中导出iOS工程
- Kafka->Spark Streaming->mongodb
- 工作过程中需要加强的技术
- CentoS安装配置VNC
- C#窗体绘制波形
- matlab save
- Unity 导出的Xcode工程
- 第十一周项目3(1)-图遍历算法实现(DFS)
- 小程序入门体验
- ThreadLocal为共享资源创建线程本地副本变量实现线程安全
- 网站截图工具EyeWitness
- IntelliJ Idea 常用快捷键列表
- apicloud极光推送
- codefoces 883H Palindromic Cut
- Django入门小记