Unity中如何计算CharacterController沿圆周从v2到v3的移动向量?
计算CharacterController从v2到v3的移动向量
配图说明:v1为圆周中心点,v2是角色当前在圆周外侧的位置,v3是v2绕v1旋转角度a后对应的外侧目标位置
分步计算方法
获取圆心到当前位置的基础向量
先计算从圆心v1指向角色当前位置v2的向量,并记录该向量的长度(即角色到圆心的固定距离):Vector3 centerToPlayer = v2 - v1; float distanceToCenter = centerToPlayer.magnitude;旋转方向向量得到目标位置的方向
绕圆周平面的法向量(默认Unity水平面用Vector3.up)旋转角度a,得到指向v3的单位方向向量:// 若需要逆时针旋转,直接传入正数a;顺时针则传入负数a Vector3 targetDir = Quaternion.AngleAxis(a, Vector3.up) * centerToPlayer.normalized;计算目标位置v3
用旋转后的方向向量乘以之前记录的距离,加上圆心坐标得到v3:Vector3 v3 = v1 + targetDir * distanceToCenter;得到最终移动向量
移动向量即为目标位置与当前位置的差值:Vector3 moveVector = v3 - v2;
实际使用提示
- 如果旋转平面不是水平面,需要替换
Vector3.up为圆周平面的法向量(可通过平面内两个向量叉乘计算得到)。 - 若需要平滑移动,可结合
Time.deltaTime和移动速度调整:float moveSpeed = 5f; characterController.Move(moveVector.normalized * moveSpeed * Time.deltaTime);
内容的提问来源于stack exchange,提问作者pheedsta
相关产品推荐
相关产品推荐

