Unity导出Xcode工程,loading加载页面跳转完资源后不跳转游戏登陆界面

Unity3D 导入Xcode 工程后。编译很慢
选择Targets--&Build options --&debug information format &然后选择DWARF&
这样再次编译的时候速度就很快了。
阅读(...) 评论()拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(391cc0eb01c04382-ua98).
重新安装浏览器,或使用别的浏览器unity3d(154)
为什么想要自动添加
由于Unity是全平台的游戏开发环境,在开发中针对特定平台的特定功能时,很难避免根据对象平台的不同而引入不同的依赖。包括源码,需要的库和框架等。在使用各种插件后这种情况愈发严重:比如想加入内购功能,StroreKit.framework必不可少,而且也需要相应的处理代码。按照一般的Unity插件开发流程,在完成.cs的接口声明和Unity侧的调用实现后,最重要的当然是在iOS native侧完成实现。而在以前,包括依赖库和所有源码文件,都只有在Unity生成Xcode工程之后,再手动添加。如果工程小依赖少的话花不了太多时间,但是如果项目很大,很可能折腾一次就要十来分钟,严重影响了工作效率,必须加以解决。
Unity开发团队也意识到了这个问题,在Unity编译的最后加入了一个脚本调用的命令,会自动搜索Editor文件夹下的PostprocessBuildPlayer,并进行调用,在该文件中可以自己加入脚本来向Xcode中添加库和文件。关于PostprocessBuildPlayer的详细信息,可以参看,关于向Xcode中添加文件或库,gonzoua的也许是不错的选择。但是似乎xcs只能针对Xcode3来添加,在Xcode4中,主工程文件的结构发生了改变,导致xcs失效,而这个项目也迟迟没有更新(也许有时间我会考虑接手继续这个项目,但肯定不是现在...)。因此不得不打其他主意。
在Unity3.5中,加入了一个很棒的标签——,被该标签标注的函数将自动在build
player后被调用,这为大家提供了一个不需要用脚本和命令行就能添加或修改编译得到的工程的绝好的入口。darktable用python实现了一个Xcode4工程文件读写的接口,但是对于Unity来说,更需要的是C#的实现。Cariola完成了,但是存在一些错误和不太好用的地方,代码也很乱。我在其基础上进行了一些改进和整理。但是因为变动的还是比较大,很难merge回去,所以决定自己开一个项目来继续推进这个项目。
我把它叫做XUPorter,a dependency porter from Unity to Xcode。XUPorter可以读取Xcode工程文件并进行解析(再次感谢darktable的工作),之后在Unity工程的Assets目录下寻找所有的.projmods文件,并根据文件内容向工程中添加文件或库。
将Github项目中的所有文件copy到Unity工程文件夹下的/Assets/Editor目录中,XUPorter使用一个来进行。如果你的项目中已经在使用这个MiniJSON了的话,可以直接将XUPorter文件夹下的MiniJSON文件夹删掉;如果不一样的话,你可以选择其中一个重构一下或者加上命名空间来解决类名冲突。接下来,Mods文件夹下是示例文件以及需要导入Xcode的文件。在看完以后你需要把Mods文件夹下的所有.projmods文件以及Mods/iOS文件夹下的内容删除或者替换为你所需要的内容。
在提供了.unitypackege格式文件的下载,你也可以选择下载打包好的文件并导入你的工程,之后的步骤和上面一样。
.projmods文件是一个JSON格式的配置patch文件,定义了要如何设置Xcode工程。举个基本的例子,比如KKKeychain.projmods:
&group&: &KKKeychain&,
&libs&: [],
&frameworks&: [&Security.framework&],
&headerpaths&: [],
&folders&: [&iOS/KKKeychain/&],
&linker_flags&: [],
&excludes&: [&^.*.meta$&, &^.*.mdown$&, &^.*.pdf$&]
各参数定义如下:
group:所有由该projmods添加的文件和文件夹所属的Xcode中的group名称
libs:在Xcode Build Phases中需要添加的动态链接库的名称,比如libz.dylib
frameworks:在Xcode Build Phases中需要添加的框架的名称,比如Security.framework
headerpaths:Xcode中编译设置中的Header Search Paths路径
files:加入工程的文件名
folders:加入工程的文件夹,其中所有的文件和文件夹都将被加入工程中
linker_flags:添加到工程linker flag中的链接配置,比如-ObjC
excludes:忽略的文件的正则表达式,匹配的文件将不会被加入工程中
更多的例子可以参看Mods文件夹中的其他projmods文件。所有的定义路径都是基于当前projmods文件位置的相对路径。 最后,在完成projmods后,Unity会在编译完成后,调用XCodePostProcess的OnPostProcessBuild来对编译得到的Xcode工程进行修改。
之后进一步要做的是为MiniJSON添加一个namespace,这样可以避免不必要的冲突。另外如果您有什么好的想法,也欢迎fork这个项目并给我pull request。项目的github链接请。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:335881次
积分:3981
积分:3981
排名:第7873名
转载:311篇
评论:38条
(3)(1)(1)(2)(6)(2)(2)(10)(13)(1)(6)(2)(1)(1)(6)(14)(41)(5)(5)(2)(5)(6)(14)(9)(4)(9)(5)(13)(1)(7)(6)(16)(17)(47)(8)(6)(8)(15)(2)「Unity」与iOS、Android平台的整合:1、导出的Xcode工程
时间: 00:08:12
&&&& 阅读:988
&&&& 评论:
&&&& 收藏:0
标签:本文属于之一。
本文主要讲解Unity导出的Xcode工程的目录结构。
我所用软件的版本:
  Unity 5.3.5f1
  Xcode 7.3
