using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using System; #if UNITY_EDITOR using UnityEditor; #endif public class TreasureMeridianConfig : ScriptableObject { [SerializeField] int m_TreasureId = 0; [SerializeField] int m_StagePointCount = 0; [SerializeField] List m_StagePoints = new List(); public StagePoint this[int _index] { get { if (_index < m_StagePoints.Count) { return m_StagePoints[_index]; } return null; } } public int treasureId { get { return m_TreasureId; } set { m_TreasureId = value; } } public int stagePointNum { get { return m_StagePointCount; } set { m_StagePointCount = value; if (m_StagePointCount != m_StagePoints.Count) { if (m_StagePointCount > m_StagePoints.Count) { for (int i = m_StagePoints.Count; i < m_StagePointCount; i++) { m_StagePoints.Add(new StagePoint()); } } else { for (int i = m_StagePoints.Count - 1; i >= m_StagePointCount; i--) { StagePoint _point = m_StagePoints[i]; m_StagePoints.RemoveAt(i); _point = null; } } } } } [Serializable] public class StagePoint { public Vector2 position = Vector2.zero; public float scale = 1f; public int effect = 0; public float scaleTweenDelay = 0f; public float scaleTweenTo = 0.5f; } #if UNITY_EDITOR public List m_Meridians = new List(); #endif } #if UNITY_EDITOR [CustomEditor(typeof(TreasureMeridianConfig))] public class TreasureMeridianConfigEditor : Editor { public override void OnInspectorGUI() { var _target = target as TreasureMeridianConfig; GUILayout.BeginHorizontal(); GUILayout.Label("法宝id"); _target.treasureId = EditorGUILayout.IntField(_target.treasureId); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("经络个数"); _target.stagePointNum = EditorGUILayout.IntField(_target.stagePointNum); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); for (int i = 0; i < _target.stagePointNum; i++) { _target[i].position = EditorGUILayout.Vector2Field(StringUtility.Contact("经络", i), _target[i].position); _target[i].scale = EditorGUILayout.FloatField("缩放比例", _target[i].scale); _target[i].effect = EditorGUILayout.IntField("特效ID", _target[i].effect); _target[i].scaleTweenDelay = EditorGUILayout.FloatField("缩放延迟", _target[i].scaleTweenDelay); _target[i].scaleTweenTo = EditorGUILayout.FloatField("缩放大小", _target[i].scaleTweenTo); GUILayout.Space(15); } if (GUILayout.Button("在界面上生成")) { _target.m_Meridians.Clear(); GameObject parent = GameObject.Find("TreasureLevelUpWin/Container_Default/Container_Display/Container_Level/Container_Meridian"); if (parent != null) { for (int i = 0; i < _target.stagePointNum; i++) { GameObject go = new GameObject(i.ToString()); _target.m_Meridians.Add(go.AddMissingComponent()); _target.m_Meridians[i].SetParentEx(parent.transform, Vector3.zero, Quaternion.identity, Vector3.one); _target.m_Meridians[i].localPosition = _target[i].position; _target.m_Meridians[i].localScale = _target[i].scale * Vector3.one; } } } if (_target.m_Meridians.Count > 0 && _target.m_Meridians[0] == null) { _target.m_Meridians.Clear(); } for (int i = 0; i < _target.m_Meridians.Count; i++) { if (i < _target.stagePointNum) { _target[i].position = _target.m_Meridians[i].localPosition; _target[i].scale = _target.m_Meridians[i].localScale.x; } } } [MenuItem("策划工具/生成法宝经络配置文件")] static void BuildMeridianConfig() { TreasureMeridianConfig _config = CreateInstance(); string _path = StringUtility.Contact("Assets/ResourcesOut/Refdata/ScriptableObject/SoTreasureMeridian/", "SoTreasureMeridian_", ".asset"); AssetDatabase.CreateAsset(_config, _path); AssetDatabase.Refresh(); ProjectWindowUtil.ShowCreatedAsset(_config); } } #endif