using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEngine;
///项目默认配置以及说明
[InitializeOnLoad]
public class VFrameworkSettingEditor : EditorWindow
{
[MenuItem("Tools/Framework/项目注意事项")]
public static void ShowWindow()
{
VFrameworkSettingEditor window = GetWindow("项目注意事项");
window.autoRepaintOnSceneChange = true;
window.minSize = window.maxSize = new Vector2(600, 400);
}
static VFrameworkSettingEditor()
{
EditorApplication.update += Update;
}
private static void Update()
{
AssetDatabase.Refresh();
Setting = AssetDatabase.LoadAssetAtPath("Assets/Editor/Framework/Other/WS_ProjectSetting.asset");
if (Setting == null)
{
Setting = ScriptableObject.CreateInstance();
AssetDatabase.CreateAsset(Setting, "Assets/Editor/Framework/Other/WS_ProjectSetting.asset");
AssetDatabase.Refresh();
}
if (!Setting.IsInit)
{
#region -- 场景设置 --
EditorBuildSettingsScene[] scenes = new EditorBuildSettingsScene[2];
scenes[0] = new EditorBuildSettingsScene("Assets/Scenes/Init.unity", true);
scenes[1] = new EditorBuildSettingsScene("Assets/Scenes/Loading.unity", true);
EditorBuildSettings.scenes = scenes;
#endregion
#region -- 文件夹设置 --
for (int i = 0; i < Files.Length; i++)
{
if (!Directory.Exists(Files[i]))
Directory.CreateDirectory(Files[i]);
}
#endregion
#region -- 渲染设置 --
if (PlayerSettings.colorSpace != ColorSpace.Linear)
PlayerSettings.colorSpace = ColorSpace.Linear;
#endregion
#region -- Package包设置 --
Client.Add("com.unity.2d.sprite");
#endregion
#region -- 宏设置 --
#if UNITY_ANDROID
Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
#else
Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
#endif
List macros = Macro.Split(';').ToList();
if (!macros.Contains("DEBUG_MODEL"))
{
macros.Insert(0, "DEBUG_MODEL");
for (int i = 0; i < macros.Count; i++)
{
Macro += $"{macros[i]};";
}
#if UNITY_ANDROID
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, Macro);
#else
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, Macro);
#endif
}
#endregion
#region -- API设置 --
ApiCompatibilityLevel api;
#if UNITY_ANDROID
api = PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Android);
#else
api = PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone);
#endif
if (api != ApiCompatibilityLevel.NET_4_6)
{
#if UNITY_ANDROID
PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android, ApiCompatibilityLevel.NET_4_6);
#else
PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Standalone, ApiCompatibilityLevel.NET_4_6);
#endif
}
#endregion
Setting.IsInit = true;
EditorUtility.SetDirty(Setting);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
if (!PlayerPrefs.HasKey("IsLookAtThat"))
ShowWindow();
EditorApplication.update -= Update;
}
///文件夹
private static string[] Files = new[]
{
"Assets/GameResources/Model/Characters/",
"Assets/GameResources/Model/Environment/",
"Assets/GameResources/Prefabs/Characters/",
"Assets/GameResources/Prefabs/Environment/",
"Assets/GameResources/Prefabs/Item/",
"Assets/GameResources/Shaders/",
"Assets/Scripts/Data/Project/",
"Assets/Resources/Config/Process/",
"Assets/Log"
};
///标题
private GUIStyle titleText;
///内容
private GUIStyle contentText;
///宏
private static string Macro;
///设置
private static WS_ProjectSetting Setting;
private void OnEnable()
{
titleText = new GUIStyle();
titleText.normal.textColor = Color.yellow;
titleText.alignment = TextAnchor.UpperCenter;
titleText.fontSize = 32;
contentText = new GUIStyle();
contentText.normal.textColor = Color.white;
contentText.fontSize = 16;
}
private void OnGUI()
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("项目注意事项", titleText);
EditorGUILayout.EndHorizontal();
GUILayout.Label("");
GUILayout.Label("1.项目会在打包时代码混淆,请谨用反射!,添加SkipRename属性的类会忽略混淆;", contentText);
GUILayout.Label("2.所有需要Json序列化的结构(类),放到Assets/Scripts/Data文件夹下避免被混淆;", contentText);
GUILayout.Label("3.音频文件需要放在Assets/GameResources/Audio文件夹下,然后在编辑器\n Tools/Framework/自动生成语音预制件生成预制件;", contentText);
GUILayout.Label("4.UI预制件需要放在Assets/Resources/UI文件夹下在根据UI显示类型分类放入子目\n 录,然后在编辑器Tools/Framework/自动对应UI路径生成路径预设;", contentText);
GUILayout.Label("5.项目启动需要在Init场景中的Init物体挂载一个继承Init类的派生类,在派生类的\n Initialize方法为启动入口,派生类Update方法不能使用替换为OnUpdate方法;", contentText);
GUILayout.Label("");
EditorGUILayout.BeginHorizontal();
GUILayout.Label("");
if (GUILayout.Button("确定", GUILayout.Width(100)))
{
PlayerPrefs.SetInt("IsLookAtThat", 1);
Close();
}
EditorGUILayout.EndHorizontal();
}
}