Lapisan Tabrakan Kamera
Ikhtisar
ZepetoCamera yang dibuat melalui ZepetoPlayers dapat mengontrol tabrakan fisik antara kamera dan objek permainan melalui pengaturan Tabrakan Kamera.
Tabrakan Kamera adalah ketika kamera bertabrakan dengan objek di dalam adegan.
Jika Tabrakan Kamera diatur, ketika kamera bertabrakan dengan objek, kamera tidak akan dapat bergerak di depan objek tersebut, menyebabkan kamera tetap di depan objek daripada menembusnya.
Mari kita lihat dua contoh berikut.
- Di layar sebelah kiri, Tabrakan Kamera tidak diatur, memungkinkan kamera bergerak bebas tanpa terpengaruh oleh objek di sekitar karakter atau lantai.
- Di sebelah kanan, Tabrakan Kamera diaktifkan, sehingga kamera tidak akan dapat menembus dinding dan lantai saat bergerak.
Dengan mengaktifkan Tabrakan Kamera, gerakan kamera dipengaruhi secara fisik, yang berarti bahwa lokasi yang tidak dapat dilihat pemain tidak dapat diterangi oleh kamera, yang memungkinkan penggambaran yang lebih realistis.


Mengatur Kolisi Kamera ZepetoPlayers
1) Anda dapat mengatur kolisi yang dideteksi kamera per Lapisan.
- Untuk mengatur atau menambahkan lapisan pengguna, tekan menu drop-down Lapisan di jendela Inspektor dan pilih Tambah Lapisan.
- Lapisan yang dapat ditambahkan pengguna dapat bernomor Lapisan3 dan Lapisan6 atau lebih tinggi. Lapisan0 ~ 2 dan Lapisan4 ~ 5 adalah lapisan default Unity.


2) Pilih objek yang ingin Anda terapkan penilaian kolisi kamera, dan kemudian pilih lapisan yang telah Anda atur.


3) Sekarang, di bagian Kamera ZepetoPlayers, Anda dapat memilih lapisan yang ingin Anda daftarkan sebagai tabrakan dengan menekan tombol drop-down untuk Tabrakan. Periksa lapisan yang telah Anda tambahkan.


4) Sekarang tekan tombol Putar untuk menjalankan runtime dan Anda akan melihat bahwa Kamera Zepeto bergerak melalui lantai dan dinding tanpa menembusnya.


Mengaturnya sebagai skrip saat runtime
- Anda dapat menentukan Collision Kamera secara dinamis saat runtime.
- di bawah ini adalah skrip untuk mengatur nomor collisionLayer yang terdaftar sebagai variabel publik sebagai layer mask saat runtime.
- Kuncinya adalah untuk menentukan layer mask yang akan dipilih di ZepetoPlayers.instance.cameraData.layer.
import { LayerMask } from 'UnityEngine';
import { SpawnInfo, ZepetoPlayers } from 'ZEPETO.Character.Controller'
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import { WorldService } from 'ZEPETO.World';
export default class CameraCollisionManager extends ZepetoScriptBehaviour {
// Deklarasikan anggota publik untuk menyimpan array nomor layer collision
public collisionLayer: number[];
Start() {
// Buat Localplayer
ZepetoPlayers.instance.CreatePlayerWithUserId(WorldService.userId, new SpawnInfo(), true);
// Tambahkan pendengar acara untuk saat pemain lokal ditambahkan ke scene
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
// Atur layer collision kamera ke layer mask baru
ZepetoPlayers.instance.ZepetoCamera.CollisionLayer = this.SetNewLayerMask();
});
}
// Metode untuk membuat dan mengatur LayerMask baru berdasarkan layer collision
private SetNewLayerMask(): LayerMask {
let layerMaskValue = 0;
// Iterasi melalui array layer collision dan perbarui nilai layer mask
this.collisionLayer.forEach(layerNumber => {
layerMaskValue |= 1 << layerNumber;
});
// Buat LayerMask baru dan atur nilainya ke nilai layer mask yang dihitung
let newLayerMask: LayerMask = new LayerMask;
newLayerMask.value = layerMaskValue;
return newLayerMask;
}
}3. Deskripsi skrip
- Untuk menulis skrip lapisan dan menerapkannya pada kamera, kita perlu menggunakan LayerMask.
- LayerMask akan memiliki nilai yang dimasukkan melalui operasi bitwise.
- LayerMask diwakili sebagai nilai integer, di mana setiap bit menunjukkan apakah lapisan termasuk atau tidak.
- Sebagai contoh, jika LayerMask memiliki nilai 5 (00000101 dalam biner), kita dapat mengatakan bahwa lapisan 0 dan lapisan 2 termasuk.
- layerMaskValue |=: Operasi bitwise ini menggabungkan layerMaskValue yang ada dan nilai yang baru dihitung dalam operasi OR.
- Jika layerMaskValue yang ada adalah 00000001 dalam biner, dan nilai yang baru dihitung adalah 00000100, ORing kedua nilai tersebut akan menghasilkan 00000101 dalam biner.
- Ini memastikan bahwa baik lapisan 0 maupun lapisan 2 termasuk dalam LayerMask.
📘 Layer Mask Unity https://docs.unity3d.com/2020.3/Documentation/ScriptReference/LayerMask.html
- Dalam kasus EnhancedCamera, lapisan Pemain tidak diatur ke lapisan tabrakan kamera untuk mencegah kamera berinteraksi dengan karakter.