您的位置:首页 > 其它

滚轮旋转体拖拽监听事件的拖拽坐标修正问题

2017-05-04 01:04 323 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