Quantcast
Viewing all articles
Browse latest Browse all 1488

how to make enemy go around the other enemy to attack player,not just move,then keep push enemy.

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

Viewing all articles
Browse latest Browse all 1488

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>