1
This commit is contained in:
@@ -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.普通鱼:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user