Vector3 Bir Struct'tır
Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 29 / 85.
Vector3, henüz karşılaşmadığın bir tür olan bir struct'tır. Struct, int gibi bir değerdir: atadığında tamamı kopyalanır. Vector3 b = a; b.x = 9; işleminden sonra b ayrı bir kopya olduğu için a.x değişmeden kalır. (Sınıf ise tam ters şekilde çalışır: iki değişken aynı paylaşılan nesneye başvurabilir.)
transform.position bir özelliktir ve okuduğunda konumun bir kopyasını verir. Bu nedenle transform.position.x = 0; hemen atılacak bir kopyayı değiştirirdi ve C# kodun derlenmesini reddeder: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Çözüm, konumu kopyalamak, kopyayı değiştirmek ve tekrar atamaktır. Bu çalıştırıcı, Space tuşuna basıldığında orta şeride döner:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // kopyala
p.x = 0; // kopyayı değiştir
transform.position = p; // değiştirilen kopyayı geri ata
}Son satırı çıkarırsan kod derlenir, ancak hiçbir şey hareket etmez: yalnızca kopya değişmiştir. transform.localScale ve diğer Vector3 özellikleri de aynı şekilde çalışır.
Görev
KolayKızak betiğinin derlenmesini sağlayarak yerde ve duvarların arasında kalmasını sağla.
transform.position.yve.xdeğerlerini ayarlayan iki satırı şu kopyalamayla değiştir:Vector3 p = transform.position;.p.y = Mathf.Max(p.y, 0.5f);vep.x = Mathf.Clamp(p.x, -4f, 4f);ayarla, ardındantransform.position = p;yaz.
“Oyna” düğmesine bas: kızak yere iner ve duvarlar onu durdurur. Ardından “Kontrol et” düğmesine bas.
Kendin dene
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;
// Kızağı zeminde ve duvarların arasında tut.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler
1Unity'de C# Temelleri
Merhaba, UnityDeğişkenlerOndalık Sayılar için f GerekirKonsolda MetinHatırlayan DeğişkenlerEğer ve DeğilseSayıları KarşılaştırmaTekrar: Coin Collector4Girdi
Basılı, Basılı Tutulmuş, BırakılmışEksenlerAdlandırılmış DüğmelerFare DüğmeleriTekrar: Zıplama Yükleme7Döngüler ve Metotlar
for ile tekrarlamaİç içe döngülerBir metot yazmaYanıt veren metotlarDizilerTekrar: Merdiven10Nesneleri Bulma
Ada Göre BulEtiketlerTüre Göre BulReferanslar Bulmaktan İyidirUnity'de NullÖzet: En Yakın Madeni Para13Proje: Bloklardan Kaç
KoşucuGökyüzünden Bloklar5Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir Struct'tırTekrar: Drone Pilotu8GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı3Inspector
Inspector AlanlarıSerializeFieldOndalıklı Sayılar ve MathfInspector ÖzellikleriTekrar: Asansör6Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarBayrağı Göndere ÇekÖlçekNesnelere BakBir Noktaya Doğru Hareket EtTekrar: Yörüngedeki Ay9Proje: Yıldızı Yakala
YakalayıcıDüşen Bir YıldızKendi başına pratik yap: Unity playground