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.
Tantangan
MudahKereta 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);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar Scripting Unity
1Skrip Pertamamu
Halo, UnityLetakkan KubusBergerak di Setiap FrameBerputar Setiap DetikKendalikan dengan TombolRingkasan: Kendarai Kubus4Vektor
Menjumlahkan VektorArahRuang Lokal dan DuniaKecepatan DiagonalJarak antara BendaVector3 adalah StructRingkasan: Pilot Drone7Proyek: Tangkap Bintang
Si PenangkapBintang Jatuh5Transformasi dan Hierarki
Objek Induk dan AnakSkalaMenghadap ke ObjekBergerak Menuju TitikRangkuman: Bulan yang Mengorbit6GameObject dan Komponen
Referensi di InspectorMendapatkan KomponenKomponen yang HilangMenambahkan KomponenRequireComponentTampilkan dan SembunyikanRangkuman: Sakelar Lampu