From e1717d4d7fb1b4cf327fdc0ec06de6e00ef2d1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Thu, 8 Oct 2026 02:16:41 +0800 Subject: [PATCH] 1 --- .../aa/UI/Game/GameMainPanel_FishBase.cs | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs index c4e4cf0bb..d421c7282 100644 --- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs +++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs @@ -2243,10 +2243,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base [Header("召唤卡出场(旋转放大)")] [Tooltip("出场时长(秒):原地旋转 + 放大到正常大小的时间")] public float summonEntranceDuration = 0.5f; - [Tooltip("出场自转圈数(正数=顺时针,负数=逆时针)。以 0.5 位置的正确朝向为终点倒推,转完正好落在正确朝向")] + [Tooltip("每轴基准自转圈数(方向随机):三个轴各随机方向转这么多圈")] public float summonSelfSpinTurns = 2f; - [Tooltip("出场自转轴:默认 Z 轴(屏幕平面内自转)")] - public Vector3 summonSelfSpinAxis = new Vector3(0f, 0f, 1f); + [Tooltip("乱转幅度:各轴额外叠加来回摆动的强度(0=只按基准圈数转)")] + public float summonSpinChaos = 1.5f; [Tooltip("出场位置偏移(世界坐标):微调漩涡/出场落点")] public Vector3 summonEntranceTargetOffset = Vector3.zero; @@ -2387,15 +2387,29 @@ public class GameMainPanel_FishBase : GameMainPanel_Base } /// - /// 召唤出场:原地旋转 + 放大出来。 - /// ⭐ 旋转以"0.5 位置的正确朝向"为基准倒退 summonSelfSpinTurns 圈开始, - /// 转到最后一帧正好落在正确朝向(不会有收尾的朝向跳变)。 + /// 召唤出场:原地各轴乱转 + 放大出来。 + /// ⭐ 旋转 = 以"0.5 位置的正确朝向"为基准,叠加一个最终归零的乱转偏移 + /// (每轴随机方向转基准圈数 + 额外来回摆动),所以转得再乱,最后一帧也正好是正确朝向。 /// ⭐ 只转朝向逻辑决定的那一个节点(根节点 或 child0):另一个节点保持预制体姿态。 /// private IEnumerator SummonScaleSpinEntrance(MonsterContral monster, MonsterContral.RouteFacingResult facing, Vector3 scaleTarget) { float duration = Mathf.Max(0.01f, summonEntranceDuration); - float spinTotal = summonSelfSpinTurns * 360f; + float baseTurns = Mathf.Abs(summonSelfSpinTurns) * 360f; + float chaos = Mathf.Max(0f, summonSpinChaos); + + // 乱转参数出场期间固定(每轴:随机方向的基准角度 + 随机摆动频率/幅度),避免每帧乱抖 + float[] axisDeg = new float[3]; + float[] swayFreq = new float[3]; + float[] swayDeg = new float[3]; + for (int i = 0; i < 3; i++) + { + float dir = Random.value < 0.5f ? -1f : 1f; + axisDeg[i] = dir * baseTurns * Random.Range(0.8f, 1.8f); + swayFreq[i] = Random.Range(1f, 3f); // 来回摆动的次数 + swayDeg[i] = chaos * 360f * Random.Range(0.3f, 1f) * (Random.value < 0.5f ? -1f : 1f); + } + float elapsed = 0f; while (elapsed < duration) { @@ -2409,11 +2423,14 @@ public class GameMainPanel_FishBase : GameMainPanel_Base // 放大出来:0 → 最终缩放(含左右镜像的 x 符号) monster.transform.localScale = Vector3.Lerp(Vector3.zero, scaleTarget, ease); - // 旋转出来:从"正确朝向倒退 spinTotal 度"转到"正确朝向" + // 各轴乱转:(基准角度 + 摆动) × (1-ease) → t=1 时偏移正好归零 = 正确朝向 if (facing.valid && facing.node != null) { - float deg = spinTotal * (1f - ease); // ease=0 → 倒退 spinTotal;ease=1 → 0(正确朝向) - facing.node.rotation = facing.rotation * Quaternion.AngleAxis(deg, summonSelfSpinAxis); + float k = 1f - ease; + float dx = (axisDeg[0] + swayDeg[0] * Mathf.Sin(swayFreq[0] * Mathf.PI * 2f * t)) * k; + float dy = (axisDeg[1] + swayDeg[1] * Mathf.Sin(swayFreq[1] * Mathf.PI * 2f * t)) * k; + float dz = (axisDeg[2] + swayDeg[2] * Mathf.Sin(swayFreq[2] * Mathf.PI * 2f * t)) * k; + facing.node.rotation = facing.rotation * Quaternion.Euler(dx, dy, dz); } yield return null; }