void Start()
{
var m_camera = FindObjectOfType<UIRoot>().transform.FindChild("Camera").GetComponent<Camera>();
UICamera.currentCamera = m_camera;
UIEventListener.Get(gameObject).onDrag = gearOnDrag;
UIEventListener.Get(gameObject).onDragStart = gearOnDragStart;
UIEventListener.Get(gameObject).onDragEnd = gearOnDragEnd;
}
Vector3 m_gearDragPos = Vector3.zero;
void gearOnDragStart(GameObject go)
{
var center = go.transform.localPosition;
var touchPos = UICamera.currentTouch.pos;
var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f));
pos = UICamera.currentCamera.transform.InverseTransformPoint(pos);
var axis = pos - center;
m_gearDragPos = axis;
}
float m_lastEulerAngles;
void gearOnDragEnd(GameObject go)
{
m_lastEulerAngles = go.transform.localEulerAngles.z;
}
void gearOnDrag(GameObject go, Vector2 delta)
{
var center = go.transform.localPosition;
var touchPos = UICamera.currentTouch.pos;
var pos = UICamera.currentCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f));
pos = UICamera.currentCamera.transform.InverseTransformPoint(pos);
var axis = pos - center;
var cross = Vector3.Cross(axis, m_gearDragPos);
var angle = Vector3.Angle(axis, m_gearDragPos);
var eulerAngles = cross.z < 0 ? angle : 360 - angle;
go.transform.localEulerAngles = new Vector3(0, 0, eulerAngles + m_lastEulerAngles);
}