L'unité Ne peut pas modifier un type de valeur de retour la valeur de `UnityEngine.Transformer.la position'
Je suis en train d'essayer de ranger mon appareil photo pour une carte que j'ai fait dans Unity3D l'aide de ce code qui a été converti à partir de JavaScript:
transform.position.z = Mathf.Clamp(transform.position.z, zmin, zmax);
transform.position.x = Mathf.Clamp(transform.position.x, xmin, xmax);
Mais l'Unité ne cesse de revenir l'erreur suivante lors de la compilation: error CS1612: Cannot modify a value type return value of 'UnityEngine.Transform.position'. Consider storing the value in a temporary variable.
OriginalL'auteur hmtinc | 2013-09-21
Vous devez vous connecter pour publier un commentaire.
Sur d'Erreur du Compilateur CS1612
Vous ne devez pas modifier la position de la caméra de cette façon.
Dans votre code, vous dites "nouvelle valeur de transformation.position.z est Mathf.De serrage(transformer.position.z, zmin, zmax)", mais le transformer.position.z est une copie de l'original de la transformer.coordonnée de position en raison du fait que c'est le type de valeur et il copie par valeur. La bonne façon de position de clamp (et également utilisé dans l'unité référence de script): > transformer.position = new Vector3(Mathf.De serrage(transformer.position.x, xmin, xmax), 0, Mathf.De serrage(transformer.position.x, xmin, xmax););
Merci , j'ai réussi pour la fixation de l'appareil photo à la carte à l'aide du script ci-dessus ,j'ai dû modifier un peu . Mais ça marche 😀
OriginalL'auteur Valery Petrov
parce que
Vector3
est unstruct
, signifie "valeur type", pas "le type de référence'. ainsi, la propriétéTransform.position
's getter retour d'un "NOUVEAU"Vector3
pour le résultat. si vous modifiez directement, la "NOUVELLE"Vector3
est modifié, PAS à laTransform.position
de la propriété. est-ce clair?ce n'est évidemment PAS ce que vous voulez, de sorte que le compilateur vous l'a dit, c'est un problème.
vous devez déclarer une nouvelle
Vector3
, et init avecTransform.position
's de lecture, de le modifier et changerTransform.position
avec setter.ne vous inquiétez pas à propos de
Vector3 _tmp
, c'est juste le type de la valeur, de ne pas créer de mémoire fragmentations.OriginalL'auteur afpro
Vous ne pouvez pas modifier le seul à coordonner de la position. Vous devez réaffecter l'ensemble du vecteur:
OriginalL'auteur Heisenbug