- Home /
rotation value resets after I release the joystick, how to fix (2d)?
Im using this Joystick: https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631
I made a rotation script, that controls the rotation z value when you drag the joystick. My problem is, that after I release the joystick, the z value resets back to 0. I need that, that the z value stays and doesnt reset.
Heres my script:
void Update()
{
//Rotate
float angleA = Mathf.Atan2(joystick2.Horizontal, joystick2.Vertical) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, -angleA);
//Move
horizontalmove = joystick.Horizontal * speed;
verticalmove = joystick.Vertical * speed;
Vector3 move = new Vector3(horizontalmove, verticalmove);
rb.velocity = move;
//Shoot
if (joystick2.Horizontal > 0.5f || joystick2.Vertical > 0.5f || joystick2.Horizontal < -0.5f || joystick2.Vertical < -0.5f)
{
shooting = true;
}
else shooting = false;
}
void Shoot()
{
if (!shooting) return;
float angleA = Mathf.Atan2(joystick2.Horizontal, joystick2.Vertical) * Mathf.Rad2Deg;
Rigidbody2D clone;
clone = Instantiate(bullet, player.transform.position, transform.rotation = Quaternion.Euler(0f, 0f, -angleA)) as Rigidbody2D;
Vector3 directiontoshoot = joystick2.Direction;
clone.velocity = directiontoshoot * bulletspeed;
}
Answer by gamegart1 · Aug 13, 2020 at 06:23 AM
@Dracolyte Hey, i had the same problem, and finally have a solution, this is my code for rotate with the joystick with the problem
public void rotation(){
float horizontal = joystick1.Horizontal;
float vertical = joystick1.Vertical;
float angle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;
angle = flipRot ? -angle : angle;
gameObject.transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
I only add this to the code, when the stick is move do the same, but when is released the the stick value is 0, then save the last value of rotation to the actual rotation, for no reset rotation
if(joystick.Horizontal != 0 || joystick.Vertical != 0){
hor = joystick.Horizontal;
ver = joystick.Vertical;
}else{
hor += horizontal;
ver += vertical;
}
after that, this is the code
float hor, ver;
public void rotation(){
float horizontal = joystick.Horizontal;
float vertical = joystick.Vertical;
if(joystick.Horizontal != 0 || joystick.Vertical != 0){
hor = joystick.Horizontal;
ver = joystick.Vertical;
}else{
hor += horizontal;
ver += vertical;
}
angle = Mathf.Atan2(hor, ver) * Mathf.Rad2Deg;
angle = flipRot ? -angle : angle;
gameObject.transform.rotation = Quaternion.Euler(0, 0, angle);
}
I hope this work for you to, and srry for my bad english
Your answer
Follow this Question
Related Questions
Rotating game object using UI Joystick 0 Answers
2D mobile: Need my character to rotate Z axis towards touch position 0 Answers
How to control a 2d character in an top-down android game with the standard joystick? 1 Answer
How to smoothly rotate object in direction of analog joystick? 1 Answer
how to shoot with joystick 0 Answers