Menu
CoddyTech

Vector3 Bir Yapıdır

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 22 / 67.

Vector3 bir struct'tır; C# öğrenme sürecinde ele alınmayan bir türdür. Bir struct, int gibi bir değerdir: atandığında tamamı kopyalanır. Vector3 b = a; b.x = 9; işleminden sonra a.x değişmeden kalır, çünkü b ayrı bir kopyadır. (Bir class ise bunun tersidir: iki değişken aynı paylaşılan nesneyi gösterebilir.)

transform.position bir özelliktir ve okunduğunda konumun bir kopyasını verir. Bu nedenle transform.position.x = 0; hemen atılacak bir kopyayı değiştirirdi ve C# bunun derlenmesine izin vermez: 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 runner, Space'e 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;           // 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.

challenge icon

Görev

Kolay

Kızak saniyede fall birim hızla düşer ve oklar onu x ekseni boyunca kaydırır. İki satır, onu yerde tutmalı (y hiçbir zaman 0.5'in altına düşmemeli) ve duvarların arasında tutmalı (x -4 ile 4 arasında), ancak betik derlenmiyor.

Hataları görmek için Play düğmesine bas. Konumun bir kopyası üzerinde çalışarak yaptıkları şeyi koruyup bu iki satırı düzelt, ardından Check 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);
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler