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.
Tantangan
MudahBuat skrip kereta luncur berhasil dikompilasi agar tetap berada di lantai dan di antara dinding.
- Ganti dua baris yang mengatur
transform.position.ydan.xdengan salinan:Vector3 p = transform.position;. - Atur
p.y = Mathf.Max(p.y, 0.5f);danp.x = Mathf.Clamp(p.x, -4f, 4f);, lalutransform.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
1Dasar-Dasar C# di Unity
Halo, UnityVariabelDesimal Memerlukan fTeks di ConsoleVariabel yang Menyimpan NilaiIf dan ElseBandingkan AngkaUlasan: Pengumpul Koin7Perulangan dan method
Ulangi dengan forPerulangan di dalam perulanganTulis methodMethod yang Mengembalikan NilaiarrayUlasan: Tangga10Menemukan Benda
Cari Berdasarkan NamaTagCari Berdasarkan TipeReferensi Lebih Baik daripada FindNull di UnityRangkuman: Koin Terdekat13Proyek: Hindari Balok
Karakter PelariBalok dari Langit2Buat Bergerak
Tempatkan KubusBergerak Setiap FrameBerputar Setiap DetikKemudikan dengan TombolRangkuman: Kemudikan Kubus5Vektor
Menjumlahkan VektorArahRuang Lokal dan DuniaKecepatan DiagonalJarak AntarobjekVector3 adalah StructRangkuman: Pilot Drone8GameObjects dan Komponen
Referensi di InspectorAmbil KomponenKomponen yang HilangTambahkan KomponenRequireComponentTampilkan dan SembunyikanRingkasan: Sakelar Lampu6Transformasi dan Hierarki
Objek Induk dan AnakKibarkan BenderaSkalaMelihat BendaBergerak Menuju TitikRekap: Bulan yang MengorbitLatihan sendiri: Playground Unity