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

Unity C#技术问询:按指定步数将物体移向目标点

Unity实现按指定步数移动物体到目标点

核心思路

不用手动创建大量路径点,利用**向量线性插值(Lerp)**就能直接计算出对应步数的位置——本质是把起点到终点的距离按总步数拆分成比例,输入的步数占总步数的百分比就是物体在路径上的进度。

实现步骤

1. 编写控制脚本

创建一个C#脚本(比如命名为StepMover),挂载到需要移动的物体上:

using UnityEngine;
using UnityEngine.UI;

public class StepMover : MonoBehaviour
{
    public Transform startPoint;       // 路径起点(拖拽场景中的物体赋值)
    public Transform endPoint;         // 路径终点(拖拽场景中的物体赋值)
    public int totalSteps = 100;       // 总步数(默认设为100)
    public float moveSpeed = 3f;       // 平滑移动速度(可选,瞬间移动可删除)
    public InputField stepInputField;  // 输入步数的UI输入框(拖拽赋值)

    private Vector3 _targetPosition;

    void Start()
    {
        // 初始位置设为起点
        transform.position = startPoint.position;
        _targetPosition = startPoint.position;
    }

    void Update()
    {
        // 平滑移动到目标位置(不需要平滑的话可以删掉这个Update逻辑)
        transform.position = Vector3.MoveTowards(transform.position, _targetPosition, moveSpeed * Time.deltaTime);
    }

    // 绑定到UI按钮的点击事件,点击后移动到指定步数
    public void MoveToAssignedStep()
    {
        // 处理输入无效的情况
        if (!int.TryParse(stepInputField.text, out int targetStep))
        {
            Debug.Log("请输入有效的步数数值");
            return;
        }

        if (totalSteps <= 0)
        {
            Debug.Log("总步数不能为0");
            return;
        }

        // 计算进度比例,限制在0-1之间(防止步数超出范围)
        float progress = Mathf.Clamp01((float)targetStep / totalSteps);
        // 计算目标位置
        _targetPosition = Vector3.Lerp(startPoint.position, endPoint.position, progress);
    }
}

2. 场景设置

  • 在场景中创建两个空物体,分别命名为StartPoint和EndPoint,拖拽到脚本对应的startPoint和endPoint字段。
  • 添加一个UI输入框(InputField)和按钮(Button),把输入框拖拽到脚本的stepInputField字段,然后给按钮绑定StepMover脚本的MoveToAssignedStep方法。

3. 测试运行

  • 设置总步数(比如100),在输入框中输入步数(比如50),点击按钮,物体就会移动到路径中间位置并停留。

注意事项

  • 如果需要瞬间到位,直接把Update里的平滑移动逻辑删掉,在MoveToAssignedStep里直接给transform.position赋值即可。
  • 2D场景下,把Vector3换成Vector2,对应位置用transform.position的x/y轴即可。
  • 用Mathf.Clamp01确保输入的步数超出范围时(比如输入150),物体只会停在终点位置;输入负数则停在起点。

内容的提问来源于stack exchange,提问作者Mr.Kees

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:40