Unity 3D инструмент для исправления игр? - PullRequest
2 голосов
/ 29 июля 2011

Я пишу игру на Unity3D, и мне было интересно, есть ли какие-либо инструменты, доступные для проверки сервера на наличие обновлений, если да, загрузите и установите обновление. Я пытался написать свой собственный, однако я застрял в части "Скачать и установить".

Вот что у меня есть:

//Unity3D Patching Tool v0.1

using UnityEngine;
using System.Collections;

public class Patcher : MonoBehaviour {

public const string VERSION = "1.0"; // The version of the program that is running

private string patchUrl = "http://yoursite.com/patchversion.html"; //a website with the current build number

//a template to find the current build for windows
private const string UPDATE_WINDOWS_URL_TEMPLATE = "http://yoursite.com/release/build[[[BUILD_NUMBER]]].exe"; 

//a template to find the current build for mac
private const string UPDATE_MAC_URL_TEMPLATE = "http://yoursite.com/release/build[[[BUILD_NUMBER]]].app";  


IEnumerator Start() {

    /*
     * Check for patch
     */

    WWW patchwww = new WWW(patchUrl); //create new web connection to the build number site
    yield return patchwww;     // wait for download to finish
    if (patchwww.text == VERSION){    //check version
        Debug.Log("Up To Date");
    }
    else {
        Debug.Log("Download New Update");
        WWW downloadwww = new WWW(DownloadUpdate(patchwww.text));  // generates link to current build and downloads
        yield return downloadwww;
    }

}

private string DownloadUpdate(string version){
    string versionNumber = version.Replace(".", "");  //remove periods in version number
    string buildToDownload = "";

    /*
     * Check Platform and Set URL
     */
    switch (Application.platform){
    case RuntimePlatform.WindowsEditor:
    case RuntimePlatform.WindowsPlayer:
        Debug.Log("Windows " + Application.platform);
        buildToDownload = UPDATE_WINDOWS_URL_TEMPLATE.Replace("[[[BUILD_NUMBER]]]", versionNumber);
        break;
    case RuntimePlatform.OSXEditor:
    case RuntimePlatform.OSXPlayer:
        Debug.Log("Mac " + Application.platform);
        buildToDownload = UPDATE_MAC_URL_TEMPLATE.Replace("[[[BUILD_NUMBER]]]", versionNumber);
        break;
    }

    Debug.Log(buildToDownload);
    return buildToDownload;

}
}

1 Ответ

2 голосов
/ 01 августа 2011

У меня что-то похожее, у меня есть http скачать текстовый файл с последней версией в нем, если их версия ниже, чем эта, у них есть возможность скачать установщик

, если вы используете этов Windows вы могли бы сделать так, чтобы Unity запускал внешний процесс (простая форма C #, которая обновляет ваши файлы или загружает установщик, ожидает его завершения, а затем выполняет его) [возможно, это также возможно в рамках Unity, но для меня это хорошо]

(вы также можете просто указать процесс на веб-браузер со ссылкой на последнюю версию таким образом, чтобы браузер или загрузчик файлов по умолчанию отвечали за загрузку программы и обрабатывали ошибки связи) таким образомони будут знать, что им нужно открыть установленное приложение после его завершения

import System.Diagnostics;

var path:String = "somewhere";
var foo:Process = new Process();
function Start() 
{   
    foo.StartInfo.FileName = "someprogram";
    foo.StartInfo.Arguments = path;
    foo.Start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...