Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Enemy : MonoBehaviour
- {
- public float visionRadius;
- public float attackRadius;
- public float speed;
- GameObject player;
- Vector3 initialPosition;
- Vector3 target;
- Animator anim;
- Rigidbody2D rb2d;
- private void Start() {
- player = GameObject.FindGameObjectWithTag("Player");
- initialPosition = transform.position;
- target = initialPosition;
- anim = GetComponent<Animator>();
- rb2d = GetComponent<Rigidbody2D>();
- }
- private void Update() {
- RaycastHit2D hit = Physics2D.Raycast(transform.position, player.transform.position - transform.position, visionRadius, 1 << LayerMask.NameToLayer("Default"));
- Vector3 forward = transform.TransformDirection(player.transform.position - transform.position);
- Debug.DrawRay(transform.position, forward, Color.red);
- if (hit.collider != null) {
- if (hit.collider.tag == "Player") {
- target = player.transform.position;
- }
- }
- float distance = Vector3.Distance(target, transform.position);
- Vector3 dir = (target - transform.position).normalized;
- if (target != initialPosition && distance < attackRadius) {
- anim.SetFloat("movX", dir.x);
- anim.SetFloat("movY", dir.y);
- anim.Play("Enemy_Walk");
- anim.speed = 0;
- } else if (target != initialPosition && distance < visionRadius && distance > attackRadius) {
- rb2d.MovePosition(transform.position + dir * speed * Time.deltaTime);
- anim.speed = 1;
- anim.SetFloat("movX", dir.x);
- anim.SetFloat("movY", dir.y);
- anim.SetBool("walking", true);
- } else if (distance > visionRadius) {
- target = initialPosition;
- }
- if (target == initialPosition && distance < 0.02f) {
- transform.position = initialPosition;
- anim.SetBool("walking", false);
- }
- Debug.DrawLine(transform.position, target, Color.green);
- }
- private void OnDrawGizmosSelected() {
- Gizmos.color = Color.yellow;
- Gizmos.DrawWireSphere(transform.position, visionRadius);
- Gizmos.DrawWireSphere(transform.position, attackRadius);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement