为什么链接在这里不起作用,我必须设置一个中间变量?

Why does chaining not work here, and I must set an intermediary variable?

我对 C# 比较陌生。我有以下脚本摘录:

public class Flipper : MonoBehavior {
  HingeJoint hinge;
  void start () {
    hinge = GetComponent<HingeJoint>();
    hinge.limits.min = 0;
  }
}

hinge.limits.min = 0;不编译;我需要分两步进行,中间变量赋值如下:

JointLimits limits = hinge.limits;
limits.min = 0

为什么会这样?

这有两个原因:

1.JointLimits 是一个结构。

2.JointLimits 声明为自动 属性 变量。

HingeJoint.limitsJointLimits 的一种类型,它是 struct 并声明为 auto-属性 ({ get; set; }) 因此您无法修改直接在其中的变量(min)。您必须复制 struct,修改其中的变量,然后将结构分配回 HingeJoint使用 struct 和自动 属性 声明限制变量是您不能这样做的原因

public JointLimits limits { get; set; }

同样的事情也适用于 transform.position。你不能直接修改它的 x, y, z 变量,因为 position 是 Vector3 这是一个 struct 并且它也被声明为 auto-属性:

public Vector3 position { get; set; }

您必须先复制它,修改它然后将其分配回 transform.position

代码中另一个不相关的问题是 Start 函数。它是 Start 而不是 start

HingeJoint hinge;

void Start()
{
    hinge = GetComponent<HingeJoint>();

    //Make Limit copy
    JointLimits limits = hinge.limits;

    //Modify limit variable
    limits.min = 0;

    //Assign back to HingeJoint
    hinge.limits = limits;
}