首页 > 代码库 > 第一篇:Unity3d游戏开发之移动端完整包更新方案

第一篇:Unity3d游戏开发之移动端完整包更新方案

由于Unity没法进行热更新,也就是局部更新,所以如果你在设计之前没有考虑好使用Lua,反射,或者其他方式实现热更新,但是又要面临游戏上线那么你可以考虑使用完整包更新,其实这对于游戏包不是很大的情况下,也是一个不错的选择,当然设计者在设计之初都想好了热更新那就宁当别论了。

Unity3d 在移动端考虑Android和Ios平台的完整包更新 实现逻辑: 首先检查本地的版本和服务器的版本是否相同,如果相同则直接进入游戏,如果不同则下载服务器的最新文件,然后根据最新文件到资源服务器下载最新的安装包

我这里有个版本文件如下图,不同的游戏对应的版本文件不同,这个看情况

??????版本号更新日志下载链接(版本比较只会比较版本号,对应的下载链接必须对应到指定的包)
0.0.0更新日志^1:更新测试1^2:更新测试2http://***/test.apk
1.0.07.24第一个版本包http:/***/test1.0.0.apk

IOS: 由于IOS平台我们的无法控制,直接跳往对应的IOS的更新目录即可

Android: 安卓平台需要做到自动更具版本强制用户更新

具体采用如下方案

using UnityEngine;using System.Collections;public interface IPlatformUpdate{    void DoPlatformUpdate(string downLoadURL);}
using UnityEngine;using System.Collections;public class CPlatfromFactory {    public static IPlatformUpdate CreatePlatfrom(string platfrom)    {        IPlatformUpdate platform = null;        if(platfrom.Equals("Android"))        {            platform = new CAndroidUpdate();        }        else if(platfrom.Equals("IOS"))        {            platform = new CIOSUpdate();        }        return platform;    }}
using UnityEngine;using System.Collections;public class CAndroidUpdate : IPlatformUpdate{    public void DoPlatformUpdate (string downLoadURL)    {
//由于自动安装需要用到Android里面的一些功能。这里就做了一个Android插件,供Unity调用。具体的是在当前的Activity里面有个DownLoadApk的方法接受一个String的参数,然后就是Android里面的功能了。
//具体Android端如何实现可以百度 ,很简单的代码,这里不再记录 AndroidJavaClass installClass
= new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject installObj = installClass.GetStatic<AndroidJavaObject>("currentActivity"); installObj.Call("DownLoadApk", downLoadURL); }}
using UnityEngine;using System.Collections;public class CIOSUpdate : IPlatformUpdate{    public void DoPlatformUpdate (string downLoadURL)    {
//打开对应的连接,这里一般会保存在版本文件Version.txt之中 Application.OpenURL(downLoadURL); }}

 

在开发中遇到的问题:Android 手机在插usb接口的时候内存卡无法写入的,也就是无法安装新的包,需要把线拔了,这个问题纠结了好久,一直提示内存卡没有写权限。

欢迎拍砖!!!