transform.rotation vs Quaternion.Euler

I am using this to instantiate an object:

Instantiate (spell, transform.position + transform.forward * 2, transform.rotation);

However when I switched to:

Instantiate (spell, transform.position + transform.forward * 2, SprayDirection());

Quaternion SprayDirection() {
		Quaternion spreadAngle;
		float spread = Random.Range (spreadMax * -1, spreadMax);
		spreadAngle =  Quaternion.Euler( transform.rotation.x , transform.rotation.y, transform.rotation.z);
		return spreadAngle;

The object is always instantiated in the same direction, regardless of the actual rotation of the transform.

A Euler Angle is an angle that you would think of as between 0 degrees and 360 degrees. transform.rotation is NOT a Euler Angle, it is a Quaternion.

3D Euler angles are represented by a Vector3 in Unity.

However, I’m assuming you want to multiply spread by the angle, so this is what you should do:

Quaternion SprayDirection() {
	float spread = Random.Range(spreadMax * -1, spreadMax);

	// Get the eulerAngles of transform.rotation, multiply that vector by spread, then convert it back into a Quaternion
	// using Quaternion.Euler(Vector3 eulerAngles)
	return Quaternion.Euler(transform.eulerAngles * spread);

Here is the docs for Quaternion.Euler: Unity - Scripting API: Quaternion.Euler

transform.rotation: Unity - Scripting API: Transform.rotation

and transform.eulerAngles: Unity - Scripting API: Transform.eulerAngles