1
This commit is contained in:
@@ -1427,6 +1427,10 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
||||
currentTurret = null;
|
||||
}
|
||||
|
||||
// ⭐ 换炮台:释放上一个炮台的按需引用(引用归零才真正卸包;同编号不释放)
|
||||
if (currentTurretNumber > 0 && currentTurretNumber != turretNumber)
|
||||
TurretResourcesData.ReleaseTurretPrefab(currentTurretNumber);
|
||||
|
||||
currentTurretNumber = turretNumber;
|
||||
|
||||
// ⭐ 散包按需加载:缓存没有时异步取(PT{编号} 标签),完成后实例化
|
||||
@@ -1435,12 +1439,14 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
||||
|
||||
/// <summary>炮台加载序号(防加载期间再次切换的竞态)</summary>
|
||||
private int _turretLoadSeq = 0;
|
||||
/// <summary>当前按需加载的翅膀编号(换翅膀/卸下时释放引用)</summary>
|
||||
private int _currentWingNumber = 0;
|
||||
|
||||
/// <summary>炮台异步按需加载协程:AcquireTurretPrefabAsync 完成后实例化(原同步逻辑后半段)</summary>
|
||||
private IEnumerator LoadTurretRoutine(int turretNumber, int seq)
|
||||
{
|
||||
GameObject prefab = TurretResourcesData.GetTurretPrefab(turretNumber);
|
||||
if (prefab == null)
|
||||
// ⭐ 每次都走 Acquire(缓存命中立即返回并正确 +1 引用,多座位共用同一炮台不会互相误卸)
|
||||
GameObject prefab = null;
|
||||
{
|
||||
var task = TurretResourcesData.AcquireTurretPrefabAsync(turretNumber);
|
||||
while (!task.IsCompleted) yield return null;
|
||||
@@ -1608,10 +1614,21 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
||||
// turretNumber<=0 = 卸下(与战神同一约定):只清理不加载,不打警告
|
||||
if (turretNumber <= 0)
|
||||
{
|
||||
// ⭐ 卸下翅膀:释放按需引用
|
||||
if (_currentWingNumber > 0)
|
||||
{
|
||||
TurretResourcesData.ReleaseTurretPrefab(_currentWingNumber);
|
||||
_currentWingNumber = 0;
|
||||
}
|
||||
ClearWing();
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐ 换翅膀:释放上一个的按需引用(引用归零才真正卸包)
|
||||
if (_currentWingNumber > 0 && _currentWingNumber != turretNumber)
|
||||
TurretResourcesData.ReleaseTurretPrefab(_currentWingNumber);
|
||||
_currentWingNumber = turretNumber;
|
||||
|
||||
// 先清理已有翅膀
|
||||
ClearWing();
|
||||
|
||||
@@ -1622,8 +1639,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
||||
/// <summary>翅膀异步按需加载协程(模式同炮台:seq 防竞态)</summary>
|
||||
private IEnumerator LoadWingRoutine(int turretNumber, int seq)
|
||||
{
|
||||
GameObject prefab = TurretResourcesData.GetTurretPrefab(turretNumber);
|
||||
if (prefab == null)
|
||||
// ⭐ 每次都走 Acquire(缓存命中立即返回并正确 +1 引用)
|
||||
GameObject prefab = null;
|
||||
{
|
||||
var task = TurretResourcesData.AcquireTurretPrefabAsync(turretNumber);
|
||||
while (!task.IsCompleted) yield return null;
|
||||
|
||||
Reference in New Issue
Block a user