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

Unity新手求助:如何在两个游戏对象间实现平滑线性平移

两个立方体之间的平滑线性平移实现方案

嘿,作为Unity新手,想搞定两个立方体之间的平滑平移完全没问题!我看你已经有了初步的代码框架,我来帮你完善并解释清楚怎么实现~

首先先修正你代码里的小问题:类名LinearTrasnformation拼写错啦,应该是LinearTransformation,少了个字母'f'哦。接下来咱们用两种常用的平滑移动方法来实现需求,你可以根据自己的场景选合适的。

完整实现代码

public class LinearTransformation : MonoBehaviour 
{
    // 拖拽两个立方体到这里
    public GameObject cube1, cube2;
    // 移动速度,可在Inspector面板直接调整
    public float moveSpeed = 2f;
    // 标记是否正在移动
    private bool isMoving = false;

    void Update () 
    {
        // 按上箭头触发向cube2移动
        if(Input.GetKeyDown(KeyCode.UpArrow))
        {
            isMoving = true;
        }
        // 按下箭头停止移动
        if(Input.GetKeyDown(KeyCode.DownArrow))
        {
            isMoving = false;
        }

        if(isMoving)
        {
            // 方法1:匀速移动到目标点(推荐用于需要恒定速度的场景)
            cube1.transform.position = Vector3.MoveTowards(
                cube1.transform.position, 
                cube2.transform.position, 
                moveSpeed * Time.deltaTime
            );

            // 方法2:缓动减速到目标点(更自然的平滑效果)
            // cube1.transform.position = Vector3.Lerp(
            //     cube1.transform.position, 
            //     cube2.transform.position, 
            //     moveSpeed * Time.deltaTime
            // );

            // 当立方体接近目标时自动停止,避免微小抖动
            if(Vector3.Distance(cube1.transform.position, cube2.transform.position) < 0.01f)
            {
                isMoving = false;
                cube1.transform.position = cube2.transform.position; // 确保位置完全对齐
            }
        }
    }
}

关键细节解释

  • 速度控制:添加了moveSpeed变量,你可以在Unity编辑器的Inspector面板直接拖动调整数值,不用每次改代码重新编译
  • 输入处理:用Input.GetKeyDown代替GetKey,这样按一次按键只会触发一次状态切换,不会按住时一直重复触发
  • 两种平滑方式:
    • Vector3.MoveTowards:保持匀速移动,到达目标点就停止,适合需要稳定速度的场景
    • Vector3.Lerp:移动速度会随着和目标点的距离缩短而变慢,最后平滑停下,视觉效果更柔和
  • 停止判断:用Vector3.Distance检测两个立方体的距离,当小于0.01时自动停止,避免因为浮点精度问题导致的微小抖动

使用步骤

  1. 在Unity里创建一个空物体(或者直接挂载到其中一个立方体上)
  2. 将上述脚本挂载到这个物体上
  3. 在Inspector面板中,把你的两个立方体分别拖拽到cube1和cube2的引用框里
  4. 调整moveSpeed到你觉得合适的数值(比如2f对应每秒移动2个单位)
  5. 运行游戏,按上箭头启动移动,按下箭头停止移动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:08