Problem Instantiating a Prefab
I have a prefab plane, with an attached material, and I instantiate that prefab in the game, but when i set the quaternion, the objects rotation does not seem to be the quaternion that I set in the instantiation of the object. I set the quaternion to (40.0f, -180.0f, 0.0f, 0.0f) but when I start the game, the planes rotation is always way off.
I am a beginner using Unity, and so maybe I am doing this all wrong, but is the rotation of an object a quaternion? Why is the rotation of the object then only use x, y, and z values, but a quaternion has x, y, z, and w?
Answer by Eno-Khaon · Oct 20, 2015 at 07:29 PM
Yeah, the problem you're experiencing is because that simply isn't how Quaternions work. They're a monstrous beast and, to quote Unity's entry on them, "They are based on complex numbers and are not easy to understand intuitively. You almost never access or modify individual Quaternion components (x,y,z,w)"
The two simplest ways to try and do what you're looking for would be either:
// C#
transform.eulerAngles = new Vector3(40, -180, 0);
or, for a more robust solution with lesser possibility of error in exchange for higher computational cost,
transform.rotation = Quaternion.AngleAxis(40.0f, Vector3.right) * Quaternion.AngleAxis(-180.0f, Vector3.up);
You will never get the results you would hope for by modifying Quaternions by hand unless you're extremely well aware of how they function (including knowing why and how imaginary numbers i, j, and k all are utilized in their calculation) and are a bit masochistic, considering the number of convenient functions which are available so you don't have to know exactly how to form them yourself.
Edit: Added another link
Your answer
Follow this Question
Related Questions
Why isn't the first person controller prefab working for unity 5? 0 Answers
How can i define a costume function for an object in a prefub that I spawn? 1 Answer
Setting the parent of an instantiated prefab error 1 Answer
Prefab not appearing,One of my prefabs are not showing in scene 0 Answers
GameObject created from Prefab, much larger than original object 0 Answers