第一步,创建一个新的工程 Build_to_iOS_Android
第二步,创建一个新文件 CSharpToCPP.cs
using UnityE
public class CSharpToCPP
public void Func(int num)
if (num & 1)
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_t_il2cpp_TypeInfo_
extern Il2CppClass* String_t_il2cpp_TypeInfo_
extern Il2CppClass* Debug_t_il2cpp_TypeInfo_
extern Il2CppCodeGenString* _stringLiteral;
extern const uint32_t CSharpToCPP_Func_m_MetadataUsageId;
extern "C"
void CSharpToCPP_Func_m (CSharpToCPP_t * __this, int32_t ___num0, const MethodInfo* method)
static bool s_Il2CppMethodI
if (!s_Il2CppMethodIntialized)
il2cpp_codegen_initialize_method (CSharpToCPP_Func_m_MetadataUsageId);
s_Il2CppMethodIntialized = true;
int32_t L_0 = ___num0;
if ((((int32_t)L_0) &= ((int32_t)1)))
goto IL_0008;
int32_t L_1 = ___num0;
int32_t L_2 = L_1;
Il2CppObject * L_3 = Box(Int32_t_il2cpp_TypeInfo_var, &L_2);
IL2CPP_RUNTIME_CLASS_INIT(String_t_il2cpp_TypeInfo_var);
String_t* L_4 = String_Concat_m(NULL /*static, unused*/, _stringLiteral, L_3, /*hidden argument*/NULL);
IL2CPP_RUNTIME_CLASS_INIT(Debug_t_il2cpp_TypeInfo_var);
Debug_Log_m(NULL /*static, unused*/, L_4, /*hidden argument*/NULL);
由于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工程里重新导入。
在Unity的Player Settings是中,我们可以添加相应的Icon
这些Icon图片将被重新压缩、命名最后放入下图中的位置。
由于Icon在Unity内将占据一定的内存,所以一般我会在Xcode中替换Icon文件,效果一致且不占用Unity的内存。
Unity在iOS有很多种闪屏方案,具体方案效果大家可以自行搜索~
下图为常见的单图片闪屏导出位置,与Icon一样,我一般在这边替换,哦对,不要忘了取消ShowUnitySplashScreen的勾选。
7、Framework
在Unity的Plugins/iOS/中文件可以为自身简单勾选配置一些Framework依赖,见下图。
这些依赖将自动添加到Xcode工程中,我们可以在Frameworks文件夹检查是否添加。&
8、Player Settings -& 设置
在Unity的Player Settings中存在着大量的配置,这些配置将反应到Xcode工程中,在下图中圈出了部分,这些东西并不复杂,我也就不赘述了。
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 加载进度条本页面跳转 的文章

 

随机推荐