1
This commit is contained in:
@@ -159,6 +159,32 @@ public class MonsterContral : MonoBehaviour
|
||||
/// <summary>鱼类型枚举(缓存,避免反复类型转换)</summary>
|
||||
public FishTypeEnum fishenum;
|
||||
|
||||
/// <summary>
|
||||
/// 是否为"按路线奇偶翻转X轴朝向"的Boss(Boss本体或BossBase子类,且未配置forwordXYZ自定义朝向轴)。
|
||||
/// 这类Boss不随路线切线旋转,朝向只由路线方向决定:
|
||||
/// 路线单数=左→右(X保持预制体正向),路线双数=右→左(X取负镜像)。
|
||||
/// </summary>
|
||||
protected bool IsRouteFlipBoss =>
|
||||
(fishenum == FishTypeEnum.Boss鱼 || this is MonsterControl_BossBase)
|
||||
&& string.IsNullOrEmpty(forwordXYZ);
|
||||
|
||||
/// <summary>
|
||||
/// ⭐ Boss路线朝向:按路线编号奇偶翻转X轴。
|
||||
/// 单数路线=左→右 → X保持预制体原始值不变
|
||||
/// 双数路线=右→左 → X取预制体原始值的负数(镜像)
|
||||
/// 以预制体原始X缩放为基准绝对赋值,对象池复用后重新Init不会叠加翻转。
|
||||
/// 路线编号非数字时不翻转(保持原朝向)。
|
||||
/// </summary>
|
||||
protected void ApplyBossRouteFlip(string pathId)
|
||||
{
|
||||
if (!int.TryParse(pathId, out int routeNum)) return;
|
||||
|
||||
float dirX = routeNum % 2 == 1 ? 1f : -1f;
|
||||
var scale = transform.localScale;
|
||||
scale.x = _prefabScaleX * dirX;
|
||||
transform.localScale = scale;
|
||||
}
|
||||
|
||||
/// <summary>路径已行进的时间(秒),用于贝塞尔曲线插值;可由外部预设偏移实现同步追帧。</summary>
|
||||
public float moveTime = 0f;
|
||||
|
||||
@@ -284,10 +310,15 @@ public class MonsterContral : MonoBehaviour
|
||||
// Unity 生命周期
|
||||
// ================================================================
|
||||
public bool baseMmove;
|
||||
|
||||
/// <summary>预制体原始X缩放(Awake缓存):Boss按路线奇偶翻转X轴的基准,池复用后重新Init不会叠加翻转</summary>
|
||||
private float _prefabScaleX = 1f;
|
||||
|
||||
public virtual void Awake()
|
||||
{
|
||||
LoadHitEffect();
|
||||
baseMmove = isMove;
|
||||
_prefabScaleX = transform.localScale.x;
|
||||
}
|
||||
/// <summary>
|
||||
/// 查找受击特效子物体并强制隐藏。
|
||||
@@ -456,6 +487,10 @@ public class MonsterContral : MonoBehaviour
|
||||
if (!isMove)
|
||||
transform.position = Vector3.zero;
|
||||
|
||||
// ⭐ Boss朝向:不随路线切线旋转,按路线编号奇偶翻转X轴(单数左→右保持正向/双数右→左翻转)
|
||||
if (isMove && IsRouteFlipBoss)
|
||||
ApplyBossRouteFlip(pathId);
|
||||
|
||||
// ⭐ 创建视频启动逻辑由子类负责:
|
||||
// - MonsterControl_BossBase 在自己 Init 里启动 createVideo
|
||||
// - 普通鱼走父类 Init,但普通鱼一般不配 createVideo
|
||||
@@ -724,6 +759,11 @@ public class MonsterContral : MonoBehaviour
|
||||
// 处理未指定朝向轴的情况(默认行为)
|
||||
if (_facingAxis == FacingAxis.None)
|
||||
{
|
||||
// ⭐ Boss不随路线切线旋转(重构前旧逻辑Boss鱼本来就不参与朝向):
|
||||
// 未配置正方向(forwordXYZ)的Boss,朝向由 ApplyBossRouteFlip 按路线奇偶翻转X轴决定;
|
||||
// 配置了正方向的Boss走下方轴对齐逻辑,保持原有机制不变
|
||||
if (IsRouteFlipBoss) return;
|
||||
|
||||
if (!is3D)
|
||||
{
|
||||
float angle = Mathf.Atan2(toNext.y, toNext.x) * Mathf.Rad2Deg;
|
||||
|
||||
@@ -130,6 +130,11 @@ public class MonsterControl_BossBase : MonsterContral
|
||||
// 避免 UpdateYZMovement 里 _yzPrefix 为空导致鱼阵 Boss 不移动
|
||||
SetYzPrefix(yzID);
|
||||
|
||||
// ⭐ Boss朝向:不随路线切线旋转,按路线编号奇偶翻转X轴
|
||||
// (单数路线=左→右保持预制体正向,双数路线=右→左翻转X轴为负)
|
||||
if (isMove && IsRouteFlipBoss)
|
||||
ApplyBossRouteFlip(pathId);
|
||||
|
||||
// ⭐ 创建视频处理:配置了 createVideoClip 时通过 GameMainPanel 的播放器播放
|
||||
// 播放期间 OnMoveUpdata 会跳过移动,视频结束后才开始走路线
|
||||
_createVideoDuration = 0f;
|
||||
|
||||
Reference in New Issue
Block a user