Vector3 to struktura
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 29 z 85.
Vector3 to struktura, rodzaj typu, z którym jeszcze się nie spotkałeś. Struktura jest wartością, taką jak int: przypisanie jej kopiuje całą wartość. 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ą odwoływać się do jednego współdzielonego obiektu.)
transform.position jest właściwością, a jej odczyt przekazuje ci kopię pozycji. Dlatego transform.position.x = 0; zmieniłoby kopię, która natychmiast zostałaby odrzucona, a C# odmawia kompilacji takiego kodu: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Rozwiązaniem jest skopiowanie pozycji, zmienienie 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; // skopiuj
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
ŁatwyPopraw skrypt sań, aby się kompilował i utrzymywał sanie na podłodze oraz między ścianami.
- Zastąp dwa wiersze ustawiające
transform.position.yi.xkopią:Vector3 p = transform.position;. - Ustaw
p.y = Mathf.Max(p.y, 0.5f);ip.x = Mathf.Clamp(p.x, -4f, 4f);, a następnietransform.position = p;.
Naciśnij „Graj”: sanie lądują na podłodze, a ściany je zatrzymują. Następnie naciśnij „Sprawdź”.
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);
}
}
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Podstawy C# w Unity
Witaj, UnityZmienneLiczby dziesiętne wymagają fTekst w konsoliZmienne, które pamiętająIf i elsePorównywanie liczbPowtórka: Zbieracz monet4Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski z nazwamiPrzyciski myszyPowtórka: naładowany skok7Pętle i metody
Powtarzaj za pomocą forPętle wewnątrz pętliNapisz metodęMetody, które zwracają wynikTablicePowtórka: schody10Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż wyszukiwanieNull w UnityPowtórka: najbliższa moneta13Projekt: Unikaj bloków
BiegaczBloki z nieba2Wpraw to w ruch
Umieść sześcianPoruszaj w każdej klatceObracaj co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian5Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 to strukturaPodsumowanie: pilot drona8Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePowtórka: włącznik światłaPoćwicz samodzielnie: Edytor online Unity