77 lines
2.2 KiB
C#
77 lines
2.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class Enemy : MonoBehaviour
|
|
{
|
|
public float moveSpeed = 0.1f;
|
|
public bool canSeePlayer = false;
|
|
public float distanceThreshold = 0.1f;
|
|
public float playerDistanceThreshold = 0.1f;
|
|
public float dodgeTime = 0.2f;
|
|
float dodgeTimer = 0;
|
|
public LayerMask linecastLayer;
|
|
private void Awake()
|
|
{
|
|
dodgeTimer = dodgeTime;
|
|
}
|
|
|
|
|
|
Color debugColor = Color.white;
|
|
|
|
void FixedUpdate()
|
|
{
|
|
if (GameManager.Player == null) { return; }
|
|
|
|
|
|
|
|
|
|
RaycastHit2D hit = Physics2D.Linecast(transform.position, GameManager.Player.position, linecastLayer);
|
|
if (hit.collider == null) {
|
|
canSeePlayer = true;
|
|
} else if (hit.collider.transform == GameManager.Player.transform)
|
|
{
|
|
canSeePlayer = true;
|
|
}
|
|
else if(hit.collider.tag == "Obstacle")
|
|
{
|
|
canSeePlayer = false;
|
|
float distanceToBarrier = Vector2.Distance(transform.position, hit.point);
|
|
if (distanceToBarrier < distanceThreshold)
|
|
{
|
|
dodgeTimer = 0;
|
|
}
|
|
Debug.DrawLine(transform.position, hit.point, debugColor);
|
|
}
|
|
|
|
if (canSeePlayer)
|
|
{
|
|
if (Vector2.Distance(GameManager.Player.position, transform.position) < playerDistanceThreshold)
|
|
{
|
|
GameManager.GameOver();
|
|
return;
|
|
}
|
|
}
|
|
|
|
Vector3 direction = (GameManager.Player.position - new Vector3(0,0.5f,0) - transform.position).normalized;
|
|
float rot_z = Mathf.Atan2(direction.y,direction.x) * Mathf.Rad2Deg;
|
|
transform.rotation = Quaternion.Euler(0,0,rot_z+180);
|
|
if (dodgeTimer < dodgeTime)
|
|
{
|
|
dodgeTimer += Time.deltaTime;
|
|
|
|
if (dodgeTimer > dodgeTime/100f || true)
|
|
{
|
|
debugColor = Color.red;
|
|
transform.Translate(new Vector3(-direction.x, direction.y) * moveSpeed * 1.2f, Space.World);
|
|
return;
|
|
}
|
|
}
|
|
|
|
transform.Translate(direction * moveSpeed, Space.World);
|
|
|
|
debugColor = Color.white;
|
|
|
|
}
|
|
}
|