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

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

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

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

??????版本号 更新日志 下载链接(版本比较只会比较版本号,对应的下载链接必须对应到指定的包)
0.0.0 更新日志^1:更新测试1^2:更新测试2 http://***/test.apk
1.0.0 7.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接口的时候内存卡无法写入的,也就是无法安装新的包,需要把线拔了,这个问题纠结了好久,一直提示内存卡没有写权限。

欢迎拍砖!!!

 

posted @ 2014-07-29 23:04  p_towin  阅读(5170)  评论(0编辑  收藏  举报