Handles.RotationHandle
static function RotationHandle(rotation: Quaternion, position: Vector3): Quaternion;
static Quaternion RotationHandle(Quaternion rotation, Vector3 position);
static def RotationHandle(rotation as Quaternion, position as Vector3) as Quaternion
Parameters

rotation Orientation of the handle.
position Center of the handle in 3D space.
Returns
Quaternion The modified rotation

Note: Use HandleUtility.GetHandleSize where you might want to have constant screen-sized handles.
Description

Make a Scene view rotation handle.

This will behave like the built-in rotation tool in Unity. If you have assigned something to Undo.SetSnapshotTarget, it will work fully with Undo.


Rotate the attached object from the Rotation Handle.
	//Create a rotation handle at (0,0,0) and rotate any object that has "RotateAtPoint.js"
	// attached from 0,0,0.
	
	@CustomEditor (RotateAtPoint)
	class RotationHandleJS extends Editor {
		function OnSceneGUI () {
	        target.rot = Handles.RotationHandle (target.rot, Vector3.zero);
	        if (GUI.changed)
	            EditorUtility.SetDirty (target);
	    }
	}
And the script attached to this handle:
	// RotateAtPoint.js
	// This Script has to be outside of the editor folder.
	//
	// Usage: Just Place this script on the object you want to work the handle with.
	// And control the Object's rotation from the handle that appears at 0,0,0 when 
	// This object is selected.
	
	@script ExecuteInEditMode()
	var rot : Quaternion = Quaternion.identity;
	
	function Update () {
		transform.rotation = rot;
	}