Menu
CoddyTech

Vector3 adalah Struct

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 29 dari 85.

Vector3 adalah struct, jenis tipe yang belum kamu pelajari. Struct adalah nilai, seperti int: saat kamu menetapkannya, seluruh nilainya akan 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 kamu membacanya, kamu mendapatkan salinan posisi. Jadi, transform.position.x = 0; akan mengubah salinan yang langsung dibuang, dan C# menolak untuk meng-compile-nya: 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 jalur 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 kamu menghilangkan baris terakhir, kodenya berhasil di-compile, tetapi tidak ada yang bergerak: hanya salinannya yang berubah. transform.localScale dan property Vector3 lainnya bekerja dengan cara yang sama.

challenge icon

Tantangan

Mudah

Buat skrip kereta luncur berhasil dikompilasi agar tetap berada di lantai dan di antara dinding.

  1. Ganti dua baris yang mengatur transform.position.y dan .x dengan salinan: Vector3 p = transform.position;.
  2. Atur p.y = Mathf.Max(p.y, 0.5f); dan p.x = Mathf.Clamp(p.x, -4f, 4f);, lalu transform.position = p;.

Tekan tombol “Main”: kereta luncur mendarat di lantai dan dinding menghentikannya. Lalu tekan tombol “Periksa”.

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);
    }
}

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity