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

Unity调用Rigidbody.AddForce报CS0122保护级别不可访问错误如何解决

问题解决方案

出现CS0122报错和Unity测试版无关,主要有以下两类诱因,按优先级排查即可:

  • 最常见原因:你在项目中创建了和Unity原生类重名的脚本
    检查项目内是否存在名为Rigidbody.cs的自定义脚本,如果有必须将其重命名(可改为CustomRigidbody.cs等),且要同步修改脚本内部的类名和文件名一致。C#默认会优先引用同命名空间下的自定义类,你自己写的Rigidbody类中没有公开的AddForce方法,就会触发保护级别的访问报错,这是新手最容易踩的坑。
  • 次要原因:项目程序集引用异常
    确认无重名脚本后按以下步骤修复:
    1. 确保球体对象已经挂载了Rigidbody组件
    2. 关闭Visual Studio,在Unity编辑器顶部菜单选择「编辑>重新生成项目文件」
    3. 脚本中建议把GetComponentInParent<Rigidbody>()改为GetComponent<Rigidbody>(),因为你脚本是直接挂在球体上的,Rigidbody组件在自身节点上,不需要查询父物体,同时可以加上非空校验避免后续空引用报错

修复后的参考代码如下:

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

public class Script14sept : MonoBehaviour {

    // 给默认值,运行后不需要手动赋值也能测试效果
    public float forceValue = 10f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        if(rb == null)
        {
            Debug.LogError("当前对象未挂载Rigidbody组件,请检查");
        }
    }

    private void FixedUpdate()
    {
        Vector3 moveInput = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        rb.AddForce(moveInput * forceValue);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:03