1
This commit is contained in:
@@ -7416,7 +7416,7 @@ MonoBehaviour:
|
||||
spawnList: []
|
||||
isCreateFish: 0
|
||||
isFrozen: 0
|
||||
debugSpawnFishNumber: 11033
|
||||
debugSpawnFishNumber: 11042
|
||||
fishList_All: []
|
||||
fishList_Small: []
|
||||
fishList_Boss: []
|
||||
|
||||
@@ -22,9 +22,9 @@ using UnityEngine;
|
||||
using static MonsterMoveLine;
|
||||
|
||||
/// <summary>
|
||||
/// 鱼实体基类:封装状态机(移动/待机)、贝塞尔曲线路径跟随、动画播放、死亡逻辑。
|
||||
/// 具体鱼类型(Boss等)通过继承重写虚方法扩展行为。
|
||||
/// </summary>
|
||||
/// 鱼实体基类:封装状态机(移动/待机)、贝塞尔曲线路径跟随、动画播放、死亡逻辑。
|
||||
/// 具体鱼类型(Boss等)通过继承重写虚方法扩展行为。
|
||||
/// </summary>
|
||||
public class MonsterContral : MonoBehaviour
|
||||
{
|
||||
// ----------------------------------------------------------------
|
||||
@@ -142,13 +142,13 @@ public class MonsterContral : MonoBehaviour
|
||||
}
|
||||
switch (forwordXYZ)
|
||||
{
|
||||
case "X": _facingAxis = FacingAxis.X; break;
|
||||
case "X": _facingAxis = FacingAxis.X; break;
|
||||
case "-X": _facingAxis = FacingAxis.NegX; break;
|
||||
case "Y": _facingAxis = FacingAxis.Y; break;
|
||||
case "Y": _facingAxis = FacingAxis.Y; break;
|
||||
case "-Y": _facingAxis = FacingAxis.NegY; break;
|
||||
case "Z": _facingAxis = FacingAxis.Z; break;
|
||||
case "Z": _facingAxis = FacingAxis.Z; break;
|
||||
case "-Z": _facingAxis = FacingAxis.NegZ; break;
|
||||
default: _facingAxis = FacingAxis.None; break;
|
||||
default: _facingAxis = FacingAxis.None; break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,6 +319,50 @@ public class MonsterContral : MonoBehaviour
|
||||
|
||||
public int rotationPY = 60;
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用左右镜像翻转(仅 ischild0 配置了 forwordXYZ 的 Z/NegZ 鱼生效)。
|
||||
/// ⚠️ 默认关闭:镜像在跨左右中线的瞬间切换(旋转跳180°),适合"水平单向横穿"的鱼;
|
||||
/// 路线会绕圈/反复跨中线的鱼(如曲线游动的Boss)勾上会频繁翻转,不要开。
|
||||
/// </summary>
|
||||
[Tooltip("左右镜像翻转(仅forwordXYZ=Z/-Z且ischild0的鱼生效):往左游时叠加180°让背朝向与往右一致。跨中线瞬间切换会翻转180°,曲线绕行路线勿开")]
|
||||
public bool useFacingMirror = false;
|
||||
|
||||
/// <summary>
|
||||
/// 平滑转头速度(度/秒,ischild0 轴对齐鱼生效)。
|
||||
/// heading 每帧直接对准移动方向,路线急弯处方向剧变会导致鱼头单帧瞬跳(视觉"翻转一下");
|
||||
/// 按此速度限制转头,急弯时快速甩头跟随而非瞬跳。0=关闭平滑(瞬跳)。
|
||||
/// </summary>
|
||||
[Tooltip("平滑转头速度(度/秒):限制heading跟随速度,路线急弯时鱼头平滑甩过去而非单帧瞬跳。0=关闭")]
|
||||
public float facingTurnSpeed = 720f;
|
||||
|
||||
/// <summary>
|
||||
/// 模型装反修正(仅 forwordXYZ=Z/-Z 且 ischild0 的鱼生效):
|
||||
/// 绕头尾轴整体再转180°(等效 Y 轴旋转×-1:背/左右侧互换,鱼头朝向不变)。
|
||||
/// 模型 Y 轴(背)朝向与预期相反时勾选。
|
||||
/// </summary>
|
||||
[Tooltip("模型装反修正(仅forwordXYZ=Z/-Z且ischild0):绕头尾轴转180°修正Y轴装反的模型,鱼头朝向不变")]
|
||||
public bool flipModelRoll = false;
|
||||
|
||||
/// <summary>
|
||||
/// 双数路线镜像(仅配置了 forwordXYZ 且 ischild0 的 Boss 生效):
|
||||
/// 双数路线(右→左)绕头尾轴补180°,背腹与单数路线(左→右)镜像一致。
|
||||
/// 按路线编号奇偶判定,整条路线固定不变;不会像 useFacingMirror
|
||||
/// 因曲线中途跨中线而翻转。语义对齐未配置朝向轴 Boss 的 ApplyBossRouteFlip。
|
||||
/// </summary>
|
||||
[Tooltip("双数路线镜像(仅配置forwordXYZ且ischild0的Boss):双数路线(右→左)绕头尾轴补180°修正背腹,按路线奇偶全程固定,不随中线切换")]
|
||||
public bool routeFlipMirror = false;
|
||||
|
||||
/// <summary>
|
||||
/// 默认朝向分支(无forwordXYZ配置的普通鱼)的左右镜像状态(带滞回):
|
||||
/// false=朝右正向,true=朝左镜像。越过中线±0.05才切换,防止垂直游动时抖动闪跳。
|
||||
/// </summary>
|
||||
private bool _defaultMirror = false;
|
||||
|
||||
/// <summary>是否已锁存初始欧拉(每条鱼每次出场锁一次)</summary>
|
||||
private bool _facingApplied = false;
|
||||
/// <summary>初始欧拉(美术摆放姿态):X/Y分量锁死,转向只叠加Z分量</summary>
|
||||
private Vector3 _initEuler = Vector3.zero;
|
||||
|
||||
|
||||
// ================================================================
|
||||
// Unity 生命周期
|
||||
@@ -367,6 +411,11 @@ public class MonsterContral : MonoBehaviour
|
||||
// (金龙/雷龙/玉龙等不走路径,直到爆奖结束销毁)
|
||||
// - 冰冻中重新激活的鱼,末尾会覆盖为 false,安全
|
||||
isMove = baseMmove;
|
||||
// ⭐ 重置左右镜像状态:池复用残留会在出场瞬间错误切换(跳180°)。
|
||||
// 出场第一帧 ApplyFacingDirection 的滞回会按实际移动方向立即修正(设置旋转前,同帧生效)
|
||||
_defaultMirror = false;
|
||||
// ⭐ 重置朝向锁存:池复用每次出场重新锁存初始欧拉
|
||||
_facingApplied = false;
|
||||
// ⭐ 重置可锁定状态:needLockEvent=true 的鱼每次重新生成都需等 NotifyLockable()
|
||||
// needLockEvent=false 的鱼一直可锁定
|
||||
isLockable = !needLockEvent;
|
||||
@@ -770,10 +819,15 @@ public class MonsterContral : MonoBehaviour
|
||||
if (!isRotate) return;
|
||||
|
||||
Vector2 toNext = nextPos - (Vector2)transform.position;
|
||||
if (toNext.sqrMagnitude < 0.0001f) return;
|
||||
if (toNext.sqrMagnitude < 0.0001f) return; // 方向未知,下一帧再指定
|
||||
|
||||
Vector2 dirNorm = toNext.normalized; // ⭐ 缓存归一化向量,避免分支内重复计算
|
||||
|
||||
// ⭐ 左右镜像滞回(默认分支与Z/NegZ轴对齐分支共用):只在明显越过中线时切换,
|
||||
// 避免鱼垂直方向游动时 dx 微小抖动导致镜像来回闪跳(镜像切换必须瞬间完成,不能平滑)
|
||||
if (!_defaultMirror && dirNorm.x < -0.05f) _defaultMirror = true;
|
||||
else if (_defaultMirror && dirNorm.x > 0.05f) _defaultMirror = false;
|
||||
|
||||
// ⭐ 用预解析的枚举 switch,避免每帧每鱼 string 比较
|
||||
// 处理未指定朝向轴的情况(默认行为)
|
||||
if (_facingAxis == FacingAxis.None)
|
||||
@@ -787,10 +841,32 @@ public class MonsterContral : MonoBehaviour
|
||||
{
|
||||
float angle = Mathf.Atan2(toNext.y, toNext.x) * Mathf.Rad2Deg;
|
||||
transform.rotation = Quaternion.AngleAxis(angle - 90f, Vector3.forward);
|
||||
|
||||
// ⭐ 左右镜像(修复"出鱼有的正有的反"):贴图头朝上的鱼纯旋转对齐时,
|
||||
// 往左游=整体转180°=肚皮朝上(反)。往左时叠加X轴镜像:
|
||||
// 旋转角不变(镜像不改变鱼头方向),只翻回背腹朝向,左右游姿态一致。
|
||||
// 以预制体基准绝对赋值,池复用不叠加
|
||||
float mirrorX = _defaultMirror ? -_prefabScaleX : _prefabScaleX;
|
||||
var s = transform.localScale;
|
||||
if (!Mathf.Approximately(s.x, mirrorX))
|
||||
{
|
||||
s.x = mirrorX;
|
||||
transform.localScale = s;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.rotation = Quaternion.LookRotation(dirNorm, Vector3.up);
|
||||
// ⭐ 连续构造替代 LookRotation(dirNorm, up):朝向接近正上/正下时
|
||||
// LookRotation 参考系退化(cross(up,forward)≈0),左右轴随dx符号
|
||||
// 瞬间翻转180°导致鱼抖。此写法与 LookRotation 稳态等价且全程连续
|
||||
float heading = Mathf.Atan2(dirNorm.y, dirNorm.x) * Mathf.Rad2Deg;
|
||||
var rot = Quaternion.AngleAxis(heading, Vector3.forward)
|
||||
* Quaternion.AngleAxis(90f, Vector3.up);
|
||||
// ⭐ 往左时绕头尾轴再转180°:3D鱼左右近似对称,等效镜像,
|
||||
// 背始终朝上(与往右一致),避免负缩放的法线翻转副作用
|
||||
if (_defaultMirror)
|
||||
rot *= Quaternion.AngleAxis(180f, Vector3.forward);
|
||||
transform.rotation = rot;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -798,82 +874,41 @@ public class MonsterContral : MonoBehaviour
|
||||
// 是否为子物体单独控制朝向和深度
|
||||
if (ischild0)
|
||||
{
|
||||
// ⭐ 全部使用缓存 child,不再 transform.GetChild(0)
|
||||
float heading = Mathf.Atan2(dirNorm.y, dirNorm.x) * Mathf.Rad2Deg; // 路径方向角
|
||||
|
||||
// ⭐ 首次:读回初始欧拉锁存,之后每帧复用——
|
||||
// 若每帧读回,Z分量里已含上帧的heading,会逐帧累积疯转
|
||||
if (!_facingApplied)
|
||||
{
|
||||
_initEuler = child.eulerAngles;
|
||||
_facingApplied = true;
|
||||
}
|
||||
|
||||
float offsetX = _initEuler.x, offsetY = _initEuler.y, offsetZ = _initEuler.z;
|
||||
//方向偏移(视角偏移写着看透视)
|
||||
switch (_facingAxis)
|
||||
{
|
||||
case FacingAxis.X:
|
||||
{
|
||||
child.right = dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
// ⭐ 根据 z 轴角度判断鱼朝向(左/右半边),决定 x 侧倾符号
|
||||
// child.right=dirNorm 在 2D 平面主要改变 z 轴旋转
|
||||
// z<180(朝上半边)→负, z>=180(朝下半边)→正
|
||||
vv.x = rotationPY * (vv.z < 180 ? -1 : 1);
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.NegX:
|
||||
{
|
||||
child.right = -dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
vv.x = -rotationPY * (vv.z < 180 ? -1 : 1);
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.Y:
|
||||
{
|
||||
child.up = dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
// ⭐ 根据 z 轴角度判断鱼朝向(左/右半边),决定 y 侧倾符号
|
||||
// child.up=dirNorm 在 2D 平面主要改变 z 轴旋转
|
||||
// z<180(朝左半边)→负, z>=180(朝右半边)→正
|
||||
vv.y = rotationPY * (vv.z < 180 ? -1 : 1);
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.NegY:
|
||||
{
|
||||
child.up = -dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
vv.y = -rotationPY * (vv.z < 180 ? -1 : 1);
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.Z:
|
||||
{
|
||||
child.forward = dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
if (isNot1)
|
||||
{
|
||||
vv.z = rotationPY;
|
||||
}
|
||||
else
|
||||
{
|
||||
vv.z = rotationPY * (vv.y < 180 ? -1 : 1);
|
||||
}
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.NegZ:
|
||||
{
|
||||
child.forward = -dirNorm;
|
||||
var vv = child.eulerAngles;
|
||||
vv.z = -rotationPY * (vv.y < 180 ? -1 : 1);
|
||||
child.eulerAngles = vv;
|
||||
}
|
||||
break;
|
||||
case FacingAxis.X: offsetX = rotationPY; break;
|
||||
case FacingAxis.NegX: offsetX = rotationPY; break;
|
||||
case FacingAxis.Y: offsetY = rotationPY; break;
|
||||
case FacingAxis.NegY: offsetY = rotationPY; break;
|
||||
case FacingAxis.Z: offsetZ = rotationPY; break;
|
||||
case FacingAxis.NegZ: offsetZ = rotationPY; break;
|
||||
}
|
||||
|
||||
// ⭐ 转向:heading只叠加Z分量(唯一随路径变的轴),X/Y保持初始值
|
||||
child.rotation = Quaternion.Euler(offsetX, offsetY, heading + offsetZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 控制父物体自身朝向
|
||||
switch (_facingAxis)
|
||||
{
|
||||
case FacingAxis.X: transform.right = dirNorm; break;
|
||||
case FacingAxis.X: transform.right = dirNorm; break;
|
||||
case FacingAxis.NegX: transform.right = -dirNorm; break;
|
||||
case FacingAxis.Y: transform.up = dirNorm; break;
|
||||
case FacingAxis.Y: transform.up = dirNorm; break;
|
||||
case FacingAxis.NegY: transform.up = -dirNorm; break;
|
||||
case FacingAxis.Z: transform.forward = dirNorm; break;
|
||||
case FacingAxis.Z: transform.forward = dirNorm; break;
|
||||
case FacingAxis.NegZ: transform.forward = -dirNorm; break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,6 +130,10 @@ public class MonsterControl_BossBase : MonsterContral
|
||||
// 避免 UpdateYZMovement 里 _yzPrefix 为空导致鱼阵 Boss 不移动
|
||||
SetYzPrefix(yzID);
|
||||
|
||||
// ⭐ 缓存路线编号(Boss 未调 base.Init,lastMoveLineId 需单独保存,
|
||||
// ApplyFacingDirection 的双数路线镜像 routeFlipMirror 按它判定奇偶)
|
||||
lastMoveLineId = pathId;
|
||||
|
||||
// ⭐ Boss朝向:不随路线切线旋转,按路线编号奇偶翻转X轴
|
||||
// (单数路线=左→右保持预制体正向,双数路线=右→左翻转X轴为负)
|
||||
if (isMove && IsRouteFlipBoss)
|
||||
|
||||
@@ -193,9 +193,13 @@ MonoBehaviour:
|
||||
needLockEvent: 0
|
||||
createVideoClip: {fileID: 0}
|
||||
rotationPY: 60
|
||||
useFacingMirror: 0
|
||||
facingTurnSpeed: 720
|
||||
flipModelRoll: 0
|
||||
routeFlipMirror: 0
|
||||
baseMmove: 0
|
||||
isRotate: 1
|
||||
isNot1: 0
|
||||
isNot1: 1
|
||||
ischild0: 1
|
||||
depthOffset: 0
|
||||
is2DFish: 0
|
||||
|
||||
@@ -100,6 +100,36 @@ PrefabInstance:
|
||||
propertyPath: m_ConstrainProportionsScale
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 90
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8204141238143507111, guid: 15beeda2ce626134eb1be15b3aaac6a1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 90
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 9080966044805862266, guid: 15beeda2ce626134eb1be15b3aaac6a1, type: 3}
|
||||
- {fileID: 3150909838311154911, guid: 15beeda2ce626134eb1be15b3aaac6a1, type: 3}
|
||||
@@ -412,7 +442,7 @@ MonoBehaviour:
|
||||
currEffect_DieAward: {fileID: 0}
|
||||
isMove: 1
|
||||
is3D: 0
|
||||
forwordXYZ:
|
||||
forwordXYZ: Z
|
||||
fishenum: 0
|
||||
moveTime: 0
|
||||
isyz: 0
|
||||
@@ -424,11 +454,15 @@ MonoBehaviour:
|
||||
- {fileID: 5660587775485093544}
|
||||
needLockEvent: 0
|
||||
createVideoClip: {fileID: 0}
|
||||
rotationPY: 60
|
||||
rotationPY: 0
|
||||
useFacingMirror: 0
|
||||
facingTurnSpeed: 720
|
||||
flipModelRoll: 0
|
||||
routeFlipMirror: 1
|
||||
baseMmove: 0
|
||||
isRotate: 0
|
||||
isNot1: 0
|
||||
ischild0: 0
|
||||
isRotate: 1
|
||||
isNot1: 1
|
||||
ischild0: 1
|
||||
depthOffset: 0
|
||||
is2DFish: 0
|
||||
sortOrder2D: 0
|
||||
|
||||
@@ -503,19 +503,19 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.70223415
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0.71194607
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@@ -523,7 +523,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: -90.787
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
@@ -616,9 +616,13 @@ MonoBehaviour:
|
||||
needLockEvent: 0
|
||||
createVideoClip: {fileID: 0}
|
||||
rotationPY: 60
|
||||
useFacingMirror: 0
|
||||
facingTurnSpeed: 720
|
||||
flipModelRoll: 0
|
||||
routeFlipMirror: 0
|
||||
baseMmove: 0
|
||||
isRotate: 1
|
||||
isNot1: 0
|
||||
isNot1: 1
|
||||
ischild0: 1
|
||||
depthOffset: 300
|
||||
is2DFish: 0
|
||||
@@ -1164,7 +1168,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4481218116084082, guid: b8b9fc4bfcee1a44c83f2026292a62cd, type: 3}
|
||||
propertyPath: m_ConstrainProportionsScale
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
|
||||
@@ -18,8 +18,53 @@ PrefabInstance:
|
||||
type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 406281148, guid: 68e4fec764425b4438eb6a06c7b99c16,
|
||||
objectReference: {fileID: 21300000, guid: 31607aafeb4d79d4288d104e9bd6575c,
|
||||
type: 3}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 0.87749934
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 1.1699991
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 1.1699991
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.9781103
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.20808695
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 52.3
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 24.021
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5057580892980106450, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
|
||||
@@ -18,8 +18,63 @@ PrefabInstance:
|
||||
type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 406281148, guid: 68e4fec764425b4438eb6a06c7b99c16,
|
||||
objectReference: {fileID: 21300000, guid: 75a25856dbda8fc409afbb246779a6fb,
|
||||
type: 3}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 1760
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 2560
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 0.079422735
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 0.079422735
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 0.079422735
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.95565146
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.29450026
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 77
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 34.255
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5057580892980106450, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
|
||||
@@ -18,8 +18,53 @@ PrefabInstance:
|
||||
type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 406281148, guid: 68e4fec764425b4438eb6a06c7b99c16,
|
||||
objectReference: {fileID: 21300000, guid: bab1afd7785a3ed41a63c0a0a97cd776,
|
||||
type: 3}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 0.84025705
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 1.1589912
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 1.1589912
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.96711844
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.2543268
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 50.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 29.467
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5057580892980106450, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
|
||||
@@ -18,8 +18,53 @@ PrefabInstance:
|
||||
type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 406281148, guid: 68e4fec764425b4438eb6a06c7b99c16,
|
||||
objectReference: {fileID: 21300000, guid: 2a2c3baee28037a4dae236377322e6e0,
|
||||
type: 3}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 0.9185245
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 1.2891753
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 1.2891753
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.96373296
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.26686856
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 52.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 30.956
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5057580892980106450, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
|
||||
@@ -18,8 +18,43 @@ PrefabInstance:
|
||||
type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: 406281148, guid: 68e4fec764425b4438eb6a06c7b99c16,
|
||||
objectReference: {fileID: 21300000, guid: bab1afd7785a3ed41a63c0a0a97cd776,
|
||||
type: 3}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 1.145361
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.97292227
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.23113282
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 62
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3832223424831496137, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 26.728
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5057580892980106450, guid: 45afc82bd78fcde4094d06a4b547efa8,
|
||||
type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
|
||||
@@ -5,13 +5,52 @@ using UnityEngine;
|
||||
|
||||
public class DefaultBossControl : MonsterControl_BossBase
|
||||
{
|
||||
// ================================================================
|
||||
// ⭐ 翻转排查日志(临时):ischild0=true 时朝向逻辑旋转的是第0个子物体,
|
||||
// 本体(transform)不被 ApplyFacingDirection 触碰,日志全部观测 child0
|
||||
// ================================================================
|
||||
|
||||
/// <summary>翻转排查:child0 上一帧的世界旋转与缩放(突变时打印,捕获翻转瞬间)</summary>
|
||||
private Quaternion _dbgLastRot;
|
||||
private Vector3 _dbgLastScale;
|
||||
private bool _dbgHasLast;
|
||||
|
||||
/// <summary>调试用:获取第0个子物体(与朝向逻辑的 _cachedChild 同源)</summary>
|
||||
private Transform DbgChild => transform.childCount > 0 ? transform.GetChild(0) : null;
|
||||
|
||||
public override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
_dbgHasLast = false;
|
||||
|
||||
// ⭐ 出场状态:child0 是实际被旋转的对象
|
||||
var c = DbgChild;
|
||||
if (c != null)
|
||||
{
|
||||
Debug.Log($"[Boss翻转排查] OnEnable guid={guid} child0 " +
|
||||
$"localScale={c.localScale.ToString("F3")} localEuler={c.localEulerAngles.ToString("F1")} " +
|
||||
$"worldEuler={c.rotation.eulerAngles.ToString("F1")} | 本体 scale={transform.localScale.ToString("F3")} " +
|
||||
$"forwordXYZ=[{forwordXYZ}] isMove={isMove}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"[Boss翻转排查] OnEnable guid={guid} 无child0! 本体localScale={transform.localScale.ToString("F3")} forwordXYZ=[{forwordXYZ}]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void Init(string pathId, float time, bool isyuzhen = false, string yzID = "")
|
||||
{
|
||||
base.Init(pathId, time, isyuzhen, yzID);
|
||||
|
||||
// ⭐ Init 后状态:forwordXYZ 配了轴 → IsRouteFlipBoss=false → 本体不做奇偶翻转,
|
||||
// 朝向完全由 ApplyFacingDirection 的六分支每帧驱动 child0;
|
||||
// forwordXYZ 为空 → Boss走默认分支return,child0 保持预制体姿态
|
||||
var c = DbgChild;
|
||||
Debug.Log($"[Boss翻转排查] Init guid={guid} pathId={pathId} isyuzhen={isyuzhen} yzID={yzID} " +
|
||||
$"forwordXYZ=[{forwordXYZ}] isMove={isMove} child0={(c != null ? $"localEuler={c.localEulerAngles.ToString("F1")} localScale={c.localScale.ToString("F3")}" : "无")} " +
|
||||
$"本体scale={transform.localScale.ToString("F3")}");
|
||||
}
|
||||
|
||||
public void TimeDieFish()
|
||||
{
|
||||
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
|
||||
@@ -50,6 +89,10 @@ public class DefaultBossControl : MonsterControl_BossBase
|
||||
}
|
||||
public override void OnDisable()
|
||||
{
|
||||
// ⭐ 回收状态:child0 离场时姿态(是否中途被翻转过可由游动期突变日志判断)
|
||||
var c = DbgChild;
|
||||
Debug.Log($"[Boss翻转排查] OnDisable guid={guid} child0={(c != null ? $"localEuler={c.localEulerAngles.ToString("F1")} localScale={c.localScale.ToString("F3")}" : "无")} " +
|
||||
$"路线={lastMoveLineId}");
|
||||
|
||||
//GetComponent<Animator>().enabled = false;
|
||||
if (currEffect_DieAward != null)
|
||||
@@ -57,8 +100,42 @@ public class DefaultBossControl : MonsterControl_BossBase
|
||||
}
|
||||
public override void OnMoveUpdata()
|
||||
{
|
||||
|
||||
base.OnMoveUpdata();
|
||||
|
||||
|
||||
// ⭐ 每帧检测 child0 突变(旋转的是child0不是本体):
|
||||
// - 单帧世界旋转跳变>90° = 翻转瞬间(候选来源:mirror180镜像切换/_rollSign符号切换/
|
||||
// heading跟随/其他外部代码),moveTime 可定位发生时刻
|
||||
var ch = DbgChild;
|
||||
if (ch != null)
|
||||
{
|
||||
if (!_dbgHasLast)
|
||||
{
|
||||
_dbgLastRot = ch.rotation;
|
||||
_dbgLastScale = ch.localScale;
|
||||
_dbgHasLast = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
float angleDelta = Quaternion.Angle(_dbgLastRot, ch.rotation);
|
||||
if (angleDelta > 90f)
|
||||
{
|
||||
Debug.Log($"[Boss翻转排查] ⚠️child0旋转单帧突变{angleDelta:F0}°! guid={guid} " +
|
||||
$"worldEuler {_dbgLastRot.eulerAngles.ToString("F1")}→{ch.rotation.eulerAngles.ToString("F1")} " +
|
||||
$"moveTime={moveTime:F2}s 路线={lastMoveLineId}");
|
||||
}
|
||||
if ((ch.localScale.x >= 0f) != (_dbgLastScale.x >= 0f) ||
|
||||
(ch.localScale.y >= 0f) != (_dbgLastScale.y >= 0f) ||
|
||||
(ch.localScale.z >= 0f) != (_dbgLastScale.z >= 0f))
|
||||
{
|
||||
Debug.Log($"[Boss翻转排查] ⚠️child0缩放符号翻转! guid={guid} {_dbgLastScale.ToString("F3")}→{ch.localScale.ToString("F3")} " +
|
||||
$"moveTime={moveTime:F2}s 路线={lastMoveLineId}");
|
||||
}
|
||||
_dbgLastRot = ch.rotation;
|
||||
_dbgLastScale = ch.localScale;
|
||||
}
|
||||
}
|
||||
|
||||
if (moveTime >= monsterData.moveLine.moveTime)
|
||||
{
|
||||
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
|
||||
|
||||
Reference in New Issue
Block a user