- Home /
why tansform.Translate is not working?
So im trying to make an enemy AI that when im close to him enough it will rotate and then follow me, the rotation is working but he is not following me. Here is the code:
void Update () {
if (Vector3.Distance (player.position, this.transform.position) < 10) {
Vector3 direction = player.position - this.transform.position;
direction.y = 0;
this.transform.rotation = Quaternion.Slerp (this.transform.rotation, Quaternion.LookRotation (direction), speed * Time.deltaTime);
anim.SetBool ("is_idle", false);
if (direction.magnitude > 5) {
this.transform.Translate (0, 0, 0.05f);
anim.SetBool ("is_running", true);
anim.SetBool ("is_attacking", false);
} else {
anim.SetBool ("is_attacking", true);
anim.SetBool ("is_running", false);
}
} else {
anim.SetBool ("is_idle", true);
anim.SetBool ("is_running", false);
anim.SetBool ("is_attacking", false);
}
}
First, is the enemy moving at all? Second, how are away from the enemy are you when testing? You only translate when your x-z distance is greater than five units, so if you're above or below the enemy, it should just be running its attacking animation ins$$anonymous$$d of moving.
Answer by toddisarockstar · Mar 17, 2017 at 02:18 AM
GameObject player;
public float tolerance;
public Vector3 v;
public Vector3 v2;
float dist;
// Use this for initialization
void Start () {
player = GameObject.Find ("player");
if (tolerance == 0) {tolerance = 10;}//<--change rotation tollerance here
}
// Update is called once per frame
void Update () {
v2 = transform.forward;
dist = Vector3.Distance (transform.position, player.transform.position);
if (dist < 8f) {//<--change distance here
v = player.transform.position - transform.position ;
v=v.normalized;
transform.rotation = Quaternion.LookRotation (Vector3.RotateTowards (transform.forward, v, 2 * Time.deltaTime, 0.0F));
// you need to round off rotations cause there not going to match perfect
// adjust tolerance variable at the top to trigger movement accordingly
v=new Vector3(Mathf.Round(v.x*tolerance),Mathf.Round(v.y*tolerance),Mathf.Round(v.z*tolerance));
v2=new Vector3(Mathf.Round(transform.forward.x*tolerance),Mathf.Round(transform.forward.y*tolerance),Mathf.Round(transform.forward.z*tolerance));
if(v==v2){transform.position+=transform.forward*1*Time.deltaTime*3;}
}
}
Your answer
Follow this Question
Related Questions
Unloading Broken Assembly | How to solve this !? 2 Answers
How to make sure than one script affect the player of the specific client, and not the other 2 Answers
The spaceship acceleration script is good ? And how to use it with engine ? 0 Answers
How to tell an operand "Once" or "Started to" 3 Answers
[Newbie] Particle System not playing, C# (unity 5.5) 3 Answers