- Home /
Quaternion.AngleAxis with transform.up unexpected behavior...
Here's sample code that shows my problem:
using UnityEngine;
using System.Collections;
public class RotationAngleAxisCtrl : MonoBehaviour
{
public float _angleCurrent = 0.0f; // in degrees
public float _angleSpeed = 0.0f; // in degreees/sec
void Update()
{
Debug.DrawRay(this.transform.position, this.transform.up, Color.green);
_angleCurrent += _angleSpeed * Time.deltaTime;
_angleCurrent = _angleCurrent % 360.0f;
Quaternion rot = Quaternion.AngleAxis(_angleCurrent, this.transform.up);
Debug.DrawRay(this.transform.position, rot*Vector3.forward, Color.blue);
}
}
If you attach this script to a gameobject with no rotations, (0, 0, 0) in Unity Inspector, everything is working as I expect. When you press play on Unity, you will see a green ray that shows gameobject up direction and a blue ray that shows gameobject forward direction with 0 angle rotation on gameobject up direction (pic 1). If you change gameobject Y local rotation using local rotation gizmos on Unity editor window, the blue ray, correctly, does NOT rotate (pic 2). If you change the _anglespeed variable, the blue ray will constantly spin on gameobject local X/Z plane. This spin is, correctly, NOT influenced by changing value of gameobject Y local rotation on Unity editor window. Everything is perfect.
My problems arise when I start rotating the gameobject arbitrarily. For example, if I rotate the object like this (45, 0, 0), the blue ray is no more perpendicular with transform.up vector (the green ray). Why (pic 3)? If I change the _anglespeed variable, the blue ray will NOT constantly spin on gameobject local X/Z plane but in a strange circular fashion. Why?
How can I display the blue vector considering only rotations on local X and Z axis and ignoring rotations on local Y axis (since _angleCurrent will be used)?
P.S. Replacing rot*Vector3.forward
with rot*transform.forward
will not work since since the blue ray will include the local Y axis rotation that I want to exclude from it.
Your answer
![](https://koobas.hobune.stream/wayback/20220613171326im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
object is not rotating from right direction 0 Answers
Finding roll angle 0 Answers
reproducing hingejoint.angle 0 Answers
Rotation from AngleAxis() ToAngleAxis() flips back and forth 1 Answer