Advertisement
GuerreroCraft61

Untitled

Apr 3rd, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.37 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Enemy : MonoBehaviour
  6. {
  7.  
  8.     public float visionRadius;
  9.     public float attackRadius;
  10.     public float speed;
  11.  
  12.     GameObject player;
  13.  
  14.     Vector3 initialPosition;
  15.     Vector3 target;
  16.  
  17.     Animator anim;
  18.     Rigidbody2D rb2d;
  19.  
  20.     private void Start() {
  21.         player = GameObject.FindGameObjectWithTag("Player");
  22.  
  23.         initialPosition = transform.position;
  24.         target = initialPosition;
  25.  
  26.         anim = GetComponent<Animator>();
  27.         rb2d = GetComponent<Rigidbody2D>();
  28.     }
  29.  
  30.     private void Update() {
  31.  
  32.         RaycastHit2D hit = Physics2D.Raycast(transform.position, player.transform.position - transform.position, visionRadius, 1 << LayerMask.NameToLayer("Default"));
  33.  
  34.         Vector3 forward = transform.TransformDirection(player.transform.position - transform.position);
  35.         Debug.DrawRay(transform.position, forward, Color.red);
  36.  
  37.         if (hit.collider != null) {
  38.             if (hit.collider.tag == "Player") {
  39.                 target = player.transform.position;
  40.             }
  41.         }
  42.  
  43.         float distance = Vector3.Distance(target, transform.position);
  44.         Vector3 dir = (target - transform.position).normalized;
  45.  
  46.         if (target != initialPosition && distance < attackRadius) {
  47.             anim.SetFloat("movX", dir.x);
  48.             anim.SetFloat("movY", dir.y);
  49.             anim.Play("Enemy_Walk");
  50.             anim.speed = 0;
  51.         } else if (target != initialPosition && distance < visionRadius && distance > attackRadius) {
  52.             rb2d.MovePosition(transform.position + dir * speed * Time.deltaTime);
  53.             anim.speed = 1;
  54.             anim.SetFloat("movX", dir.x);
  55.             anim.SetFloat("movY", dir.y);
  56.             anim.SetBool("walking", true);
  57.         } else if (distance > visionRadius) {
  58.             target = initialPosition;
  59.         }
  60.  
  61.         if (target == initialPosition && distance < 0.02f) {
  62.             transform.position = initialPosition;
  63.             anim.SetBool("walking", false);
  64.         }
  65.  
  66.         Debug.DrawLine(transform.position, target, Color.green);
  67.     }
  68.  
  69.     private void OnDrawGizmosSelected() {
  70.         Gizmos.color = Color.yellow;
  71.         Gizmos.DrawWireSphere(transform.position, visionRadius);
  72.         Gizmos.DrawWireSphere(transform.position, attackRadius);
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement