Menu
CoddyTech

Vector3 adalah Struct

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 22 dari 67.

Vector3 adalah sebuah struct, jenis tipe yang tidak dibahas dalam perjalanan belajar C#. Struct adalah nilai, seperti int: saat kamu menetapkannya, seluruh nilainya disalin. Setelah Vector3 b = a; b.x = 9;, a.x tidak berubah karena b adalah salinan terpisah. (class bekerja dengan cara sebaliknya: dua variabel dapat merujuk ke satu object yang sama.)

transform.position adalah property, dan saat dibaca, kamu mendapatkan salinan posisi. Jadi, transform.position.x = 0; akan mengubah salinan yang langsung dibuang, dan C# menolak untuk mengompilasinya: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Solusinya adalah menyalin posisi, mengubah salinannya, lalu menetapkannya kembali. Runner ini kembali ke lajur tengah saat Space ditekan:

if (Input.GetKeyDown(KeyCode.Space))
{
    Vector3 p = transform.position;   // salin
    p.x = 0;                          // ubah salinannya
    transform.position = p;           // tetapkan kembali nilainya
}

Jika baris terakhir dihilangkan, kodemu berhasil dikompilasi, tetapi tidak ada yang bergerak: hanya salinannya yang berubah. transform.localScale dan property Vector3 lainnya bekerja dengan cara yang sama.

challenge icon

Tantangan

Mudah

Kereta luncur jatuh dengan kecepatan fall unit per detik, dan tombol panah menggesernya sepanjang sumbu x. Dua baris seharusnya menjaganya tetap di lantai (y tidak pernah di bawah 0.5) dan di antara dinding (x dari -4 hingga 4), tetapi skrip tidak bisa dikompilasi.

Tekan Play untuk melihat error. Perbaiki dua baris dengan mengerjakan salinan posisi, sambil mempertahankan fungsinya, lalu tekan Check.

Coba sendiri

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;

        // Jaga agar kereta luncur tetap di lantai dan di antara dinding.
        transform.position.y = Mathf.Max(transform.position.y, 0.5f);
        transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Scripting Unity