1
This commit is contained in:
@@ -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;
|
||||
// ================================================================
|
||||
|
||||
Reference in New Issue
Block a user