Files
gold_dolphin/unity/Assets/Architecture/Variables/Vector3Variable.cs
T
2026-07-07 03:34:56 +08:00

49 lines
1.5 KiB
C#

using UnityEngine;
using System;
namespace Architecture.Variables
{
/// <summary>
/// 共享 Vector3 变量(ScriptableObject 资产)。常用于位置、回声中心等。
/// </summary>
[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<Vector3> OnValueChanged;
public void SetValue(Vector3 value) => Value = value;
/// <summary>将运行时值重置为 _defaultValue(每次进入 Play Mode 时由 VariableRegistry 自动调用)。</summary>
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;
}
}
}