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

Unity C#中无法引用其他GameObject变量的问题求助

解决Unity中CS1061错误:'GameObject'不含'mass'定义

错误原因

你代码里的otherBody是GameObject类型,Unity的GameObject本身并没有mass属性——你的mass字段是定义在自己编写的Gravity脚本里的,直接通过GameObject访问mass自然会报错。

解决方案

有两种简单的修复方式:

方式1:直接引用脚本组件

把otherBody的变量类型从GameObject改成Gravity,这样可以直接访问脚本里的mass字段:

// 原代码
[SerializeField] private GameObject otherBody;
// 修改后
[SerializeField] private Gravity otherBody;

之后在Unity编辑器里,直接把挂载了Gravity脚本的对象拖拽到这个变量的赋值框里即可。对应的GravityUpdate方法里的代码不用改,otherBody.mass就能正常访问。

方式2:通过GetComponent获取脚本组件

如果不想修改变量类型,就在访问mass前,从otherBody这个GameObject上获取Gravity组件实例:

void GravityUpdate()
{
    float sqrDist = (otherBody.transform.position - transform.position).sqrMagnitude;
    Vector3 moveDir = (otherBody.transform.position - transform.position).normalized;
    
    // 先获取Gravity组件
    Gravity otherGravity = otherBody.GetComponent<Gravity>();
    if(otherGravity == null)
    {
        Debug.LogError("otherBody对象没有挂载Gravity脚本!");
        return;
    }
    
    Vector3 force = moveDir * constant * mass * otherGravity.mass / sqrDist;
    currentVelocity += force * Time.deltaTime;
    transform.position += currentVelocity * Time.deltaTime;
}

关于你尝试的otherBody.Gravity.mass

这种写法错误是因为GameObject类型并没有名为Gravity的成员,必须通过GetComponent<Gravity>()方法获取到脚本的实例后,才能访问实例上的mass字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:42