您的位置:首页 > 移动开发 > Unity3D

Unity中虚拟摇杆的简单实现

2017-12-20 20:26 726 查看
 本文只是简单的实现了摇杆控制人物的基本移动。



核心内容就是将摇杆移动方向传给要控制的对象。

代码如下:

public class JoyStick : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler

{

    //joy的起始位置

    Vector3 OriginPos;

    //joystick 的半径

    float R;

    //joy 可以运动的最大半径(即R)

    float maxDis;

    //joy 运动的方向

    Vector3 dir;

    //要控制的玩家

    GameObject Player;

    //移动对象的速度(在inspector面板可修改)

    public float playerSpeed = 8f;

    // 声明一个玩家移动的委托

    public delegate void PlayerMoveDel(Vector3 Dir);

    //给委托绑定事件

    public event PlayerMoveDel _player;

    //当joy运动到最大半径处,被控制对象不在移动,所以定义一个开关

    //使joy 运动到最大半径处时,被控制对象依然可以移动

    bool IsDrag;

    private void Awake()

    {

       R= transform.parent.GetComponent<RectTransform>().rect.width;

        maxDis = R / 2;

        Player = GameObject.Find("Player");

        //给委托事件绑定方法

        _player += PlayerMove;

    }

    private void Update()

    {

        if (IsDrag)

        {

            _player(dir);

        }

    }

    //joy的三种状态

    #region JoyState

    public void OnBeginDrag(PointerEventData eventData)

    {

        OriginPos = transform.position;

        IsDrag = true;

    }

    public void OnDrag(PointerEventData eventData)

    {

        if (Vector3.Distance(eventData.position, OriginPos) <= maxDis)

        {

            transform.position = eventData.position;

        }

        else

        {

            //joy的最大位置

            transform.position = (Input.mousePosition - OriginPos).normalized * maxDis + OriginPos;

        }

        //要传给被控制对象的参数(长度为1的标准化方向)即方向向量

        dir = (Input.mousePosition - OriginPos).normalized;

    }

    public void OnEndDrag(PointerEventData eventData)

    {

        transform.position = OriginPos;

        IsDrag = false;

    }

    #endregion

    //玩家移动的方法

    public void PlayerMove(Vector3 Dir)

    {

        //将三维移动转换为二维移动

        Player.transform.Translate(new Vector3(dir.x, 0, dir.y) * Time.deltaTime * playerSpeed);

    }

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息