Untitled
unknown
plain_text
2 years ago
5.2 kB
17
Indexable
using System; using System.Collections; using System.Collections.Generic; using Unity.Mathematics; using UnityEditor; using UnityEngine; public class Enemy : MonoBehaviour { [SerializeField] private Rigidbody2D _rigidbody2D; [SerializeField] private float m_Seepd; [SerializeField] private Animator m_Animator; [SerializeField] private Transform m_Homego; [SerializeField] private float Maxrange; [SerializeField] private float Minrange; private Transform target; private bool m_Gethit; private int m_ChangeParamHash; private int m_StateParamHash; private Vector3 m_StartPosition; private State m_CurrentState; private int m_Direction = 1; public enum State { idie, run, die, die2, attack1, attack2, perry, } public void GoHomeEnemy() { transform.position = Vector3.MoveTowards(transform.position, m_Homego.transform.position, m_Seepd * Time.deltaTime); var dir = m_Homego.position - transform.position; transform.localScale = new Vector3(-dir.x >= 0 ? (float)-4.5 : (float)4.5, (float)4.5, 1); if(Vector3.Distance(transform.position, m_Homego.position) == 0) { SetState(State.idie); } } public void FollowPlayer() { transform.position = Vector3.MoveTowards(transform.position, target.transform.position, m_Seepd * Time.deltaTime); var dir = target.position - transform.position ; transform.localScale = new Vector3(-dir.x >= 0 ? (float)-4.5 : (float)4.5, (float)4.5, 1); SetState(State.run); } void Start() { m_ChangeParamHash = Animator.StringToHash("Changer"); m_StateParamHash = Animator.StringToHash("State"); m_StartPosition = transform.position; SetState(State.idie); target = FindObjectOfType<Player>().transform; StartCoroutine(UpdateAI()); } private void Update() { if (Vector3.Distance(target.position, transform.position) <= Maxrange && Vector3.Distance(target.position, transform.position) >= Minrange) { FollowPlayer(); } else if(Vector3.Distance(target.position, transform.position) >= Maxrange) { GoHomeEnemy(); } } private IEnumerator UpdateAI() { while (true) { if (m_CurrentState == State.die) { yield return new WaitForSeconds(0.5f); SetState(State.run); m_Gethit = false; Debug.Log("fdjfjdfdfdf"); } yield return null; } } private void OnTriggerEnter2D(Collider2D col) { if (m_Gethit) { return; } if (col.CompareTag("AttackPlayer1")) { SetState(State.die); m_Gethit = true; } } private void SetState(State state) { m_CurrentState = state; switch (state) { case State.idie: EnemyIdie(); break; case State.run: EnemyRun(); break; case State.die: EnemyDie(); break; case State.die2: EnemyDie2(); break; case State.perry: EnemyPerry(); break; case State.attack1: EnemyAttack1(); break; case State.attack2: EnemyAttack2(); break; } } [ContextMenu("idie")] private void EnemyIdie() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash, 7); } [ContextMenu("die1")] private void EnemyDie() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash, 6); } [ContextMenu("die2")] private void EnemyDie2() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash, 3); } [ContextMenu("attack1")] private void EnemyAttack1() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash,2 ); } [ContextMenu("attack2")] private void EnemyAttack2() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash,5 ); } [ContextMenu("run")] private void EnemyRun() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash,1 ); } [ContextMenu("perry")] private void EnemyPerry() { m_Animator.SetTrigger(m_ChangeParamHash); m_Animator.SetInteger(m_StateParamHash,4 ); } }
Editor is loading...