为了账号安全,请及时绑定邮箱和手机立即绑定

从水平轴和垂直轴获取角度

从水平轴和垂直轴获取角度

C#
红糖糍粑 2022-12-04 10:37:27
尝试实现基于垂直轴和水平轴统一旋转对象的方法,垂直轴和水平轴由光标在图像上的位置确定。使用操纵杆进行控制,为移动设备创建 3D 游戏。目的是使用操纵杆进行旋转。图片示例: https ://imgur.com/a/hd9QiVe 绿色圆圈随着用户按下而移动,并返回 -1 到 1 之间的 X 和 Y 值,中间为 0。只是为了可视化输入是如何发生的: https ://imgur.com/a/8QVRrIh 如图所示,我只是想要角度或一种方法来在检测到用户输入的方向上移动对象。尝试了几种使用 atan 和 tan 计算角度的方法,但我的数学很糟糕,我不完全确定我首先获取了正确的值。//背景操纵杆指的是第一张图片中的白色圆圈        pos.x = (pos.x / backgroundJoystick.rectTransform.sizeDelta.x);        pos.y = (pos.y / backgroundJoystick.rectTransform.sizeDelta.y);        inputVector = new Vector3(pos.x * 2f, 0, pos.y * 2f);        inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;//抓取轴输入public float Horizontal(){    if (inputVector.x != 0)    {        return inputVector.x;    }    else        return Input.GetAxis("Horizontal");}public float Vertical(){    if (inputVector.z != 0)    {        return inputVector.z;    }    else        return Input.GetAxis("Vertical");}如代码中所示,角度对于垂直和水平方向的 input.getaxis 是必要的,以将对象指向角度。目前使用的公式不提供任何角度。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

如果要获取矢量的角度,请使用Vector2.SignedAngle()

var inputAngle = Vector2.SignedAngle(Vector2.right, inputVector);

角度是相对的,这就是为什么需要指定Vector2.right为第一个参数的原因。还有一种Vector2.Angle()方法,但它只返回两个角度之间的距离,并没有考虑方向。

如果您需要验证您的输入向量是否如您所想,请使用Debug.Log()打印您的inputVector.


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 301 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信