Question by
Dylanpolis · Dec 16, 2016 at 01:46 PM ·
scripting beginner
How do i make it so i stay at a waypoint for x time before moving to the next?
using UnityEngine;
using System.Collections;
public class chase : MonoBehaviour {
public Transform player;
public Transform head;
Animator anim;
string state = "patrol";
public GameObject[] waypoints;
int currentWP = 0;
public float rotSpeed = 0.2f;
public float speed = 1.5f;
float accuracyWP = 5.0f;
// Use this for initialization
void Start ()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update ()
{
Vector3 direction = player.position - this.transform.position;
direction.y = 0;
float angle = Vector3.Angle(direction, head.up);
if(state == "patrol" && waypoints.Length > 0)
{
anim.SetBool("isIdle",false);
anim.SetBool("isWalking",true);
if(Vector3.Distance(waypoints[currentWP].transform.position, transform.position) < accuracyWP)
{
currentWP = Random.Range(0,waypoints.Length);
//currentWP++;
//if(currentWP >= waypoints.Length)
//{
// currentWP = 0;
//}
}
//rotate towards waypoint
direction = waypoints[currentWP].transform.position - transform.position;
this.transform.rotation = Quaternion.Slerp(transform.rotation,
Quaternion.LookRotation(direction), rotSpeed * Time.deltaTime);
this.transform.Translate(0, 0, Time.deltaTime * speed);
}
if(Vector3.Distance(player.position, this.transform.position) < 10 && (angle < 30 || state == "pursuing"))
{
state = "pursuing";
this.transform.rotation = Quaternion.Slerp(this.transform.rotation,
Quaternion.LookRotation(direction), rotSpeed * Time.deltaTime);
if(direction.magnitude > 5)
{
this.transform.Translate(0,0,Time.deltaTime * speed);
anim.SetBool("isWalking",true);
anim.SetBool("isAttacking",false);
}
else
{
anim.SetBool("isAttacking",true);
anim.SetBool("isWalking",false);
}
}
else
{
anim.SetBool("isWalking", true);
anim.SetBool("isAttacking", false);
state = "patrol";
}
}
}
Comment