381 lines
14 KiB
C#
381 lines
14 KiB
C#
|
|
/*******************************************************************************
|
|||
|
|
Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
|
|||
|
|
|
|||
|
|
NOTICE:All information contained herein is, and remains the property of
|
|||
|
|
PICO Technology Co., Ltd. The intellectual and technical concepts
|
|||
|
|
contained herein are proprietary to PICO Technology Co., Ltd. and may be
|
|||
|
|
covered by patents, patents in process, and are protected by trade secret or
|
|||
|
|
copyright law. Dissemination of this information or reproduction of this
|
|||
|
|
material is strictly forbidden unless prior written permission is obtained from
|
|||
|
|
PICO Technology Co., Ltd.
|
|||
|
|
*******************************************************************************/
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using Unity.XR.PXR;
|
|||
|
|
using UnityEditor;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace Pico.Platform.Editor
|
|||
|
|
{
|
|||
|
|
public class PicoSettings : EditorWindow
|
|||
|
|
{
|
|||
|
|
enum Language
|
|||
|
|
{
|
|||
|
|
English = 0,
|
|||
|
|
Chinese = 1,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private SerializedObject serObj;
|
|||
|
|
private SerializedProperty gosPty;
|
|||
|
|
static Language language = Language.English;
|
|||
|
|
|
|||
|
|
static string[] strAppIdText = {"Paste your App ID here", "请粘贴你的AppID"};
|
|||
|
|
static string[] strAppIdHelpText = {"App ID is the unique identification ID of the PICO Application. Without AppID, you will not be able to use PICO platform feature.", "APP ID 是应用的唯一标识"};
|
|||
|
|
static string[] strBuildSettingText = {"Recommend Settings [?]", "推荐设置"};
|
|||
|
|
static string[] strBuildSettingHelpText = {"Recommended project settings for PXR SDK", "推荐项目设置"};
|
|||
|
|
static string[] strPlatformBuildText = {"Set Platform To Android", "设置目标平台为Android"};
|
|||
|
|
static string[] strUnityVersionLimit = {$"Unity Editor Version ≥ {EditorConf.minEditorVersion}", $"Unity Editor版本不小于{EditorConf.minEditorVersion}"};
|
|||
|
|
static string[] strOrientationBuildText = {"Set Orientation To LandscapeLeft", "设置屏幕方向为水平"};
|
|||
|
|
static string[] strMinApiLevel = {$"Android Min API Level ≥ {EditorConf.minSdkLevel}", $"Android最小API不低于{EditorConf.minSdkLevel}"};
|
|||
|
|
static string[] strIgnoreButtonText = {"Ask me later", "稍后询问"};
|
|||
|
|
static string[] strApplyButtonText = {"Apply", "应用"};
|
|||
|
|
static string[] strHighlightText = {"Use Highlight", "开启高光时刻"};
|
|||
|
|
|
|||
|
|
private class Res
|
|||
|
|
{
|
|||
|
|
public readonly Texture PicoDeveloper;
|
|||
|
|
public string Correct = "✔️";
|
|||
|
|
public string Wrong = "×";
|
|||
|
|
public GUIStyle correctStyle;
|
|||
|
|
public GUIStyle wrongStyle;
|
|||
|
|
|
|||
|
|
public Res()
|
|||
|
|
{
|
|||
|
|
this.PicoDeveloper = Resources.Load<Texture>("PICODeveloper");
|
|||
|
|
correctStyle = new GUIStyle(GUI.skin.label);
|
|||
|
|
correctStyle.normal.textColor = Color.green;
|
|||
|
|
wrongStyle = new GUIStyle();
|
|||
|
|
wrongStyle.normal.textColor = Color.red;
|
|||
|
|
wrongStyle.fontStyle = FontStyle.Bold;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Res _R;
|
|||
|
|
|
|||
|
|
private Res R
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (_R != null) return _R;
|
|||
|
|
_R = new Res();
|
|||
|
|
return _R;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal enum ConfigStatus
|
|||
|
|
{
|
|||
|
|
Correct,
|
|||
|
|
Wrong,
|
|||
|
|
Fix,
|
|||
|
|
Hide,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal abstract class ConfigField
|
|||
|
|
{
|
|||
|
|
public bool value = true;
|
|||
|
|
public abstract string[] GetText();
|
|||
|
|
public abstract ConfigStatus GetStatus();
|
|||
|
|
public abstract void Fix();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal class ConfigIsAndroid : ConfigField
|
|||
|
|
{
|
|||
|
|
public override string[] GetText()
|
|||
|
|
{
|
|||
|
|
return strPlatformBuildText;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override ConfigStatus GetStatus()
|
|||
|
|
{
|
|||
|
|
return Gs.buildTargetGroup == BuildTargetGroup.Android ? ConfigStatus.Correct : ConfigStatus.Fix;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void Fix()
|
|||
|
|
{
|
|||
|
|
Gs.buildTargetGroup = BuildTargetGroup.Android;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal class ConfigIsLandscapeLeft : ConfigField
|
|||
|
|
{
|
|||
|
|
public override string[] GetText()
|
|||
|
|
{
|
|||
|
|
return strOrientationBuildText;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override ConfigStatus GetStatus()
|
|||
|
|
{
|
|||
|
|
return Gs.UIOrientation == UIOrientation.LandscapeLeft ? ConfigStatus.Correct : ConfigStatus.Fix;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void Fix()
|
|||
|
|
{
|
|||
|
|
Gs.UIOrientation = UIOrientation.LandscapeLeft;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal class ConfigMinApiLevel : ConfigField
|
|||
|
|
{
|
|||
|
|
public override string[] GetText()
|
|||
|
|
{
|
|||
|
|
return strMinApiLevel;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override ConfigStatus GetStatus()
|
|||
|
|
{
|
|||
|
|
return Gs.minimumApiLevel >= (AndroidSdkVersions) EditorConf.minSdkLevel ? ConfigStatus.Correct : ConfigStatus.Fix;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void Fix()
|
|||
|
|
{
|
|||
|
|
Gs.minimumApiLevel = (AndroidSdkVersions) EditorConf.minSdkLevel;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal class ConfigUnityVersion : ConfigField
|
|||
|
|
{
|
|||
|
|
public override string[] GetText()
|
|||
|
|
{
|
|||
|
|
return strUnityVersionLimit;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override ConfigStatus GetStatus()
|
|||
|
|
{
|
|||
|
|
return String.Compare(Application.unityVersion, EditorConf.minEditorVersion, StringComparison.Ordinal) >= 0 ? ConfigStatus.Hide : ConfigStatus.Wrong;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void Fix()
|
|||
|
|
{
|
|||
|
|
throw new NotImplementedException();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static string appId
|
|||
|
|
{
|
|||
|
|
get { return PicoGs.appId; }
|
|||
|
|
set { PicoGs.appId = value; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static bool useHighlight
|
|||
|
|
{
|
|||
|
|
get { return PicoGs.useHighlight; }
|
|||
|
|
set { PicoGs.useHighlight = value; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool enableEC
|
|||
|
|
{
|
|||
|
|
get { return PicoGs.enableEntitlementCheck; }
|
|||
|
|
set { PicoGs.enableEntitlementCheck = value; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private ConfigField[] configFields;
|
|||
|
|
|
|||
|
|
private void OnEnable()
|
|||
|
|
{
|
|||
|
|
configFields = new ConfigField[]
|
|||
|
|
{
|
|||
|
|
new ConfigUnityVersion(),
|
|||
|
|
new ConfigIsAndroid(),
|
|||
|
|
new ConfigIsLandscapeLeft(),
|
|||
|
|
new ConfigMinApiLevel(),
|
|||
|
|
};
|
|||
|
|
this.titleContent = new GUIContent("Platform Settings");
|
|||
|
|
language = Language.English;
|
|||
|
|
if (Application.systemLanguage == SystemLanguage.Chinese || Application.systemLanguage == SystemLanguage.ChineseSimplified || Application.systemLanguage == SystemLanguage.ChineseTraditional)
|
|||
|
|
{
|
|||
|
|
language = Language.Chinese;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
serObj = new SerializedObject(PXR_PlatformSetting.Instance);
|
|||
|
|
gosPty = serObj.FindProperty(nameof(PXR_PlatformSetting.deviceSN));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Vector2 scrollPos;
|
|||
|
|
|
|||
|
|
void OnGUI()
|
|||
|
|
{
|
|||
|
|
var frameWidth = 380;
|
|||
|
|
//顶部图片
|
|||
|
|
{
|
|||
|
|
GUIStyle style = new GUIStyle();
|
|||
|
|
style.stretchWidth = true;
|
|||
|
|
style.fixedWidth = 400;
|
|||
|
|
GUILayout.Label(R.PicoDeveloper, style);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//顶部中英文选择
|
|||
|
|
{
|
|||
|
|
GUIStyle activeStyle = new GUIStyle();
|
|||
|
|
activeStyle.alignment = TextAnchor.MiddleCenter;
|
|||
|
|
activeStyle.normal.textColor = new Color(0, 122f / 255f, 204f / 255f);
|
|||
|
|
GUIStyle normalStyle = new GUIStyle();
|
|||
|
|
normalStyle.alignment = TextAnchor.MiddleCenter;
|
|||
|
|
normalStyle.normal.textColor = new Color(0.8f, 0.8f, 0.8f);
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
GUILayout.FlexibleSpace();
|
|||
|
|
if (GUILayout.Button("ENGLISH", language == Language.English ? activeStyle : normalStyle, GUILayout.Width(80)))
|
|||
|
|
{
|
|||
|
|
language = Language.English;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUILayout.Label("|", normalStyle, GUILayout.Width(5));
|
|||
|
|
if (GUILayout.Button("中文", language == Language.Chinese ? activeStyle : normalStyle, GUILayout.Width(80)))
|
|||
|
|
{
|
|||
|
|
language = Language.Chinese;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUILayout.FlexibleSpace();
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
{
|
|||
|
|
GUIStyle style = new GUIStyle();
|
|||
|
|
style.margin = new RectOffset(5, 5, 5, 5);
|
|||
|
|
GUILayout.BeginVertical(style, GUILayout.Width(360));
|
|||
|
|
}
|
|||
|
|
//AppID设置
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(15);
|
|||
|
|
GUILayout.Label(strAppIdText[(int) language]);
|
|||
|
|
appId = EditorGUILayout.TextField(appId, GUILayout.Width(frameWidth));
|
|||
|
|
if (string.IsNullOrWhiteSpace(appId))
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.HelpBox(strAppIdHelpText[(int) language], UnityEditor.MessageType.Warning);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUILayout.Space(20);
|
|||
|
|
if (appId == "")
|
|||
|
|
{
|
|||
|
|
GUI.enabled = false;
|
|||
|
|
enableEC = false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GUI.enabled = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Highlight设置
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.BeginHorizontal();
|
|||
|
|
GUILayout.Label(strHighlightText[(int) language]);
|
|||
|
|
useHighlight = EditorGUILayout.Toggle(useHighlight, GUILayout.Width(frameWidth));
|
|||
|
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
//Recommend Settings
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(5);
|
|||
|
|
GUILayout.Label(new GUIContent(strBuildSettingText[(int) language], strBuildSettingHelpText[(int) language]));
|
|||
|
|
|
|||
|
|
GUIStyle style = "frameBox";
|
|||
|
|
style.fixedWidth = frameWidth;
|
|||
|
|
EditorGUILayout.BeginVertical(style);
|
|||
|
|
|
|||
|
|
foreach (var field in configFields)
|
|||
|
|
{
|
|||
|
|
var txt = field.GetText()[(int) language];
|
|||
|
|
switch (field.GetStatus())
|
|||
|
|
{
|
|||
|
|
case ConfigStatus.Correct:
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.BeginHorizontal(GUILayout.Width(frameWidth));
|
|||
|
|
EditorGUILayout.LabelField(txt);
|
|||
|
|
EditorGUILayout.LabelField(R.Correct, R.correctStyle);
|
|||
|
|
GUI.enabled = true;
|
|||
|
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ConfigStatus.Wrong:
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.BeginHorizontal(GUILayout.Width(frameWidth));
|
|||
|
|
EditorGUILayout.LabelField(txt);
|
|||
|
|
EditorGUILayout.LabelField(R.Wrong, R.wrongStyle);
|
|||
|
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ConfigStatus.Hide:
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case ConfigStatus.Fix:
|
|||
|
|
{
|
|||
|
|
EditorGUILayout.BeginHorizontal(GUILayout.Width(frameWidth));
|
|||
|
|
EditorGUILayout.LabelField(txt);
|
|||
|
|
float originalValue = EditorGUIUtility.labelWidth;
|
|||
|
|
EditorGUIUtility.labelWidth = 250;
|
|||
|
|
field.value = EditorGUILayout.Toggle(field.value);
|
|||
|
|
EditorGUIUtility.labelWidth = originalValue;
|
|||
|
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning($"unhandled ConfigStatus {txt} {field.GetStatus()}");
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EditorGUILayout.EndVertical();
|
|||
|
|
}
|
|||
|
|
//按钮区域
|
|||
|
|
{
|
|||
|
|
var hasSomethingToFix = false;
|
|||
|
|
foreach (var field in configFields)
|
|||
|
|
{
|
|||
|
|
if (field.GetStatus() == ConfigStatus.Fix && field.value)
|
|||
|
|
{
|
|||
|
|
hasSomethingToFix = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (hasSomethingToFix)
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(10);
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
GUILayout.FlexibleSpace();
|
|||
|
|
if (GUILayout.Button(strIgnoreButtonText[(int) language], GUILayout.Width(130)))
|
|||
|
|
{
|
|||
|
|
this.Close();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUI.enabled = hasSomethingToFix;
|
|||
|
|
if (GUILayout.Button(strApplyButtonText[(int) language], GUILayout.Width(130)))
|
|||
|
|
{
|
|||
|
|
this.ApplyRecommendConfig();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUI.enabled = true;
|
|||
|
|
|
|||
|
|
GUILayout.FlexibleSpace();
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
GUILayout.FlexibleSpace();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUILayout.EndVertical();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ApplyRecommendConfig()
|
|||
|
|
{
|
|||
|
|
foreach (var field in configFields)
|
|||
|
|
{
|
|||
|
|
if (field.GetStatus() == ConfigStatus.Fix && field.value)
|
|||
|
|
{
|
|||
|
|
field.Fix();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|