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?

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