- Home /
JS Enemy Angle Rotation Follow
Hi all. I'm making a 2d game, and trying to get an enemy to look at the player constantly. The catch, is that my 2d game is not a platformer, but an overhead shooter where everything lies on the x,y plane. I have a script set up right now which effectivly follows and looks at the player, but when it rotates, it does it on the wrong axis. I've tried everything! Thanks for you help in advance, -Alec Code-
public var moveSpeed = 3; //move speed
public var rotationSpeed = 3; //speed of turning
target = GameObject.FindWithTag("player").transform; //target the player
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
Answer by robertbu · Mar 05, 2014 at 04:42 AM
This issue has come up a lot since Unity released their 2D stuff, and a number of usable solutions have been posted. The 'right' solution will depend on the natural orientation of your 'enemy'. If the 'enemy' is a Sprite or a Quad, this code should work:
var dir = target.position - myTransform.position;
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
var rotation = Quaternion.AngleAxis(angle, Vector3.forward);
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, rotation, rotationSpeed * Time.deltaTime);
Note this code assumes that the 'forward' side of the object is on the right. If the forward side is currently another direction (up for example), you can either edit the texture in Photoshop, or you can adjust the angle before passing it to AngleAxis (i.e. subtract 90 for up).
Your answer
Follow this Question
Related Questions
Doesn't Add Rotation Over 180 2 Answers
How to make Enemy shoot at Player Top Down 1 Answer
2D AI, Aim at player - even when jumping? 1 Answer
AI fighting game 0 Answers