public class blueMonster : MonoBehaviour
{
[SerializeField] private float detect, speed, attackR, setTime;
private Vector3 enemy;
private Vector2 sta, end;
private Animator animator;
private RaycastHit2D hit;
private float mv, dis, noMove;
public MonsterState currentState;
private List k;
void Start()
{
currentState = MonsterState.Idle;
k = new List();
animator = GetComponent();
mv = -1f;
speed = 1.5f;
attackR = 1.5f;
setTime = 1f;
detect = transform.Find("detectRange").gameObject.GetComponent().radius;
dis = detect;
animator.SetFloat("moveX", mv);
StartCoroutine(waitIdle(setTime));
}
private IEnumerator waitIdle(float t)
{
yield return new WaitForSeconds(t);
currentState = MonsterState.walk;
animator.SetBool("moving", true);
}
void Update()
{
monsterBehavior();
}
void monsterBehavior()
{
if (dis <= attackR && currentState != MonsterState.attack)
{
animator.SetBool("moving", false);
StartCoroutine(AttackCo());
}
else if (currentState == MonsterState.track)
{
Vector2 direction = enemy - transform.position;
transform.position = Vector3.MoveTowards(transform.position, enemy, Time.deltaTime * speed); //移動
animator.SetFloat("moveX", direction.x);
animator.SetFloat("moveY", direction.y);
animator.SetBool("moving", true);
}
else if (currentState == MonsterState.walk)
{
transform.position += new Vector3(-(speed), 0, 0) * Time.deltaTime; //往前走
animator.SetFloat("moveX", mv);
animator.SetFloat("moveY", 0);
animator.SetBool("moving", true);
}
}
private IEnumerator AttackCo()
{
animator.SetBool("attacking", true);
currentState = MonsterState.attack;
yield return null;
animator.SetBool("attacking", false);
yield return new WaitForSeconds(1f);
currentState = MonsterState.track;
}
private void OnTriggerStay2D(Collider2D other)
{
if (other.CompareTag("red"))
{
if (k.Count == 0)
{
k.Add(other.gameObject);
}
else if (other.gameObject == k[0])
{
currentState = MonsterState.track;
enemy = other.transform.position;
dis = Vector3.Distance(transform.position, enemy); //兩座標之間的距離長度
}
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (other.CompareTag("red"))
{
if (k.Count > 0 && other.gameObject == k[0])
{
k.Remove(other.gameObject);
dis = detect;
currentState = MonsterState.walk;
}
}
}
}
![alt text][1]
Tell me good solutation,I really need to help.PLEASE~~~!!!
[1]: /storage/temp/185568-未命名.png
↧