1
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 召唤出场:原地旋转 + 放大出来。
|
||||
/// ⭐ 旋转以"0.5 位置的正确朝向"为基准倒退 summonSelfSpinTurns 圈开始,
|
||||
/// 转到最后一帧正好落在正确朝向(不会有收尾的朝向跳变)。
|
||||
/// 召唤出场:原地各轴乱转 + 放大出来。
|
||||
/// ⭐ 旋转 = 以"0.5 位置的正确朝向"为基准,叠加一个最终归零的乱转偏移
|
||||
/// (每轴随机方向转基准圈数 + 额外来回摆动),所以转得再乱,最后一帧也正好是正确朝向。
|
||||
/// ⭐ 只转朝向逻辑决定的那一个节点(根节点 或 child0):另一个节点保持预制体姿态。
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user