打包准备:
1.android
需要jdk 和android sdk ,如果有使用C++的库,还需要NDK,只有将.so文件放在/Assets/Plugins/Android/libs下,Unity才会将.so文件识别为共享库,并在打包时将之拷贝到合适的地方。
unity2019 需要从hithub下载,打开hithub-安装,清空unity版本列表,然后从unity官网,选中hithub下载,即可
自带打包步骤:
1.选择平台,打开 file - Build Settings,可以选PC ,Android,IOS
2.打包设置
splash Image:个人版可设置不显示 ,在项目ProjectSettings目录下,找到ProjectSettings.asset文件,用记事本打开,搜索m_ShowUnitySplashScreen,将后面的1改为0,保存,运行。
手动打包:
//版本号
PlayerSettings.bundleVersion = CustomDefine.clientVersion;
//API 兼容性等级
PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android,ApiCompatibilityLevel.NET_2_0_Subset);
//最低版本
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel26;
//目标版本
PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel26;
//安装位置 1.自动 auto 2.优先外部扩展 PreferExternal
PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
//使用Gradle进行构建,需要Android SDK与Gradle支持,Gradle必须要求自己签名
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
//设置包名
PlayerSettings.applicationIdentifier = "com.android.com";
//产品名字
PlayerSettings.productName ="game name";
//定义符
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android,"");
//执行打包 场景名字,打包路径
BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);
//在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。
static string[] GetBuildScenes()
{
List<string> names = new List<string>();
foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
{
if (e == null)
continue;
if (e.enabled)
names.Add(e.path);
}
return names.ToArray();
}
PC打包
//软件名字
PlayerSettings.productName = "game name";
//版本号
PlayerSettings.bundleVersion = "1.0";
//unity是否全屏
PlayerSettings.defaultIsFullScreen = false;
//默认本地分辨率
PlayerSettings.defaultIsNativeResolution = true;
//屏幕宽度
PlayerSettings.defaultScreenWidth = 1280;
//屏幕高度
PlayerSettings.defaultScreenHeight = 820;
//启动时,弹窗选择分辨率
PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled;
PlayerSettings.SetAspectRatio(AspectRatio.Aspect16by9,true);
//是否显示启动图
PlayerSettings.SplashScreen.show = true;
//是否显示启动logo
PlayerSettings.SplashScreen.showUnityLogo = false;
//执行打包
BuildPipeline.BuildPlayer(GetBuildScenes(),path,BuildTarget.StandaloneWindows,BuildOptions.None);
IOS打包
打包后,需要将代码复制到xcode运行,需要将C#代码通过il2cpp转成cpp。
关于热更
1.为啥需要热更?
C#是编译型语言【不准确】,代码会先被编译成IL【Intermediate Language】中间层伪汇编语言,IL再解释成机器码,解释的过程可以在运行之前【打包】,也可以在运行时【热更】。
JIT【just in time】: 将IL解释为所在平台的机器码, 需要存放到一段具有:可读、可写、可执行的内存空间,然后修改CPU中的指令指针寄存器中的地址,让CPU执行之前解释出来的机器码。
AOT【静态编译】:c/c++都是需要本地编译完成后,然后运行编译后的文件,不能动态的修改代码.
因为JIT要申请可执行的内存空间,为了安全,IOS拒绝给与这样的权限。AOT是可以的。
2.主流热更方案
ILRuntime:
unity官方主推,纯C#实现,快速、方便且可靠的IL运行时。
文档说明:点击这里
工程Demo: 点击这里下载
视频教程:点击这里观看
如何导入ILRuntime?
//在第一行,添加这行配置
"scopedRegistries": [
{
"name": "ILRuntime",
"url": "https://registry.npmjs.org",
"scopes": [
"com.ourpalm"
]
}
],
//如果上面这个配置,在Package Manager列表刷新不出来,可以在dependencies添加如下:
com.ourpalm.ilruntime": "1.6.7"
//版本根据自己项目需要配置即可
Package Manager安装后,可导入ILRuntime示例Demo,安装的类库文件在:Library/PackageCache目录下
导入ILRuntime示例demo若是有Unsafe code报错,可在PlayerSettings勾选:Allow ‘unsafe code’ code即可。
Lua:
Lua是解释型语言,不用编译,在运行时能动态解释Lua代码并运行。解决方案成熟,对于C++的同学可能习惯用Lua。
Lua与unity交互分析 引用这里
tolua学习
Lua tolua下载地址 c#与lua相互调用
lua配置:Assets/Source/LuaConst.cs
核心框架代码:Assets/tolua
核心逻辑代码:Assets/resource/lua
可供lua调用的C#类的绑定类:Assets/Source/Generate
//上述路径可根据习惯调整:Assets/Editor/Custom/CustomSettings.cs
public static string saveDir = Application.dataPath + "/Source/Generate/";