1
This commit is contained in:
@@ -228,6 +228,9 @@ public class MonsterContral : MonoBehaviour
|
||||
/// <summary>扇形(700)/圈(701)分布角方向:Init时按轴读生成姿态前方的XY投影,每条鱼各自不同</summary>
|
||||
private Vector2 _yzMoveDir = Vector2.zero;
|
||||
|
||||
/// <summary>阵鱼定位数值是否已打日志(一次性诊断用,池复用重置)</summary>
|
||||
private bool _yzPosLogged;
|
||||
|
||||
/// <summary>
|
||||
/// yzID 前3字符前缀缓存(Init 时 Substring 一次)。
|
||||
/// 避免 UpdateYZMovement 每帧每鱼 yzID.Substring(0,3) 产生字符串 GC 分配。
|
||||
@@ -405,6 +408,7 @@ public class MonsterContral : MonoBehaviour
|
||||
mainCamera = Camera.main;
|
||||
moveTime = 0f;
|
||||
yzGroupTimeOffset = 0f; // 池复用清掉上次的阵鱼创建偏移
|
||||
_yzPosLogged = false; // 池复用重置一次性定位日志
|
||||
// ⭐ 重置创建视频状态:池回收的鱼 _isPlayingCreateVideo 可能残留 true,
|
||||
// 重新生成时重置,由 Init 决定是否重新播放
|
||||
_createVideoDuration = 0f;
|
||||
@@ -731,6 +735,18 @@ public class MonsterContral : MonoBehaviour
|
||||
// ⭐ 加上创建时刻偏移:先创建的组已经游出去,后创建的从出生点出发,避免重合在同一点
|
||||
Vector2 pos = (Vector2)_yzStartWorld + lineDir * (moveTime + yzGroupTimeOffset) * monsterData.moveLine.moveTime;
|
||||
|
||||
// ⭐ 一次性诊断日志:输出阵鱼定位的各项数值(排查"偏移距离太小")
|
||||
if (!_yzPosLogged)
|
||||
{
|
||||
_yzPosLogged = true;
|
||||
var cam = mainCamera != null ? mainCamera : Camera.main;
|
||||
float worldW = cam != null ? cam.orthographicSize * 2f * cam.aspect : 0f;
|
||||
Debug.Log($"[阵鱼定位] guid={guid} yzID={yzID} prefix={_yzPrefix} " +
|
||||
$"start={_yzStartWorld.ToString("F2")} dir={_yzMoveDir.ToString("F3")} " +
|
||||
$"moveTime={moveTime:F3} offset={yzGroupTimeOffset:F3} speed={monsterData.moveLine.moveTime:F2} " +
|
||||
$"pos={pos.ToString("F2")} 屏幕世界宽={worldW:F2} isMove={isMove} isyz={isyz}");
|
||||
}
|
||||
|
||||
// ⭐ 朝向保持生成姿态(分布角)不转——不调 ApplyFacingDirection:
|
||||
// 它会覆盖根的分布角,把扇形/圈抹成一列竖队
|
||||
// ⭐ 保留根节点当前 z(2D 小鱼 z 一直为 0,行为不变)
|
||||
|
||||
@@ -222,9 +222,11 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
// fangzhu 字段已删除:鱼创建改由服务端 OnFishSpawn 统一下发,客户端无需房主出鱼
|
||||
public bool isResources = false;
|
||||
|
||||
[Header("扇形阵(700)")]
|
||||
[Tooltip("同一扇内相邻两条鱼之间的生成间隔(秒),避免17条鱼同帧出生叠在一起")]
|
||||
public float shanXingFishInterval = 0.05f;
|
||||
[Header("鱼阵(700/701)组偏移")]
|
||||
[Tooltip("每组(每条线)相对上一组多走的秒数。屏幕上组间距 ≈(该值 - 每组出鱼间隔)×moveLine.moveTime。\n" +
|
||||
"扇形每组间隔 1 秒,所以该值必须>1 才拉得开(如 3 → 组间距≈(3-1)×15=30 世界单位);\n" +
|
||||
"圈没有间隔,组间距≈该值×15")]
|
||||
public float yzGroupStaggerTime = 3f;
|
||||
|
||||
[Header("鱼阵路线撞车")]
|
||||
[Tooltip("同一条路线被鱼阵占用后,其他鱼阵再用到同一条线需要等待的秒数(避免同一出生点同帧重叠)")]
|
||||
@@ -1208,7 +1210,8 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
}
|
||||
// ⭐ 同线撞车:这条线刚被别的鱼阵用过时先等一会,避免同一出生点同帧叠一起
|
||||
yield return WaitLineFree(pathList[lineIndex]);
|
||||
yield return ShanXing(createFishData, yz, pos, prefab, pathList[lineIndex], count, time, arraySeq, lineIndex);
|
||||
// ⭐ 一扇内部一次性全部创建(不再逐条延迟);组与组之间靠 1s 等待 + 创建时间偏移拉开
|
||||
ShanXing(createFishData, yz, pos, prefab, pathList[lineIndex], count, time, arraySeq, lineIndex);
|
||||
yield return new WaitForSeconds(1f);
|
||||
}
|
||||
}
|
||||
@@ -1230,8 +1233,8 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
_lineBusyTime[pathId] = Time.time;
|
||||
}
|
||||
|
||||
/// <summary>扇形阵:一条线的17条鱼按 shanXingFishInterval 逐条延迟生成(避免同帧出生叠在一起)。</summary>
|
||||
private IEnumerator ShanXing(FrameData_CreateFish createFishData, FishArrayConfig yz,
|
||||
/// <summary>扇形阵:一条线(一扇)的17条鱼一次性全部创建,不再逐条延迟。</summary>
|
||||
private void ShanXing(FrameData_CreateFish createFishData, FishArrayConfig yz,
|
||||
Vector3 pos, GameObject prefab, int pathId, int count, long time, int arraySeq, int lineIndex)
|
||||
{
|
||||
var cfg = spawnDic[createFishData.fishNumber];
|
||||
@@ -1265,20 +1268,18 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
mc.guid = createFishData.guid + "_" + arraySeq + "_" + lineIndex + "_" + i;
|
||||
RegisterFishInstance(mc, FishDatas[yz.fishNumber].fishType);
|
||||
|
||||
// ⭐ moveTime 归零(存活时长从本条鱼自己出生算起),
|
||||
// "创建时刻偏移"单独放进 yzGroupTimeOffset:它只进位移公式,
|
||||
// 让先出的那一组已经沿分布方向游出去、后出的从出生点出发,避免整组重叠在同一点
|
||||
// ⭐ 创建时间偏移:每往下一组(每条线)+yzGroupStaggerTime 秒,
|
||||
// 位移公式用 (moveTime + yzGroupTimeOffset) 定位,把各组沿分布方向拉开、不再重合。
|
||||
// 注意:偏移必须大于"每组出鱼间隔(1s)",否则会精确抵消(半径完全相同,看着还是重合)
|
||||
// moveTime 本身保持 0:存活时长仍从本条鱼自己出生算起,不受偏移影响
|
||||
mc.moveTime = 0f;
|
||||
mc.yzGroupTimeOffset = (BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000f;
|
||||
mc.yzGroupTimeOffset = lineIndex * yzGroupStaggerTime;
|
||||
|
||||
mc.Init(pathId.ToString(), cfg.times, true, yz.arrayNumber);
|
||||
|
||||
// ⭐ 鱼阵调试日志:输出每条子鱼生成后的旋转与缩放(排查"有的正有的反")
|
||||
Debug.Log($"[鱼阵调试] 阵={yz.arrayNumber}(扇形700) pathId={pathId} 第{i}/{16}条 guid={mc.guid} " +
|
||||
$"rotation={fish.transform.eulerAngles.ToString("F1")} localScale={fish.transform.localScale.ToString("F3")}");
|
||||
|
||||
// ⭐ 同一扇内逐条延迟:避免17条鱼同帧出生全叠在出生点
|
||||
yield return new WaitForSeconds(shanXingFishInterval);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1331,9 +1332,10 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
|
||||
mc.guid = createFishData.guid + "_" + arraySeq + "_" + lineIndex + "_" + i;
|
||||
RegisterFishInstance(mc, FishDatas[yz.fishNumber].fishType);
|
||||
|
||||
// ⭐ moveTime 归零 + 创建时刻偏移进 yzGroupTimeOffset(说明同扇形)
|
||||
// ⭐ 创建时间偏移:每往下一组(每条线)+yzGroupStaggerTime 秒,位移定位用 (moveTime + yzGroupTimeOffset)
|
||||
// (说明同扇形;圈本身同帧出,靠这个偏移把各圈沿分布方向拉开,不必加延迟)
|
||||
mc.moveTime = 0f;
|
||||
mc.yzGroupTimeOffset = (BeijingTimeManager.Instance.CurrentTimestampMs - time) / 1000f;
|
||||
mc.yzGroupTimeOffset = lineIndex * yzGroupStaggerTime;
|
||||
|
||||
mc.Init(pathId.ToString(), cfg.times, true, yz.arrayNumber);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user