- Home /
How can I create a follower Ai which is restricted on the Y Axis?
Hello, This is my first attempt at creating any Ai in unity and would like to make it simply follow me if I approach it. However, I cannot prevent the Ai from flying through the air to follow me as it is rotating to find my position. This is the code I am currently using.
var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var range : float=10f;
var range2 : float=10f;
var stop : float=0;
var myTransform : Transform; //current transform data of this enemy
function Awake()
{
myTransform = transform; //cache transform data for easy access/preformance
}
function Start()
{
target = GameObject.FindWithTag("Player").transform; //target the player
}
function Update () {
//rotate to look at the player
var distance = Vector3.Distance(myTransform.position, target.position);
if (distance<=range2 && distance>=range){
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position
- myTransform.position), rotationSpeed*Time.deltaTime);
}
else if(distance<=range && distance>stop){
//move towards the player
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position
- myTransform.position), rotationSpeed*Time.deltaTime);
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
else if (distance<=stop) {
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
Quaternion.LookRotation(target.position
- myTransform.position), rotationSpeed*Time.deltaTime);
}
}
If you know of any way I can prevent if from rotating on the Y - Axis while looking for the player please let me know.
Thanks in advance
One problem is the reassignment of transform.position to do your 'move' which ignores physics and colliders. Does your enemy unit have a rigidbody or a character controller/motor?
You could try this for look
Vector3 lookDir = (target.position - myTransform.position);
lookDir.y =0;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quarternion.LookRotation(lookDir), rotSpeed*Time...)
I do C# so you'll have to convert it I think it's just lookDir : Vector3 = (.....)
Thanks for the response but after implementing this many glitches still occur when the Ai gets close to the player. When it gets up close the Ai rotates and flies around the player while in the inspector it still says the y is 0. Any suggestions?