Vector3 jest strukturą
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 22 z 67.
Vector3 to struct, rodzaj typu, którego nie omawiano na ścieżce C#. Struktura jest wartością, taką jak int: przypisanie jej kopiuje całą jej zawartość. Po wykonaniu Vector3 b = a; b.x = 9; wartość a.x pozostaje niezmieniona, ponieważ b jest osobną kopią. (Klasa działa odwrotnie: dwie zmienne mogą wskazywać ten sam obiekt.)
transform.position jest właściwością, a jej odczyt zwraca kopię pozycji. Dlatego transform.position.x = 0; zmieniłoby kopię, która natychmiast zostałaby odrzucona, a C# nie pozwala skompilować takiego kodu: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Rozwiązaniem jest skopiowanie pozycji, zmiana kopii i przypisanie jej z powrotem. Ten runner wraca na środkowy pas po naciśnięciu spacji:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // kopia
p.x = 0; // zmień kopię
transform.position = p; // przypisz ją z powrotem
}Pomiń ostatnią linię, a kod się skompiluje, ale nic się nie poruszy: zmieniła się tylko kopia. transform.localScale i pozostałe właściwości Vector3 działają tak samo.
Wyzwanie
ŁatwySanki opada z prędkością fall jednostek na sekundę, a strzałki przesuwają ją wzdłuż osi x. Dwie linie powinny utrzymywać ją na podłożu (y nie może być mniejsze niż 0.5) i między ścianami (x od -4 do 4), ale skrypt się nie kompiluje.
Naciśnij Play, aby zobaczyć błędy. Popraw te dwie linie, pracując na kopii pozycji i zachowując ich działanie, a następnie naciśnij Check.
Spróbuj swoich sił
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;
// Utrzymuj sanki na podłodze i między ścianami.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła