rotation of an object relative to its original position

Hi - just wondered how I might rotate an object by a random degree within a certain range, but always relative to its initial starting position. I have this code, which is working, but seems to rotate relative to the objects current rotation:

var randomAngle:float = Random.Range(-30, 30);
launcherRef.transform.Rotate(Vector3.up * randomAngle);

You can save the initial rotation at Start(), create the random angle and add it to the initial rotation - but be aware that rotations are quaternions, misterious creatures where X-Y-Z-W have nothing to do with the familiar angles we know, so we must use the quaternion right operations:

var initialRot: Quaternion;

function Start(  // save the initial rotation
  initialRot = launcherRef.transform.rotation;

// when you want to rotate the launcherRef do the following:
  // create a random rotation around Y axis
  var randomRot = Quaternion.Euler(0,Random.Range(-30, 30),0);
  // combine the initial rotation with the random one:
  launcherRef.transform.rotation = initialRot * randomRot;

That code will rotate around the global Y (up) axis. If you want the local up, use transform.up, not Vector3.up.