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

Unity3D中如何通过C#脚本实现物体从当前位置沿指定半径做圆弧/圆周运动

Unity C# 圆周运动实现方案

原有代码问题说明

  • 默认以世界坐标原点(0,0,0)为圆心,运行后物体会直接跳转至原点附近的圆周点
  • 未计算初始角度,默认从角度0(对应圆周右侧点)开始运动,和物体初始位置不匹配,无法自定义起始角度

完整实现代码

将以下脚本挂载到需要运动的物体上即可:

using UnityEngine;

public class CircularMotion : MonoBehaviour
{
    [Header("运动参数配置")]
    [Tooltip("圆周运动半径")]
    public float radius = 2f;
    [Tooltip("运动角速度,单位弧度/秒,负值可反向运动")]
    public float speed = 1f;
    [Tooltip("圆周运动的圆心坐标,不填则默认以物体初始位置左侧半径距离处为圆心")]
    public Vector3 customCenter;
    [Tooltip("是否在XZ平面运动,关闭则在XY平面运动")]
    public bool moveOnXZPlane = true;

    private float _timeCounter;
    private float _startAngle;
    private Vector3 _circularCenter;

    void Start()
    {
        // 初始化圆心
        _circularCenter = customCenter == Vector3.zero ? 
            transform.position + new Vector3(-radius, 0, 0) : 
            customCenter;

        // 计算物体初始位置相对于圆心的起始角度,保证从当前位置开始运动
        Vector3 initOffset = transform.position - _circularCenter;
        _startAngle = moveOnXZPlane ? 
            Mathf.Atan2(initOffset.z, initOffset.x) : 
            Mathf.Atan2(initOffset.y, initOffset.x);

        _timeCounter = 0;
    }

    void Update()
    {
        _timeCounter += Time.deltaTime * speed;
        float currentAngle = _startAngle + _timeCounter;

        float axisX = Mathf.Cos(currentAngle) * radius;
        float axisSecond = Mathf.Sin(currentAngle) * radius;

        if (moveOnXZPlane)
        {
            transform.position = _circularCenter + new Vector3(axisX, transform.position.y, axisSecond);
        }
        else
        {
            transform.position = _circularCenter + new Vector3(axisX, axisSecond, transform.position.z);
        }
    }
}

使用说明

  • 半径可通过radius参数直接调整,数值越大圆周运动的范围越大
  • 如需自定义圆心,直接在Inspector面板修改customCenter参数即可,脚本会自动适配起始角度,物体不会出现跳转
  • 调整speed参数可修改运动速度,设置为负值可以实现反向圆周运动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:04