Untitled
unknown
plain_text
3 years ago
5.2 kB
18
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...