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

Unity中用三角函数实现物体绕玩家旋转朝向鼠标的代码原理求教

功能总述

这段是Unity引擎2D场景下的逻辑代码,挂载到需要跟随的物体(比如枪支)上后,可实现物体始终围绕玩家公转、朝向与鼠标方向对齐的效果,所有逻辑每帧实时更新。

变量定义说明

public GameObject player;
private Vector3 v3Pos;
private float angle;
private readonly float distance = 0.16f;
  • player:公转中心的玩家对象,需要在Inspector面板手动赋值
  • v3Pos:临时存储坐标转换过程中的向量数据
  • angle:存储鼠标相对于玩家的方向角度,单位为角度
  • distance:轨道半径基准值,后续计算时会放大4倍使用

逐行逻辑解析

1. 鼠标坐标空间转换

v3Pos = Input.mousePosition;
v3Pos.z = (player.transform.position.z - Camera.main.transform.position.z);
v3Pos = Camera.main.ScreenToWorldPoint(v3Pos);
v3Pos -= player.transform.position;
  • 首先通过Input.mousePosition获取鼠标的屏幕坐标,这个坐标的原点在屏幕左下角,单位为像素,默认z值为0
  • 给v3Pos.z赋值是为了保证后续转换后的世界坐标和玩家处于同一平面,避免深度偏差
  • ScreenToWorldPoint方法将屏幕坐标转换为Unity世界空间坐标,得到鼠标在场景中的实际位置
  • 最后减去玩家的世界坐标,得到鼠标相对于玩家的方向向量,原点对齐到玩家位置

2. 计算朝向角度

angle = Mathf.Atan2(v3Pos.y, v3Pos.x) * Mathf.Rad2Deg;
if (angle < 0.0f) { angle += 360.0f; }
transform.localEulerAngles = new Vector3(0, 0, angle);
  • Mathf.Atan2根据方向向量的y、x分量,计算出向量与X轴正方向的夹角,返回值为弧度,乘Mathf.Rad2Deg转换为角度,默认范围是-180°~180°
  • 加判断把负角度转换为0°~360°的正角度,避免后续计算出错
  • 给物体的Z轴旋转赋值,实现物体朝向和鼠标方向对齐的效果

3. 计算公转轨道位置

float xPos = Mathf.Cos(Mathf.Deg2Rad * angle) * distance;
float yPos = Mathf.Sin(Mathf.Deg2Rad * angle) * distance;
transform.localPosition = new Vector3(player.transform.position.x + xPos * 4, player.transform.position.y + yPos * 4, 0);
  • 把角度转回弧度,通过三角函数Cos、Sin计算出对应角度下,单位圆上的X、Y分量
  • 以玩家坐标为中心,加上偏移分量(乘4是硬编码的放大系数,实际生效的轨道半径为0.16*4=0.64),固定Z轴为0,得到物体在公转轨道上的最终位置,鼠标移动时角度变化,物体位置也会同步在轨道上移动

补充说明

这段代码默认适配2D正交相机场景,若用于透视相机或3D项目,需要调整深度计算逻辑;硬编码的系数4可以抽成公开变量,方便在编辑器中直接调整轨道半径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:05