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
相关产品推荐
相关产品推荐

