Unity中虚拟摇杆的简单实现

 

 本文只是简单的实现了摇杆控制人物的基本移动。

 

 

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

代码如下:

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);
    }


    


}

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值