UGUI实现的变速摇杆 (转)

usingSystem;
usingUnityEngine;
usingUnityEngine.EventSystems;
usingUnityEngine.UI;
 
publicclass JoyPlayerCtrl : MonoBehaviour
{
    publicenum AxisOption
    {
        Both,// Use both
        OnlyHorizontal,// Only horizontal
        OnlyVertical// Only vertical
    }
 
    publicJoystickInput mJoystick;
    publicint 距离Max = 100;
    publicAxisOption axesToUse = AxisOption.Both;
    boolm_UseX; // Toggle for using the x axis
    boolm_UseY; // Toggle for using the Y axis
 
 
    Vector3 StartPos;
    Vector3 FirstPos;
 
 
    Image IMGBG;
    publicImage IMGCheck;
 
    publicstatic JoyPlayerCtrl Instance;
    voidAwake()
    {
        Instance = this;
 
        IMGBG = GetComponent<Image>();
        m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
        m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);
 
        mJoystick = newJoystickInput();
        mJoystick.距离Max = 距离Max;
        StartPos = transform.localPosition;
        OnPointerUp();
    }
 
    voidUpdate()
    {
        if(Input.GetKeyDown(KeyCode.Mouse0))
        {
            OnPointerDown(newVector2(Input.mousePosition.x, Input.mousePosition.y));
        }
        if(Input.GetKey(KeyCode.Mouse0))
        {
            OnDragDuan(newVector2(Input.mousePosition.x, Input.mousePosition.y));
        }
        if(Input.GetKeyUp(KeyCode.Mouse0))
        {
            OnPointerUp();
        }
    }
 
    /// <summary>
    /// 首次按下
    /// </summary>
    /// <param name="mousePos"></param>
    publicvoid OnPointerDown(Vector2 mousePos)
    {
        IMGBG.enabled = true;
        IMGCheck.enabled = true;
        mJoystick.isUser = true;
        IMGCheck.transform.localPosition = Vector3.zero;
 
        FirstPos = mousePos;
        transform.localPosition = newVector3(mousePos.x - Screen.width / 2, mousePos.y - Screen.height / 2, StartPos.z);
    }
 
    /// <summary>
    /// 弹起
    /// </summary>
    publicvoid OnPointerUp()
    {
        IMGBG.enabled = false;
        IMGCheck.enabled = false;
        mJoystick.isUser = false;
    }
 
    /// <summary>
    /// 拖动
    /// </summary>
    /// <param name="DragPos"></param>
    voidOnDragDuan(Vector3 DragPos)
    {
        Vector3 方向v3 = (DragPos - FirstPos).normalized;
        if(方向v3 != Vector3.zero)
        {
            mJoystick.方向 = Quaternion.LookRotation(方向v3, newVector3(0, 0, -1));
            mJoystick.距离 = Mathf.Clamp(Vector3.Distance(DragPos, FirstPos), 0, mJoystick.距离Max);
            IMGCheck.transform.localPosition = mJoystick.方向 * Vector3.forward * mJoystick.距离;
        }
    }
 
    publicclass JoystickInput
    {
        publicbool isUser;
        publicQuaternion 方向;
        publicfloat 距离;
        publicfloat 距离Max;
 
        publicfloat get力度()
        {
            return距离 / 距离Max;
        }
        publicQuaternion getY方向()
        {
            Quaternion temp = JoyPlayerCtrl.Instance.mJoystick.方向 * Quaternion.Euler(90,0,0);
            returnQuaternion.Euler(0, -temp.eulerAngles.z, 0);
        }
    }
 
    voidOnGUI()
    {
        if(mJoystick.isUser)
        {
            GUI.Label(newRect(10, 10, 200, 30), "方向"+ mJoystick.方向.eulerAngles.ToString());
            GUI.Label(newRect(10, 50, 200, 30), "距离"+ mJoystick.距离);
            GUI.Label(newRect(10, 90, 200, 30), "力度"+ mJoystick.get力度());
        }
    }
}



原文链接在此

http://www.manew.com/thread-89131-1-1.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值