Add WeaponFeedback component and AddressableManagerWindow meta file
- Implemented WeaponFeedback class for handling weapon-related feedbacks such as hit effects and attack sounds. - Added meta file for AddressableManagerWindow to manage addressable assets. - Included a new jump.data file for profiler data.
This commit is contained in:
@@ -27,11 +27,12 @@ namespace BaseGames.UI
|
||||
|
||||
private RectTransform _rectTransform;
|
||||
private Coroutine _animCoroutine;
|
||||
// 每次 Show() 解析一次,协程期间(< 1s)复用,避免每帧走 FindObjectByTag
|
||||
private Camera _cachedCamera;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_rectTransform = (RectTransform)transform;
|
||||
// 不在 Awake 缓存 Camera.main,避免 Boss 过场切换主摄像机后引用过期
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -42,6 +43,12 @@ namespace BaseGames.UI
|
||||
{
|
||||
if (_animCoroutine != null) StopCoroutine(_animCoroutine);
|
||||
|
||||
// 每次 Show 解析一次摄像机:动画时长 < 1s,期间不会切换主摄像机;
|
||||
// 若 Boss 过场后再次 Show,会自动获取新的主摄像机。
|
||||
_cachedCamera = (_parentCanvas != null && _parentCanvas.renderMode == RenderMode.ScreenSpaceCamera)
|
||||
? _parentCanvas.worldCamera
|
||||
: UnityEngine.Camera.main;
|
||||
|
||||
_text.text = damage.ToString();
|
||||
_text.color = GetColorForType(type);
|
||||
|
||||
@@ -51,9 +58,7 @@ namespace BaseGames.UI
|
||||
|
||||
private void SetAnchoredPosition(Vector2 worldPosition)
|
||||
{
|
||||
var cam = (_parentCanvas != null && _parentCanvas.renderMode == RenderMode.ScreenSpaceCamera)
|
||||
? _parentCanvas.worldCamera
|
||||
: UnityEngine.Camera.main;
|
||||
var cam = _cachedCamera;
|
||||
|
||||
var screenPoint = cam != null
|
||||
? (Vector2)cam.WorldToScreenPoint(worldPosition)
|
||||
@@ -122,7 +127,7 @@ namespace BaseGames.UI
|
||||
[Header("预制体(对象池 key = AddressKeys.PrefabUIFloatingDmgText)")]
|
||||
[SerializeField] private GameObject _floatingDmgPrefab; // Fallback:Inspector 直接拖入
|
||||
|
||||
private readonly Queue<FloatingDamageText> _pool = new();
|
||||
private readonly List<FloatingDamageText> _pool = new();
|
||||
private readonly CompositeDisposable _subs = new();
|
||||
|
||||
private void OnEnable() => _onDamageDealt?.Subscribe(OnDamageDealt).AddTo(_subs);
|
||||
@@ -138,25 +143,22 @@ namespace BaseGames.UI
|
||||
|
||||
private FloatingDamageText GetOrCreate()
|
||||
{
|
||||
// 从池中找到已停用的实例
|
||||
while (_pool.Count > 0)
|
||||
// 线性扫描全部已创建实例,找首个未激活的复用
|
||||
for (int i = 0; i < _pool.Count; i++)
|
||||
{
|
||||
var pooled = _pool.Dequeue();
|
||||
if (pooled == null) continue;
|
||||
if (!pooled.gameObject.activeSelf)
|
||||
var pooled = _pool[i];
|
||||
if (pooled != null && !pooled.gameObject.activeSelf)
|
||||
{
|
||||
pooled.gameObject.SetActive(true);
|
||||
return pooled;
|
||||
}
|
||||
_pool.Enqueue(pooled); // 仍在使用,放回
|
||||
break;
|
||||
}
|
||||
|
||||
// 没有可用实例则实例化
|
||||
// 没有可用实例则实例化新的,加入列表供下次复用
|
||||
if (_floatingDmgPrefab == null) return null;
|
||||
var go = Instantiate(_floatingDmgPrefab, transform);
|
||||
var comp = go.GetComponent<FloatingDamageText>();
|
||||
if (comp != null) _pool.Enqueue(comp);
|
||||
if (comp != null) _pool.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,11 @@ namespace BaseGames.UI
|
||||
_maxHP = max;
|
||||
// 重建阶段标记(每次 BossHPMax 改变时清空并按已存阈值重建,此处简化为清空)
|
||||
if (_phaseMarkersRoot != null)
|
||||
foreach (Transform t in _phaseMarkersRoot) Destroy(t.gameObject);
|
||||
{
|
||||
// 逆序删除:避免正序枚举 Transform 子节点同时销毁时的迭代器失效
|
||||
for (int i = _phaseMarkersRoot.childCount - 1; i >= 0; i--)
|
||||
Destroy(_phaseMarkersRoot.GetChild(i).gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
// ── 动画协程 ──────────────────────────────────────────────────────────
|
||||
|
||||
@@ -42,6 +42,7 @@ namespace BaseGames.UI.HUD
|
||||
private readonly List<GameObject> _hpCells = new();
|
||||
private readonly List<GameObject> _springIcons = new();
|
||||
private readonly CompositeDisposable _subs = new();
|
||||
private int _lastLingZhu = int.MinValue;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
@@ -91,7 +92,9 @@ namespace BaseGames.UI.HUD
|
||||
|
||||
private void UpdateLingZhu(int val)
|
||||
{
|
||||
if (_lingZhuText != null) _lingZhuText.text = val.ToString();
|
||||
if (_lingZhuText == null || val == _lastLingZhu) return;
|
||||
_lastLingZhu = val;
|
||||
_lingZhuText.text = val.ToString();
|
||||
}
|
||||
|
||||
private void RebuildSpringIcons(int charges)
|
||||
|
||||
Reference in New Issue
Block a user