Unity编写摇杆控制人物

void Update()
{
    float h = Input.GetAxis("Horizontal");
    float v = Input.GetAxis("Vertical");
    dir = new Vector2(h, v);
    if (dir != Vector2.zero)
    {
        float angle = Vector2.SignedAngle(dir,new Vector3(0, 1));
        transform.localEulerAngles = new Vector3(0, angle, 0);
        transform.Translate(transform.forward * 0.03f,Space.World);
    }
}

通过键盘上下左右控制人物角色的前方朝向,最重要是Vector2.SignedAngle这个API, 第二个参数是 vector3(0,1)这个是以世界坐标的前方为基准,求出 角色与前方的角度偏移

一下代码是控制UI的摇杆的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class drag : MonoBehaviour,IDragHandler,IPointerDownHandler,IPointerUpHandler
{

Vector3 startPos;
public void OnDrag(PointerEventData eventData)
{
 
    Vector3 dir = Input.mousePosition - startPos;
    Vector2 img = Vector2.ClampMagnitude(dir, 50);
    
    transform.localPosition = img;
}

public void OnPointerDown(PointerEventData eventData)
{
    Debug.Log(eventData.position);
    startPos = transform.position;
}

public void OnPointerUp(PointerEventData eventData)
{
    transform.localPosition = Vector3.zero;
}

}
引入using UnityEngine.EventSystems;命名空间
接着使用Unity提供的接口

在这里插入图片描述
原理就是利用Unity提供的接口,点击中间的正方形时,也就是摇杆中心,给startPos赋值 也就是中心点的位置

当拖动UI时,也就是调用OnDrag 通过鼠标位置减去startPos 计算出方向,利用 Vector2.ClampMagnitude限制向量的长度 也就是这个方法的第二个参数,这个根据摇杆的半径而定。 最后将返回值 赋值给中间图片的本地坐标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值