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

Unity中3D物体移动C#脚本无效问题求助

3D移动脚本无响应的排查与修复

可能的问题点及解决步骤:

  • 未挂载3D Rigidbody组件:目标物体必须添加纯3D版本的Rigidbody组件(不是Rigidbody2D)。如果没加,body3d会是空值,控制台会抛出空引用错误。解决:选中目标物体,右键→3D Object→Physics→Rigidbody添加组件。
  • 输入轴无输出:检查Horizontal轴是否正常工作。可以在代码的Update里加一行Debug.Log(val);,运行后按A/D或左右箭头,看控制台有没有-1到1之间的数值输出。如果没有,打开Edit→Project Settings→Input Manager,确认Horizontal轴的正负按键设置正确。
  • Velocity赋值遗漏Z轴:3D空间里Rigidbody.velocity是三维向量,你的代码只设置了X和Y轴,Z轴会被强制设为0。哪怕是平面移动,也该保留原有Z轴速度,修改代码:
    body3d.velocity = new Vector3(speed * val, body3d.velocity.y, body3d.velocity.z);
    
  • 脚本挂载错误:确认SimpleMovement脚本已经拖到需要移动的目标物体上,不是挂在空物体或其他无关对象上。
  • 刚体移动约束被锁定:查看Rigidbody组件的Constraints选项,如果勾选了Freeze Position > X,物体根本没法沿X轴移动,取消这个勾选就行。
  • 物理更新时机错误:控制刚体应该用FixedUpdate而非Update,因为FixedUpdate和物理引擎同步,移动更稳定,也能避免一些物理异常。把Update方法改成FixedUpdate即可。

修复后的完整脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SimpleMovement : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody body3d;

    void Start()
    {
        body3d = GetComponent<Rigidbody>();
        // 可选:添加空引用检查,提前发现问题
        if (body3d == null)
        {
            Debug.LogError("目标物体未挂载Rigidbody组件!");
        }
    }

    void FixedUpdate()
    {
        if (body3d == null) return;
        
        var val = Input.GetAxis("Horizontal");
        body3d.velocity = new Vector3(speed * val, body3d.velocity.y, body3d.velocity.z);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:40:22