This commit is contained in:
2026-06-15 18:37:06 +08:00
parent 6442ceb5e8
commit b5e83af832
9 changed files with 152 additions and 33 deletions
@@ -615,7 +615,7 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
return;
foreach (var item in bossList)
{
if (item.fishNumber == "13030")
if (item.fishNumber == "11025")
{
item.isCreate = 2;
}
@@ -1507,21 +1507,30 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
if (!fishDatas_hashCodekey.TryGetValue(killFish.fishId, out var monster)) return;
monster.DieFish(killFish);
// 死亡粒子特效
Instantiate(
monster.effect_Die != null ? monster.effect_Die : dieFXPrefab,
monster.transform.position, Quaternion.identity, transform.parent);
// 加分回调(在金币/加分面板飞完后执行)
Action<int> onScoreAdd = audioID =>
int goldToAdd = killFish.gold; // 立即复制需要的数据
string fishId = killFish.fishId; // 如果需要的话
Action<int> onScoreAdd = (audioID) =>
{
var sitList = GetCurrentPanelSitList();
sitData.goldNum += killFish.gold;
sitData.goldNum += goldToAdd; // 使用副本,不再依赖 killFish 对象
sitData.tMP_GoldNum.text = sitData.goldNum.ToString();
AudioManager.Instance.PlayerFX(audioID);
};
//// 加分回调(在金币/加分面板飞完后执行)
//Action<int> onScoreAdd = (audioID) =>
//{
// var sitList = GetCurrentPanelSitList();
// sitData.goldNum += killFish.gold;
// sitData.tMP_GoldNum.text = sitData.goldNum.ToString();
// AudioManager.Instance.PlayerFX(audioID);
//};
monster.DieFish(killFish);
switch (monster.fishenum)
{
case FishTypeEnum.普通鱼:
+118 -19
View File
@@ -117,33 +117,59 @@ public class TurretData : MonoBehaviour
{
PlayState(TurretState.Idle);
}
//public Vector2 GetBulletStartWorldPos()
//{
// if (tra_BulletStartPosition == null)
// return Vector2.zero;
// // 如果是 UI RectTransform(UGUI)
// RectTransform rect = tra_BulletStartPosition.GetComponent<RectTransform>();
// if (rect != null)
// {
// // 1. UI 本地坐标 → Canvas 坐标
// Vector2 canvasPos = CoordinateTransformation.AnchoredPos_ToCanvas(
// rect,
// UIManager.Instance.uiRoot.GetComponent<Canvas>()
// );
// // 2. Canvas 坐标 → 世界坐标
// return CoordinateTransformation.CanvasToWorld(
// canvasPos,
// UIManager.Instance.uiRoot.GetComponent<RectTransform>(),
// Camera.main
// );
// }
// // 如果不是 UI(比如 3D Transform)
// return tra_BulletStartPosition.position;
//}
public Vector2 GetBulletStartWorldPos()
{
if (tra_BulletStartPosition == null)
return Vector2.zero;
// 如果是 UI RectTransform(UGUI)
// 如果是 UI(UGUI)
RectTransform rect = tra_BulletStartPosition.GetComponent<RectTransform>();
if (rect != null)
{
// 1. UI 本地坐标 → Canvas 坐标
Vector2 canvasPos = CoordinateTransformation.AnchoredPos_ToCanvas(
rect,
UIManager.Instance.uiRoot.GetComponent<Canvas>()
);
Canvas canvas = UIManager.Instance.uiRoot.GetComponent<Canvas>();
Camera cam = Camera.main;
// 2. Canvas 坐标 → 世界坐标
return CoordinateTransformation.CanvasToWorld(
canvasPos,
UIManager.Instance.uiRoot.GetComponent<RectTransform>(),
Camera.main
// 方式1:通过屏幕坐标直接转世界坐标(推荐)
Vector3 screenPos = RectTransformUtility.WorldToScreenPoint(
canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera,
rect.position
);
// 需要计算 Z 轴距离(物体到相机的距离),这里假设子弹打在 Z=0 平面
float distance = Mathf.Abs(cam.transform.position.z - 0f);
Vector3 worldPos = cam.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, distance));
worldPos.z = 0f;
return worldPos;
}
// 如果不是 UI(比如 3D Transform)
// 非 UI(3D 物体)
return tra_BulletStartPosition.position;
}
public void SetFrenzy(bool value)
{
isFrenzy = value;
@@ -209,6 +235,62 @@ public class TurretData : MonoBehaviour
}
}
//private void PlaySkeleton(TurretState state)
//{
// if (skeletonAnimation == null) return;
// string anim = state switch
// {
// TurretState.Idle => idleAnim,
// TurretState.Attack => (isFrenzy && useFrenzyAnim) ? frenzyAttackAnim : attackAnim,
// TurretState.LaserStart => laserStartAnim,
// TurretState.LaserLoop => laserLoopAnim,
// TurretState.LaserEnd => laserEndAnim,
// _ => idleAnim
// };
// bool loop = state == TurretState.Attack || state == TurretState.LaserLoop;
// skeletonAnimation.AnimationState.SetAnimation(0, anim, loop);
// if (state == TurretState.LaserStart)
// {
// skeletonAnimation.AnimationState.AddAnimation(0, laserLoopAnim, true, 0f);
// }
//}
//private void PlayLegacy(TurretState state)
//{
// if (old_CurrAnimation == null) return;
// string anim = state switch
// {
// TurretState.Idle => idleAnim,
// TurretState.Attack => (isFrenzy && useFrenzyAnim) ? frenzyAttackAnim : attackAnim,
// TurretState.LaserStart => laserStartAnim,
// TurretState.LaserLoop => laserLoopAnim,
// TurretState.LaserEnd => laserEndAnim,
// _ => idleAnim
// };
// old_CurrAnimation.Play(anim);
//}
//private void PlayAnimator(TurretState state)
//{
// if (new_CurrAnimation == null) return;
// if (state == TurretState.Attack && isFrenzy && useFrenzyAnim)
// {
// new_CurrAnimation.SetTrigger("FrenzyAttack");
// }
// else
// {
// new_CurrAnimation.SetInteger("State", (int)state);
// }
//}
private void PlaySkeleton(TurretState state)
{
if (skeletonAnimation == null) return;
@@ -223,17 +305,23 @@ public class TurretData : MonoBehaviour
_ => idleAnim
};
// 如果动画名为空 → 停止当前动画(暂停),不再播放任何动画
if (string.IsNullOrEmpty(anim))
{
skeletonAnimation.AnimationState.ClearTrack(0);
skeletonAnimation.AnimationState.SetEmptyAnimation(0, 0f);
return;
}
bool loop = state == TurretState.Attack || state == TurretState.LaserLoop;
skeletonAnimation.AnimationState.SetAnimation(0, anim, loop);
if (state == TurretState.LaserStart)
if (state == TurretState.LaserStart && !string.IsNullOrEmpty(laserLoopAnim))
{
skeletonAnimation.AnimationState.AddAnimation(0, laserLoopAnim, true, 0f);
}
}
private void PlayLegacy(TurretState state)
{
if (old_CurrAnimation == null) return;
@@ -248,22 +336,33 @@ public class TurretData : MonoBehaviour
_ => idleAnim
};
if (string.IsNullOrEmpty(anim))
{
old_CurrAnimation.Stop();
return;
}
old_CurrAnimation.Play(anim);
}
private void PlayAnimator(TurretState state)
{
if (new_CurrAnimation == null) return;
if (state == TurretState.Attack && isFrenzy && useFrenzyAnim)
// 如果缺少对应动画,暂停 animator(速度为0)或者设置一个空状态
if (state == TurretState.Attack && isFrenzy && useFrenzyAnim && !string.IsNullOrEmpty(frenzyAttackAnim))
{
new_CurrAnimation.SetTrigger("FrenzyAttack");
}
else
else if (!string.IsNullOrEmpty(attackAnim) || state == TurretState.Idle && !string.IsNullOrEmpty(idleAnim))
{
new_CurrAnimation.SetInteger("State", (int)state);
}
else
{
// 没有可用动画时暂停 animator,避免残留动作
new_CurrAnimation.speed = 0f;
}
}
}