hi all,
i am making an ai script for my monsters,
in my script i have a attack routine, and a patroling routine . so it works like this, if player is in range , it attacks the player and if player is not in range it goes to do patroll its area, the problem is that my patroling is not working and i dont know whats wrong, it attacks the player just fine and chases as well but when i am out of the monsters range it does not patrol and when the game starts even though i am out of its range it doesnot patrol either. here is the code
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class EnemyAI : MonoBehaviour
{
public Transform target;
public int moveSpeed;
public int rotationSpeed;
public int maxDistance;
public int minDistance;
public List<Transform> targets;
public Transform selectedTarget;
bool alive = true;
private Transform myTransform;
int random;
//private Transform myTransform;
void Awake () {
myTransform = transform;
}
// Use this for initialization
void Start ()
{
GameObject go = GameObject.FindGameObjectWithTag("Player");
target = go.transform;
maxDistance = 2;
minDistance = 30;
///////////////////////////////////waypoint stuff/////////////////////////////////////////
targets =new List<Transform>();
selectedTarget = null;
myTransform = transform;
AddAllWayPoints();
}
// Update is called once per frame
void Update ()
{
if(CanSeeEnemy() == false)
{ Debug.Log(" I can not see the target");
TargetWaypoint();}
else if ( CanSeeEnemy() == true)
{ Debug.Log (" I am presuiting the target");
Debug.DrawLine(target.position, myTransform.position,Color.red);
LookAtTarget();
Presuit();
if (Vector3.Distance(target.position, myTransform.position) < maxDistance)
AttackTarget();
}
}
///////////////////////////////////////////////////////functions start here///////////////////////////////////////
private bool CanSeeEnemy()
{if(Vector3.Distance(target.position, myTransform.position) > maxDistance Vector3.Distance(target.position, myTransform.position) < minDistance)
return true;
else return false;
}
private void LookAtTarget()
{
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed *Time.deltaTime);
}
private void Presuit()
{
myTransform.position += myTransform.forward * moveSpeed *Time.deltaTime;
animation.CrossFade("run");
}
private void AttackTarget()
{ random = Random.Range( 1,4);
Debug.Log (" i am attacking the target");
if( random ==3)
{
animation.CrossFade("attack01");
}
else if ( random ==2) //this needs patching
{
animation.CrossFade("spattack01");
}
else
{
animation.CrossFade("spattack02");
}
}
////////////////////death routine////////////////////////////////////////////////////////
private void Death()
{
animation.CrossFade("death");
}
///////////////////////////////////// way point stuff starts here ///////////////////////////////////////
public void AddAllWayPoints()
{
GameObject[] go = GameObject.FindGameObjectsWithTag("Waypoint");
foreach(GameObject Waypoint in go)
AddTarget(Waypoint.transform);
}
public void AddTarget(Transform Waypoint)
{
targets.Add(Waypoint);
}
private void SortTargetsByDistance()
{
targets.Sort(delegate(Transform t1, Transform t2)
{
return (Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position)));
});
}
private void LookAtWaypoint( Transform w)
{
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(w.position - myTransform.position),rotationSpeed *Time.deltaTime);
Debug.Log("the way point" + w);
}
private void RunTowardsNextWaypoint( Transform w)
{
//if(Vector3.Distance(w.position, myTransform.position) > maxDistance Vector3.Distance(w.position, myTransform.position) < minDistance)
if(Vector3.Distance(w.position, myTransform.position)> 1)
{myTransform.position += myTransform.forward * moveSpeed *Time.deltaTime;
//Vector3.MoveTowards (targets );
//myTransform.Translate (targets);
animation.CrossFade("run");
Debug.Log ("i am attempting to run but am failing");
}
}
private void TargetWaypoint()
{
if(targets.Count == 0 )
AddAllWayPoints();
if(targets.Count > 0) {
if(selectedTarget ==null)
{
SortTargetsByDistance();
selectedTarget = targets[0];
RunTowardsNextWaypoint(selectedTarget);
Debug.Log (" I have reached my waypoint");
animation.CrossFade("idle");
}
else
{
int index = targets.IndexOf(selectedTarget);
if (index < targets .Count -1)
{
index ++;
}
else
{
index = 0;
}
selectedTarget = targets[index];
Debug.Log (" I dont know what to do at waypoint");
}
}
}
}
any hlep is good