创建一个Unity的手游摇杆

创建一个Unity的手游摇杆

1. 步骤1:搭建一个UI摇杆

UI的搭建

1.1. 将JoyStick(可以用image组件)设置为左侧一半的区域(大概全屏幕四分之一的区域,可以适当调整)

1.2. JoyStick下有一个Background背景层为摇杆的背景,而Background下有一个Handle作为摇杆。

显示效果类似这样:
在这里插入图片描述

2.步骤2:写一个脚本让UI上的摇杆在规定的区域动起来

这个脚本放在JoyStick这个对象身上

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class JoyStickBtn : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler {
    #region JoyStick Event
    public Transform TransBG;
    public Transform TransHandle;
    int FingerId = int.MinValue;
    Vector3 PointDownPos;
    public float MaxRadius;
    private Vector3 _Dir;
    //外部访问的只读方向向量
    public Vector3 Dir => (_Dir);

    public void OnPointerDown(PointerEventData eventData) {
        //相当于鼠标左键,手点击才可以触发
        if (eventData.pointerId < -1) {
            return;
        }
        FingerId = eventData.pointerId;
        //获取点击的位置,并将摇杆的背景位置设为点击位置
        TransBG.position = PointDownPos = eventData.position;
    }

    public void OnDrag(PointerEventData eventData) {
        //相当于只有鼠标左键点击是触发
        if (eventData.pointerId < -1) {
            return;
        }
        FingerId = eventData.pointerId;
        //计算拖拽的位置和开始点击的位置的距离
        var dis = eventData.position - (Vector2)PointDownPos;
        //获取移动摇杆的定值、最小值、最大值(限定摇杆的范围)
        var radius = Mathf.Clamp(Vector3.Magnitude(dis), 0, MaxRadius);
        //计算出摇杆的位置
        TransHandle.localPosition = radius * dis.normalized;
        //拿到摇杆的方向,在移动脚本中获取Dir这个只读的属性(以防被更改)
        //这个_Dir的值经过归一化会返回[-1,1]
        _Dir = TransHandle.localPosition.normalized;
    }

    public void OnPointerUp(PointerEventData eventData) {
        if (eventData.pointerId < -1) {
            return;
        }
        FingerId = eventData.pointerId;
        //将摇杆位置重置
        TransHandle.localPosition = Vector3.zero;
        _Dir = Vector3.zero;
    }
    #endregion
}

3.写一个移动脚本

       
       /*      获取到 JoyStickBtn 脚本后和使用以下两个Input的方法一样获取两个轴的向量
        hor = Input.GetAxis("Horizontal");
		ver = Input.GetAxis("Vertical");
	  */
        hor = JoyStickBtn.Dir.x;
        ver = JoyStickBtn.Dir.y;
		transform.postion+=
           new Vector3(hor * speed * Time.deltaTime, 0.0f, ver * speed * Time.deltaTime);

具体的移动脚本可以参考我的另一篇博客角色移动

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值