UGUI实现摇杆(模仿太极熊猫)

核心代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public delegate void JoystickMoveDelegate(JoystickData data);

public class Joystick : MonoBehaviour {


    public GameObject joystickUI;                   //摇杆整体UI,方便Active
    public RectTransform joystickCenter;            //摇杆重心
    public RectTransform joystickBackground;        //摇杆背景


    private float halfScreenWidth;
    private float halfScreenHeight;
    private RectTransform joystickRect;
    private float radius;
    private Vector3 lastMousePosition;


    public static event JoystickMoveDelegate JoystickMoveEvent;



    // Use this for initialization
    void Start () {
        halfScreenWidth = Screen.width / 2;
        halfScreenHeight = Screen.height / 2;
        joystickRect = this.gameObject.GetComponent<RectTransform>();
        radius = 71;
        
    }
    
    // Update is called once per frame
    void Update () {
        JoystickController();
    }

    public void JoystickController() 
    {
        //鼠标一直按下
        if (Input.GetMouseButton(0))
        {
            float distance = Vector2.Distance(new Vector2(Input.mousePosition.x, Input.mousePosition.y), joystickRect.anchoredPosition);

            if (distance < radius)
            {
                //当距离小于半径就开始移动 摇杆重心
                joystickCenter.anchoredPosition = new Vector2(Input.mousePosition.x - joystickRect.anchoredPosition.x, Input.mousePosition.y - joystickRect.anchoredPosition.y);
            }
            else
            {
                //求圆上的一点:(目标点-原点) * 半径/原点到目标点的距离
                Vector2 endPosition = (new Vector2(Input.mousePosition.x, Input.mousePosition.y) - joystickRect.anchoredPosition) * radius / distance;
                joystickCenter.anchoredPosition = endPosition;
            }

            if (JoystickMoveEvent != null) 
            {

                JoystickMoveEvent(new JoystickData() { x = joystickCenter.anchoredPosition.x - joystickBackground.anchoredPosition.x, y = joystickCenter.anchoredPosition.y - joystickBackground.anchoredPosition.y });
            }

        }

        //鼠标按下
        if (Input.GetMouseButtonDown(0))
        {
            this.joystickUI.SetActive(true);

            //鼠标单击左边屏幕
            if (Input.mousePosition.x < halfScreenWidth)
            {
                joystickRect.anchoredPosition = Input.mousePosition;

            }

            //鼠标单击右边屏幕
            if (Input.mousePosition.x >= halfScreenWidth)
            {
                // Debug.Log("鼠标单击右边");
            }
        }


        //鼠标释放的时候
        if (Input.GetMouseButtonUp(0))
        {
            this.joystickUI.SetActive(false);
        }
    }
}

public class JoystickData
{
    public float x;
    public float y;

}

 

效果图:

image

 

Unity5.1版本:

实例下载地址: http://yunpan.cn/cchdURtqCWXxv  访问密码 0aba

posted @ 2015-07-30 00:10 盘子脸 阅读(...) 评论(...) 编辑 收藏