第一篇: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接口的時候內存卡無法寫入的,也就是無法安裝新的包,需要把線拔了,這個問題糾結了好久,一直提示內存卡沒有寫權限。

歡迎拍磚!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM