using UnityEngine; using Script.Gameplay.Interface; namespace Script.Gameplay.Edit { [RequireComponent(typeof(MeshRenderer))] public class MeshRenderEditableController : MonoBehaviour, IEditableComponent { [SerializeField] private bool isEnableEdit = true; public bool IsEnableEdit { get => isEnableEdit; set => isEnableEdit = value; } [SerializeField] private bool isOpenInEditor = true; public bool IsOpenInEditor { get => isOpenInEditor; set { isOpenInEditor = value; if (_meshRender != null) _meshRender.enabled = isOpenInEditor; } } public string ComponentName { get; set; } = "MeshRenderer"; private MeshRenderer _meshRender; private void Awake() { _meshRender = GetComponent(); // 应用序列化的初始状态 _meshRender.enabled = IsOpenInEditor; } #if UNITY_EDITOR private void OnValidate() { // 在编辑器中即时生效 _meshRender = _meshRender == null ? GetComponent() : _meshRender; if (_meshRender != null) _meshRender.enabled = IsOpenInEditor; } #endif } }