Untitled
horrible NPCunknown
csharp
4 years ago
2.2 kB
9
Indexable
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { public LayerMask blockLayer; public float dist = 1; private Vector2[] moveDirections = { Vector2.left, Vector2.up, Vector2.right, Vector2.down }; public List<Vector2> freeSpaces = new List<Vector2>(); private Grid grid; private void Start() { grid = GameObject.FindObjectOfType<Grid>(); Invoke("checkFreeSpaces", 1.0f); } void checkFreeSpaces() { for(int i = 0; i < 4; i++) { RaycastHit2D detectDirection = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y), moveDirections[i], 0.75f, blockLayer); if(!detectDirection) { freeSpaces.Add(moveDirections[i]); } } if(freeSpaces.Count > 1) { StartCoroutine(moveToPosition(new Vector2(transform.position.x, transform.position.y) + freeSpaces[Random.Range(0, freeSpaces.Count)] * 1.0f)); return; } else if (freeSpaces.Count == 1) { StartCoroutine(moveToPosition(new Vector2(transform.position.x, transform.position.y) + freeSpaces[0] * 1.0f)); return; } else { print("No space to move into"); } } IEnumerator moveToPosition(Vector2 newPosition) { Vector2 startPosition = new Vector2(transform.position.x, transform.position.y); float startTime = Time.time; float journeyLength = Vector2.Distance(startPosition, newPosition); while(dist > 0) { dist = Vector2.Distance(new Vector2(transform.position.x, transform.position.y), newPosition); float distCovered = (Time.time - startTime) * 1; float fractionOfJourney = distCovered / journeyLength; transform.position = Vector2.Lerp(startPosition, newPosition, fractionOfJourney); yield return null; } freeSpaces.Clear(); dist = 1; checkFreeSpaces(); } }
Editor is loading...