public void OnDrag(PointerEventData eventData) { Vector2 delta = eventData.delta; Vector2 dir = Quaternion.Euler(0, 0, m_dir) * Vector3.right; Vector2 p = Util.Project(delta, dir); //Debuger.LogError("方向:{0}", Quaternion.Euler(0, 0, m_dir) * Vector3.right); //Debug.DrawRay(transform.position,Quaternion.Euler(0, 0, m_dir) * Vector3.right,Color.red,5); float add = p.magnitude / m_dirSize; if (Vector2.Dot(dir, p) < 0)//加还是减 { add = -add; } int iLast = Mathf.FloorToInt(m_lastFactor); m_lastFactor += add; if (!m_loop) { m_lastFactor = Mathf.Clamp01(m_lastFactor); } int iCur = Mathf.FloorToInt(m_lastFactor); if (iCur != iLast && m_loop) { if (m_onDrag != null) { m_onDrag(iCur); } //Debuger.Log("滚到;{0}", iCur); } m_handle.SetFactor(m_lastFactor - iCur, true); }
public void SetFactor(float factor) { if (m_handle != null) { m_handle.SetFactor(Mathf.Clamp01(factor)); } OnSetFactor(factor); }
static int SetFactor(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); UI.Handle obj = (UI.Handle)ToLua.CheckObject(L, 1, typeof(UI.Handle)); float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); bool arg1 = LuaDLL.luaL_checkboolean(L, 3); obj.SetFactor(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }