This commit is contained in:
2026-06-13 22:34:43 +08:00
parent 3d4d34f07d
commit 6b1783d339
13 changed files with 249 additions and 81 deletions
@@ -32,10 +32,10 @@ public class MonsterContral : MonoBehaviour
// ----------------------------------------------------------------
/// <summary>鱼阵路线 key 前缀</summary>
private const string YzMoveLineName = "鱼阵";
private const string YzMoveLineName = "鱼阵";
/// <summary>普通鱼路线 key 前缀</summary>
private const string NormalMoveLineName = "曲线";
private const string NormalMoveLineName = "曲线";
// ----------------------------------------------------------------
// 公开字段(Inspector 可见 / 外部赋值)
@@ -120,6 +120,8 @@ public class MonsterContral : MonoBehaviour
public bool IsAlive => gameObject.activeInHierarchy;
public int rotationPY = 60;
// ================================================================
// Unity 生命周期
@@ -128,7 +130,7 @@ public class MonsterContral : MonoBehaviour
public virtual void Awake()
{
LoadHitEffect();
}
public async void LoadHitEffect()
{
@@ -142,10 +144,10 @@ public class MonsterContral : MonoBehaviour
}
public virtual void OnEnable()
{
fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType;
fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType;
uirootRect = UIManager.Instance.uiRoot.GetComponent<RectTransform>();
mainCamera = Camera.main;
moveTime=0f;
moveTime = 0f;
InitAnimList();
ChangeState(CharacterStateType.move);
}
@@ -154,7 +156,7 @@ public class MonsterContral : MonoBehaviour
{
OnUpdate(currState);
}
/// <summary>
/// 销毁时自动从 CreateFishManager 的三个字典中移除自身,避免野指针。
/// </summary>
@@ -162,7 +164,7 @@ public class MonsterContral : MonoBehaviour
{
if (CreateFishManager.Instance == null) return;
}
// ================================================================
@@ -186,8 +188,8 @@ public class MonsterContral : MonoBehaviour
{
// 根据是否为鱼阵选择路线 key
string lineKey = isyuzhen
? YzMoveLineName + pathId
: NormalMoveLineName + pathId;
? YzMoveLineName + pathId
: NormalMoveLineName + pathId;
if (!MonsterMoveLine.dic_BezierCurveDatas.TryGetValue(lineKey, out var bezierData))
{
@@ -196,7 +198,7 @@ public class MonsterContral : MonoBehaviour
}
monsterData.moveLine.Init(bezierData, time);
isyz = isyuzhen;
isyz = isyuzhen;
this.yzID = yzID;
// 鱼阵特殊处理:700 系扇形阵根据起点 y 值翻转朝向
@@ -213,11 +215,11 @@ public class MonsterContral : MonoBehaviour
fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType;
// 路径结束后自动销毁
StartCoroutine(yanchi(gameObject,time, isyuzhen));
StartCoroutine(yanchi(gameObject, time, isyuzhen));
}
public IEnumerator yanchi(GameObject obj,float time, bool isyuzhen)
public IEnumerator yanchi(GameObject obj, float time, bool isyuzhen)
{
yield return new WaitForSeconds(time);
CreateFishManager.Instance.Id_DieFish_NotFX(guid);
@@ -238,8 +240,8 @@ public class MonsterContral : MonoBehaviour
{
switch (stateType)
{
case CharacterStateType.move: OnMoveEnter(); break;
case CharacterStateType.idle: break;
case CharacterStateType.move: OnMoveEnter(); break;
case CharacterStateType.idle: break;
}
}
@@ -249,8 +251,8 @@ public class MonsterContral : MonoBehaviour
switch (stateType)
{
case CharacterStateType.move: OnMoveUpdata(); break;
case CharacterStateType.idle: break;
case CharacterStateType.move: OnMoveUpdata(); break;
case CharacterStateType.idle: break;
}
}
@@ -299,32 +301,32 @@ public class MonsterContral : MonoBehaviour
// 700 / 701:直线向前移动(沿 up 方向)
case "700":
case "701":
{
var startWorld = CoordinateTransformation.CanvasToWorld(
monsterData.moveLine.bezierCurveData.start, uirootRect, mainCamera);
{
var startWorld = CoordinateTransformation.CanvasToWorld(
monsterData.moveLine.bezierCurveData.start, uirootRect, mainCamera);
// 700:根据起点 y 值决定正方向;701:固定向上
bool goUp = (prefix == "701") || (monsterData.moveLine.bezierCurveData.start.y > 0);
float dir = goUp ? -1f : 1f;
// 700:根据起点 y 值决定正方向;701:固定向上
bool goUp = (prefix == "701") || (monsterData.moveLine.bezierCurveData.start.y > 0);
float dir = goUp ? -1f : 1f;
Vector2 pos = startWorld + (Vector3)(dir * transform.up * moveTime
* monsterData.moveLine.moveTime);
transform.position = pos;
break;
}
Vector2 pos = startWorld + (Vector3)(dir * transform.up * moveTime
* monsterData.moveLine.moveTime);
transform.position = pos;
break;
}
// 702 / 710:贝塞尔曲线路径
case "702":
case "7007":
case "710": // 顺序阵:每条路径逐一延迟生成
case "704":
{
Vector2 next = monsterData.moveLine.GetBezierPointJob(moveTime);
if (fishenum != FishTypeEnum.Boss鱼)
ApplyFacingDirection(next);
transform.position = next;
break;
}
{
Vector2 next = monsterData.moveLine.GetBezierPointJob(moveTime);
if (fishenum != FishTypeEnum.Boss鱼)
ApplyFacingDirection(next);
transform.position = next;
break;
}
default:
break;
@@ -337,11 +339,11 @@ public class MonsterContral : MonoBehaviour
Vector2 next = monsterData.moveLine.GetBezierPointJob(moveTime);
//if (fishenum != FishTypeEnum.Boss鱼)
ApplyFacingDirection(next);
ApplyFacingDirection(next);
transform.position = next;
}
public bool isRotate=true;
public bool isRotate = true;
/// <summary>
/// 根据 forwordXYZ 字段将物体朝向目标点方向。
/// 为空时 2D 鱼用 up,3D 鱼用 forward。
@@ -374,16 +376,65 @@ public class MonsterContral : MonoBehaviour
{
Transform child = transform.GetChild(0);
Vector3 localPos = Vector3.zero;
//// 父物体朝向
switch (forwordXYZ)
{
case "X": transform.GetChild(0).right = toNext.normalized; break;
case "-X": transform.GetChild(0).right = -toNext.normalized; break;
case "Y": transform.GetChild(0).up = toNext.normalized; break;
case "-Y": transform.GetChild(0).up = -toNext.normalized; break;
case "Z": transform.GetChild(0).forward = toNext.normalized; break;
case "-Z": transform.GetChild(0).forward = -toNext.normalized; break;
case "X":
{
transform.GetChild(0).right = toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.x = rotationPY;
transform.GetChild(0).eulerAngles = vv;
}
break;
case "-X":
{
transform.GetChild(0).right = -toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.x = -rotationPY;
transform.GetChild(0).eulerAngles = vv;
}
break;
case "Y":
{
transform.GetChild(0).up = toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.y = rotationPY;
transform.GetChild(0).eulerAngles = vv;
}
break;
case "-Y":
{
transform.GetChild(0).up = -toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.y = -rotationPY;
transform.GetChild(0).eulerAngles = vv;
}
break;
case "Z":
{
transform.GetChild(0).forward = toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.z = rotationPY * (vv.y < 180 ? -1 : 1);
transform.GetChild(0).eulerAngles = vv;
}
break;
case "-Z":
{
transform.GetChild(0).forward = -toNext.normalized;
var vv = transform.GetChild(0).eulerAngles;
vv.z = -rotationPY * (vv.y < 180 ? -1 : 1);
transform.GetChild(0).eulerAngles = vv;
}
break;
}
//// 子物体深度偏移:方向正 → 偏移正,方向负 → 偏移负
@@ -412,7 +463,7 @@ public class MonsterContral : MonoBehaviour
case "-Z": transform.forward = -toNext.normalized; break;
}
}
}
}
public bool ischild0 = false;
public int depthOffset;
// ================================================================