Vector3 est une struct
Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 22 sur 67.
Vector3 est une struct, un type qui n’a pas été abordé dans le parcours C#. Une struct est une valeur, comme un int : la lui affecter en crée une copie complète. Après Vector3 b = a; b.x = 9;, a.x reste inchangé, car b est une copie distincte. (Une classe fonctionne à l’inverse : deux variables peuvent faire référence à un même objet partagé.)
transform.position est une propriété, et sa lecture vous donne une copie de la position. Ainsi, transform.position.x = 0; modifierait une copie qui serait aussitôt abandonnée, et C# refuse de compiler cette instruction : error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Pour corriger cela, copiez la position, modifiez la copie, puis réaffectez-la. Ce runner revient sur la voie du milieu lorsque vous appuyez sur Space :
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // copier
p.x = 0; // modifier la copie
transform.position = p; // la réaffecter
}Omettez la dernière ligne et le code compile, mais rien ne bouge : seule la copie a été modifiée. transform.localScale et les autres propriétés Vector3 fonctionnent de la même manière.
Défi
FacileLa luge tombe à une vitesse de fall unités par seconde, et les flèches la font glisser le long de l’axe x. Deux lignes doivent la maintenir au sol (y ne descend jamais en dessous de 0.5) et entre les murs (x de -4 à 4), mais le script ne compile pas.
Appuie sur Play pour voir les erreurs. Corrige les deux lignes en travaillant sur une copie de la position, tout en conservant leur fonction, puis appuie sur Check.
Essayez vous-même
using UnityEngine;
public class Sled : MonoBehaviour
{
public float speed = 4f;
public float fall = 3f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
transform.position += new Vector3(h * speed, -fall, 0) * Time.deltaTime;
// Maintenir la luge au sol et entre les murs.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases du scripting dans Unity
1Votre premier script
Bonjour, UnityPlacez le cubeBouger à chaque imageTourner chaque secondeDirigez avec les touchesRécapitulatif : conduisez le cube4Vecteurs
Addition de vecteursDirectionsEspaces local et mondeVitesse diagonaleDistance entre les objetsVector3 est une structRécapitulatif : pilote de drone7Projet : Attrape l’étoile
L’attrapeurUne étoile qui tombe2L’inspecteur
Champs de l’inspecteurSerializeFieldNombres flottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur5Transformations et hiérarchie
Parents et enfantsÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : Lune en orbite8Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que FindLe null de UnityRécapitulatif : la pièce la plus proche11Projet : Esquivez les blocs
Le coureurBlocs qui tombent6GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur