2017-09-17 60 views
-4

我對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 

爲什麼會出現這種情況?

+0

'HingeJoint'不實現'min'屬性。 'JointLimits'確實。 –

+0

您隱式將對象從'HingeJoint'轉換爲'JointLimits'。另見:https://stackoverflow.com/questions/1339482/typecasting-in-c-sharp –

回答

3

有兩個原因:

JointLimits是一個結構體。

JointLimits被聲明爲自動屬性變量。

HingeJoint.limits是一種類型的JointLimits這是一個struct和聲明爲自動屬性({ get; set; }),所以你不能修改一個變量(min)直接在裏面吧。您必須複製struct,修改其中的變量,然後將結構指定回HingeJoint使用struct和自動屬性來聲明限制變量是爲什麼你不能那樣做

public JointLimits limits { get; set; } 

同樣的事情適用於transform.position。您不能修改其Xÿž直接變量,因爲位置是一種類型的Vector3這是一個struct,它也被宣佈爲自動屬性:

public Vector3 position { get; set; } 

你必須首先製作它的副本,修改它,然後將它分配回transform.position

代碼中另一個無關的問題是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; 
} 
相關問題