using PhxhSDK.AOT; using UnityEngine; using PhxhSDK.Phxh; using Gameplay.Level; using Sirenix.OdinInspector; using Debug = UnityEngine.Debug; #if UNITY_EDITOR using UnityEditor; using UnityEngine.SceneManagement; #endif [ExecuteAlways] public class LevelEditor : MonoBehaviour { private const string LEVEL_DATA_NAME = "LevelData"; public LevelData LevelData { get; private set; } public TextAsset LevelDataJson { get => _levelDataJson; set { var data = JsonToLevelData(value); _levelDataJson = value; LevelData = data; } } [SerializeField] [LabelText("关卡数据")] [OnValueChanged("OnLevelDataJsonChanged")] private TextAsset _levelDataJson; private void OnLevelDataJsonChanged() { LevelDataJson = _levelDataJson; } // [Button("创建关卡数据")] // [Conditional("UNITY_EDITOR")] // private void CreateLevelData() // { // #if UNITY_EDITOR // var scene = gameObject.scene; // var levelDataDir = Path.GetDirectoryName(Constants.LEVEL_CONFIG_FORMAT_PATH); // var count = AssetDatabase.FindAssets("t:TextAsset", new[] { levelDataDir }).Length; // var dataName = $"LevelData"; // var dataPath = $"{levelDataDir}/{dataName}.json"; // using (var fileStream = File.Create(dataPath)) // { // } // // AssetDatabase.Refresh(); // var textAsset = AssetDatabase.LoadAssetAtPath(dataPath); // EditorGUIUtility.PingObject(textAsset); // if (_levelDataJson == null) // LevelDataJson = textAsset; // #endif // } private LevelData JsonToLevelData(TextAsset jsonText) { #if UNITY_EDITOR LevelData levelData = null; if (jsonText != null) { var jsonStr = jsonText.text; if (string.IsNullOrEmpty(jsonStr)) { levelData = new(); } else { var path = AssetDatabase.GetAssetPath(jsonText); levelData = JsonHelper.LoadJson(path); } } return levelData; #else return null; #endif } private void Awake() { LevelData = JsonToLevelData(_levelDataJson); } private void OnDestroy() { if (YooAssetBuildStatus.isInBuild) return; SaveLevelData(); } public void SaveLevelData() { #if UNITY_EDITOR var currentScene = gameObject.scene; if (_levelDataJson != null && !Application.isPlaying && currentScene == SceneManager.GetActiveScene()) { var path = AssetDatabase.GetAssetPath(_levelDataJson); JsonHelper.SaveJson(path, LevelData); AssetDatabase.Refresh(); Debug.Log($"保存关卡数据成功!"); } #endif } }