|
|
@@ -1,15 +1,19 @@
|
|
|
using Sirenix.OdinInspector;
|
|
|
using UnityEngine;
|
|
|
+using System;
|
|
|
|
|
|
public class chargeDownward : MonoBehaviour
|
|
|
{
|
|
|
// 状态枚举
|
|
|
- private enum MovementState { Idle, Dashing, Breaking, Rising }
|
|
|
+ public enum MovementState { Idle,Finding, Dashing, Breaking, Rising }
|
|
|
private MovementState currentState = MovementState.Idle;
|
|
|
|
|
|
public Enemy owner;
|
|
|
private AttackController attackController;
|
|
|
private Rigidbody rb;
|
|
|
+ public SearchTrigger searchTrigger;
|
|
|
+ BeSearchTrigger cloest = null;
|
|
|
+ private float cloestX = 0;
|
|
|
|
|
|
[Header("移动参数")]
|
|
|
[LabelText("目标上升高度")]
|
|
|
@@ -19,6 +23,7 @@ public class chargeDownward : MonoBehaviour
|
|
|
public float upHeight = 4f;
|
|
|
|
|
|
[LabelText("冲刺速度")]
|
|
|
+ public float findSpeed = 1f;
|
|
|
public float dashSpeed = 1f;
|
|
|
public float riseSpeed = 1f;
|
|
|
|
|
|
@@ -31,6 +36,7 @@ public class chargeDownward : MonoBehaviour
|
|
|
|
|
|
[LabelText("能否冲刺")]
|
|
|
public bool canDash = true;
|
|
|
+ public bool isFind = true;
|
|
|
|
|
|
[LabelText("是否使用本地坐标")]
|
|
|
public bool useLocalSpace = true;
|
|
|
@@ -89,7 +95,11 @@ public class chargeDownward : MonoBehaviour
|
|
|
switch (currentState)
|
|
|
{
|
|
|
case MovementState.Idle:
|
|
|
- if (attackController.isAttackTriggerOn && canDash)
|
|
|
+ if (!attackController.isAttackTriggerOn && canDash && owner.state == CharacterState.Attack)
|
|
|
+ {
|
|
|
+ Finding(searchTrigger.transform.position.x);
|
|
|
+ }
|
|
|
+ else if (attackController.isAttackTriggerOn && canDash)
|
|
|
{
|
|
|
StartDash();
|
|
|
currentState = MovementState.Dashing;
|
|
|
@@ -203,6 +213,8 @@ public class chargeDownward : MonoBehaviour
|
|
|
owner.ChangeState(CharacterState.Idle);
|
|
|
foot.GetComponent<Foot>().trigGroundList.Clear();
|
|
|
foot.SetActive(true);
|
|
|
+ cloest = null;
|
|
|
+ isFind = true;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -224,6 +236,29 @@ public class chargeDownward : MonoBehaviour
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void Finding(float x)
|
|
|
+ {
|
|
|
+ if (cloest == null)
|
|
|
+ {
|
|
|
+ cloest = FindClosestTriggerByX(x);
|
|
|
+ if (cloest)
|
|
|
+ {
|
|
|
+ cloestX = cloest.transform.position.x;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (isFind && cloest)
|
|
|
+ {
|
|
|
+ float direction = Mathf.Sign(cloestX - x);
|
|
|
+ rb.velocity = Vector3.right * findSpeed * direction;
|
|
|
+ if (Mathf.Abs(cloestX - x)<0.1)
|
|
|
+ {
|
|
|
+ Debug.Log("寻找成功");
|
|
|
+ rb.velocity = Vector3.zero;
|
|
|
+ cloest = null;
|
|
|
+ isFind = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
public void StopAllMovements()
|
|
|
{
|
|
|
IsDashing = false;
|
|
|
@@ -247,4 +282,24 @@ public class chargeDownward : MonoBehaviour
|
|
|
public bool IsRising { get; private set; }
|
|
|
[ShowInInspector, ReadOnly]
|
|
|
private bool isBreaking;
|
|
|
+
|
|
|
+ public BeSearchTrigger FindClosestTriggerByX(float selfX)
|
|
|
+ {
|
|
|
+ BeSearchTrigger closestTrigger = null;
|
|
|
+ float minDistance = float.MaxValue;
|
|
|
+
|
|
|
+ foreach (var keyValuePair in searchTrigger.trigCharacterDic)
|
|
|
+ {
|
|
|
+ foreach (var trigger in keyValuePair.Value)
|
|
|
+ {
|
|
|
+ float distance = Math.Abs(trigger.transform.position.x - selfX);
|
|
|
+ if (distance < minDistance)
|
|
|
+ {
|
|
|
+ minDistance = distance;
|
|
|
+ closestTrigger = trigger;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return closestTrigger;
|
|
|
+ }
|
|
|
}
|