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

修改Transform后游戏对象未移动?Unity平滑移动问题排查

问题原因及解决方法

核心问题在于你没有接收Instantiate返回的实例对象,导致移动逻辑操作的是预制体而非场景中生成的游戏对象:

  • 你的cat变量应该引用的是预制体资源,Instantiate(cat, ...)会在场景中创建一个新的实例,但你并未将这个实例赋值回cat变量。
  • 后续调用StartCoroutine(MoveFromTo(cat.transform, ...))时,操作的是预制体的transform(预制体本身不在场景中),所以调试日志显示的是预制体的位置被修改,但场景里的实例完全没被操作,自然看不到移动效果。

修改后的代码

只需修改Instantiate的调用行,将返回的实例赋值给cat:

// 接收实例化后的对象,替换原来的cat引用
cat = Instantiate(cat, OffScreenLeft(), Quaternion.identity);
Debug.Log("start position: " + OffScreenLeft());
Debug.Log("end position: " + InPosition());

StartCoroutine(MoveFromTo(cat.transform, OffScreenLeft(), InPosition(), 3f));

IEnumerator MoveFromTo(Transform objectToMove, Vector3 a, Vector3 b, float speed) {
        float step = (speed / (a - b).magnitude) * Time.fixedDeltaTime;
        float t = 0;
        while (t <= 1.0f) {
            t += step;
            objectToMove.position = Vector3.Lerp(a, b, t);
            yield return new WaitForFixedUpdate();
        }
        objectToMove.position = b;
        Debug.Log("move complete cat: " + cat.transform.position); 
    }

这样后续的移动逻辑就会作用于场景中生成的实例对象,视觉上就能看到平滑移动效果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:30:05