- Home /
Question by
paradoxing · Feb 22, 2017 at 09:16 AM ·
unity 5rotation
How do you get an object to stop moving when i rotate
Hi I'm trying to make an AI for a tank game and i can't figure out how to make it turn.. When i set the rotation and try to slerp it, it seems like it only do some of the turn befor moving again
public Transform player;
public float playerdistance;
public float followdistance = 150f;
public float roatationdamping = 2f;
public float speed = 15f;
public float wallcheckdist = 10f;
public LayerMask obstacles;
private Vector3 movedir;
private bool ismove;
private Vector3 ismoverotold;
// Use this for initialization
void Start ()
{
ismove = true;
ismoverotold = transform.rotation.eulerAngles;
}
// Update is called once per frame
void Update ()
{
playerdistance = Vector3.Distance(player.position, transform.position);
if (playerdistance < followdistance && playerdistance > 1f)
{
// lookAtPlayer();
sogoodshoot();
}
//else
{
turn();
if (ismoverotold.y > transform.rotation.eulerAngles.y-2 && ismoverotold.y <transform.rotation.eulerAngles.y+2)
{
move();
}
}
}
void lookAtPlayer()
{
Quaternion rotation = Quaternion.LookRotation(player.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime*roatationdamping);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
ismoverotold = rotation.eulerAngles;
}
void sogoodshoot()
{
}
void turn()
{
if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y, transform.position.z+2), transform.forward, wallcheckdist, obstacles))
{
if (ismove)
{
ismove = false;
movedir = choosedir();
Debug.Log("direction choosen");
}
}
if(!ismove)
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(movedir.x, movedir.y, movedir.z),
Time.deltaTime * roatationdamping);
ismoverotold = movedir;
}
}
void move()
{
if (!ismove)
{
Debug.Log("moving");
ismove = true;
}
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
Vector3 choosedir()
{
System.Random ran = new System.Random();
int i = ran.Next(90, 180);
Vector3 temp = new Vector3();
temp.x = transform.rotation.x;
temp.z = transform.rotation.z;
temp.y = transform.rotation.y + i;
return temp;
}
}
Comment
Your answer
Follow this Question
Related Questions
How can I rotate my gameobject around z-axis correctly? 0 Answers
Syncing Position and Rotation data in ECS tests? 0 Answers
How can I rotate my player with a Joystick? 0 Answers
Unity Asset Prefab Bug ThirdPersonController (left rotating bug / Snapping forward Always) 3 Answers
Rigidbody.MovePosition not working correctly in unity 2017 and higher 1 Answer