You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity2D中如何计算箭头旋转角度?实现随运动方向定向旋转

Unity2D 圆周运动物体朝向运动方向的角度计算方案

核心逻辑

你已经通过Mathf.Cos和Mathf.Sin基于弧度角计算了物体的圆周位置,运动的切线方向角度可以直接基于这个弧度角推导:

  • 你使用的angle * speed是径向弧度角(从父物体指向当前物体的向量与X轴正方向的夹角)
  • 圆周运动的切线方向,是径向向量逆时针旋转90°(若为顺时针运动则顺时针转90°),对应到Unity2D的Z轴旋转(正方向为逆时针),只需对径向弧度角做简单转换即可。

修改后的代码

public float angle = 0; // 初始弧度角
public float radius = 0.5f; // 圆周半径
public bool isCircle = false; // 圆周运动开关
public float speed = 5f;
public Transform parent; // 需在Inspector中绑定父物体

void Update()
{
    if (!isCircle) return; // 仅在开启时执行圆周运动
    
    angle += Time.deltaTime;
    float currentRadAngle = angle * speed;
    
    // 计算当前位置
    float x = Mathf.Cos(currentRadAngle) * radius + parent.position.x;
    float y = Mathf.Sin(currentRadAngle) * radius + parent.position.y;
    transform.position = new Vector3(x, y, 0);
    
    // 计算并设置朝向角度
    // 若箭头默认朝右,需加90°让它指向切线方向;若箭头默认朝上,去掉+90f即可
    float rotationZ = currentRadAngle * Mathf.Rad2Deg + 90f;
    transform.rotation = Quaternion.Euler(0, 0, rotationZ);
}

细节调整

  • 箭头初始朝向适配:如果你的箭头Sprite默认是向上的,直接使用currentRadAngle * Mathf.Rad2Deg作为旋转角度即可,无需加90°
  • 旋转方向适配:如果需要顺时针旋转(比如angle -= Time.deltaTime),则将角度调整为currentRadAngle * Mathf.Rad2Deg - 90f,保证箭头始终指向运动方向

内容的提问来源于stack exchange,提问作者Alex Alexia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:20:39