using UnityEngine; using System; namespace Architecture.Variables { /// /// 共享 Vector3 变量(ScriptableObject 资产)。常用于位置、回声中心等。 /// [CreateAssetMenu(menuName = "Architecture/Variables/Vector3", fileName = "NewVector3Variable")] public class Vector3Variable : ScriptableObject, Architecture.IVariable { [SerializeField] private Vector3 _value; [Tooltip("进入 Play Mode 时的初始值,由 VariableRegistry 在每次启动游戏时自动恢复,防止跨局状态泄漏")] [SerializeField] private Vector3 _defaultValue; public Vector3 Value { get => _value; set { _value = value; OnValueChanged?.Invoke(value); } } public event Action OnValueChanged; public void SetValue(Vector3 value) => Value = value; /// 将运行时值重置为 _defaultValue(每次进入 Play Mode 时由 VariableRegistry 自动调用)。 public void ResetToDefault() { _value = _defaultValue; OnValueChanged?.Invoke(_value); } [ContextMenu("Reset To Default")] public void Reset() => ResetToDefault(); private void OnEnable() => VariableRegistry.Register(this); private void OnDisable() { VariableRegistry.Unregister(this); OnValueChanged = null; } } }