1. создадим в проекте папку WebPlayerTemplates и скопируем в нее один из дефолтных шаблонов, например %UNITY%\Data\Resources\WebPlayerTemplates\Default и переименуем его, например, в Test
2. отредактируем index.html, добавив кастомный тэг в строчку
u.initPlugin(jQuery("#unityPlayer")[0], "%UNITY_WEB_PATH%?%UNITY_CUSTOM_BUILD%");
3. теперь открываем Edit > Project Settings > Player, выбираем наш шаблон и записываем с поле Build наш номер версии, например, 0.0.1
4. теперь сделаем так, чтобы после каждого билда его номер (последняя цифра независимо от их количества) автоматически увеличивался, добавим следующий скрипт в папку Editor.
Синтаксис:
Используется csharp
using System;
using UnityEditor;
using UnityEditor.Callbacks;
using Debug = UnityEngine.Debug;
public class WebBuiladAutoInc {
[MenuItem("Tools/Inc Build Num")]
static void BuildIncNum() {
SerializedObject serializedObject = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/ProjectSettings.asset")[0]);
SerializedProperty customTags = serializedObject.FindProperty("m_TemplateCustomTags");
SerializedProperty data;
for (int i = 0; i < customTags.arraySize; i++) {
data = customTags.GetArrayElementAtIndex(i);
if (data.FindPropertyRelative("first").stringValue == "BUILD") {
SerializedProperty build = data.FindPropertyRelative("second");
string value = IncLastNum(build.stringValue);
Debug.Log(string.Format("Build: {0} > {1}", build.stringValue, value));
build.stringValue = value;
break;
}
}
serializedObject.ApplyModifiedProperties();
}
[PostProcessBuild]
private static void BuildIncNum(BuildTarget target, string pathToBuildProject) {
EditorApplication.update += OnEditorUpdate;
}
public static void OnEditorUpdate() {
EditorApplication.update -= OnEditorUpdate;
BuildIncNum();
}
private static string IncLastNum(string source) {
string[] parts = source.Split('.');
string last = parts[parts.Length - 1];
string result = "";
int num;
if (Int32.TryParse(last, out num)) {
for (int i = 0; i < parts.Length - 1; i++) {
result += parts[i] + ".";
}
return result + (num + 1);
}
return source;
}
}
using UnityEditor;
using UnityEditor.Callbacks;
using Debug = UnityEngine.Debug;
public class WebBuiladAutoInc {
[MenuItem("Tools/Inc Build Num")]
static void BuildIncNum() {
SerializedObject serializedObject = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/ProjectSettings.asset")[0]);
SerializedProperty customTags = serializedObject.FindProperty("m_TemplateCustomTags");
SerializedProperty data;
for (int i = 0; i < customTags.arraySize; i++) {
data = customTags.GetArrayElementAtIndex(i);
if (data.FindPropertyRelative("first").stringValue == "BUILD") {
SerializedProperty build = data.FindPropertyRelative("second");
string value = IncLastNum(build.stringValue);
Debug.Log(string.Format("Build: {0} > {1}", build.stringValue, value));
build.stringValue = value;
break;
}
}
serializedObject.ApplyModifiedProperties();
}
[PostProcessBuild]
private static void BuildIncNum(BuildTarget target, string pathToBuildProject) {
EditorApplication.update += OnEditorUpdate;
}
public static void OnEditorUpdate() {
EditorApplication.update -= OnEditorUpdate;
BuildIncNum();
}
private static string IncLastNum(string source) {
string[] parts = source.Split('.');
string last = parts[parts.Length - 1];
string result = "";
int num;
if (Int32.TryParse(last, out num)) {
for (int i = 0; i < parts.Length - 1; i++) {
result += parts[i] + ".";
}
return result + (num + 1);
}
return source;
}
}
5. осталось вывести номер билда в GUI
Синтаксис:
Используется csharp
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class ShowBuildNum : MonoBehaviour {
private Rect rect = new Rect(5f, 5f, 40f, 20f);
[SerializeField]
private string version = "";
void Start() {
#if UNITY_EDITOR
version = GetBuildNum();
#else
version = Application.absoluteURL.Split('?')[1];
#endif
}
#if UNITY_EDITOR
static string GetBuildNum() {
SerializedObject serializedObject = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/ProjectSettings.asset")[0]);
SerializedProperty customTags = serializedObject.FindProperty("m_TemplateCustomTags");
SerializedProperty data;
for (int i = 0; i < customTags.arraySize; i++) {
data = customTags.GetArrayElementAtIndex(i);
if (data.FindPropertyRelative("first").stringValue == "BUILD") {
SerializedProperty build = data.FindPropertyRelative("second");
return build.stringValue;
}
}
return "";
}
#endif
void OnGUI() {
GUI.Label(rect, version);
}
}
#if UNITY_EDITOR
using UnityEditor;
#endif
public class ShowBuildNum : MonoBehaviour {
private Rect rect = new Rect(5f, 5f, 40f, 20f);
[SerializeField]
private string version = "";
void Start() {
#if UNITY_EDITOR
version = GetBuildNum();
#else
version = Application.absoluteURL.Split('?')[1];
#endif
}
#if UNITY_EDITOR
static string GetBuildNum() {
SerializedObject serializedObject = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/ProjectSettings.asset")[0]);
SerializedProperty customTags = serializedObject.FindProperty("m_TemplateCustomTags");
SerializedProperty data;
for (int i = 0; i < customTags.arraySize; i++) {
data = customTags.GetArrayElementAtIndex(i);
if (data.FindPropertyRelative("first").stringValue == "BUILD") {
SerializedProperty build = data.FindPropertyRelative("second");
return build.stringValue;
}
}
return "";
}
#endif
void OnGUI() {
GUI.Label(rect, version);
}
}