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

时间:2017-09-17 22:42:08

标签: c# unity3d unity5

我对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 个答案:

答案 0 :(得分:3)

这有两个原因:

1 JointLimits是一个结构。

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

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

struct

同样的事情适用于public JointLimits limits { get; set; } 。您无法直接修改其 x y z 变量,因为position是transform.position的类型,它是一个Vector3并且它也被声明为auto-property:

struct

您必须首先复制它,修改它然后再将其分配回public Vector3 position { get; set; }

代码中另一个不相关的问题是transform.position函数。它是Start而非Start

start