Jump to content
Unity Insider Forum

WheelJoint2D Werte via Code ändern


Recommended Posts

Hallo Zusammen

Ich möchte von der WheelJoint2D Komponente via Code Einstellungen ändern. Konkret geht es um Frequency und Damping Ratio. Laut der Unity-Anleitung müsste man es direkt mit .dampingRatio und .frequency ändern können. Die Variablen gibt es aber nicht und sind unter suspension untergeorded. Wenn ich dann z.B. suspension.frequency oder suspension.dampingRatio verwenden und ändern möchte, bekomme ich nur diese Fehlermeldung :

Fehler    CS1612    Der Rückgabewert von "WheelJoint2D.suspension" ist keine Variable und kann daher nicht geändert werden.

Google konnte mir nicht weiterhelfen :(
Kann mir jemand sagen wie ich das richtig anspreche damit ich die Werte ändern kann?

Link to post
Share on other sites

Nur eine Überlegung, da ich so eine Fehlermeldung vor Kurzem beim Ändern des Alpha Wert von Shadern hatte: muss eventuell der zu ändernde Wert in Klammern mit Ausrufezeichen gesetzt werden und mit get... und set... geändert werden?

Link to post
Share on other sites

WheelJoint2D.suspension ist keine Variable, sondern eine Property. Die tun syntaktisch so, als wären sie Variablen, aber sind in Wirklichkeit... leicht anders. Genauere Erklärung gibt's auf Anfrage, sonst wird der Post eventuell etwas lang und verwirrend :)

Der relevante Aspekt hier ist, dass man Member eines von einer Property zurückgegebenen Structs nicht direkt mit dem Punkt-Operator ändern kann. So als Beispiel, das vermutlich viele kennen:

transform.position.x = 0f; // Geht nicht

"position" ist hier auch eine Property, und man kann "x" nicht ändern, weil es ein Member des Vector3-Structs ist, das "position" als Typ hat.

Man kann höchstens den ganzen Vector3 überschreiben:

transform.position = Vector3.zero;

Wenn man also nur ein Member ändern will, dann baut man sich entweder einen neuen Vector3 und übernimmt einige der alten Werte, oder man macht sich eine Kopie in eine lokale Variable:

var position = transform.position;

position.x = 0f;

transform.position = position;

Und genau das machst du mit suspension auch:

var suspension = wheelJoint2D.suspension;

suspension.frequency = foo;
suspension.dampingRatio = bar;

wheelJoint2D.suspension = suspension;

 

  • Like 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...