Kami menggunakan sistem berikut untuk mendukung kedua sistem gameplay yang fунctional, serta tujuan apa pun dari persyaratan desain utama.
GunakanManajer
GunakanManajer menyediakan API sederhana untuk menerapkan objek yang diambil ke sesuatu, seperti potongan pakaian berwarna di manikin. Fungsi utama untuk API ini adalah Use
Kami bisa menghapus "menggunakan" dengan UseManager.RemoveUse , yang biasanya berguna ketika misi selesai atau item spesifik "digunakan". Selain itu, kami bisa menambahkan atau menghapus target dengan AddUseTargets dan RemoveUseTargets .
Highlights
K
Ini LocalScript menggunakan fitur mesin baru Highlight yang menarik garis besar
HighlightItemsFunc digunakan untuk berkomunikasi dengan sistem klien lainnya. Misalnya, EventManager menggunakann
Lore dan PemikiranGelembung
Lore dan ThoughtBubbles adalah 2 sistem serupa. Lore menggunakan ScreenGui sebagai wadah UI on
Lore dilaksanakan dalam LoreManger LocalScript . Ketika diklik atau disentuh, itu mengeksekusi raycast menggunakan fungsi pembantu
Catat bahwa kami menggunakan Camera.ViewportPointToRay atau Camera.ScreenPointToRay untuk membangun ray, tergantung apakah itu dipanggil dari non-触摸 atau sentuh. Koordinatnya berada
PemikiranGelembung mirip keseluruhan, menggunakan raycast untuk memeriksa apakah meshes atau orang tuanya memiliki label PemikiranGelembung . Ini juga menggunakan attribute ThoughtText untuk teks, dan tag PemikiranGelembung untuk menunjuk ke objek pemasangan UI di dunia. Pemikiran gelembung yang menggunakan positional objek yang
Kasus Khusus
Lore memiliki beberapa kasus khusus, salah satunya adal LoreManager juga menangani kasus khusus dengan menunjukkan adegan kecil saat mengklik pintu yang dinonaktifkan yang terkunci sampai pemain mengambil sel pintu ruangan.
Pada ItemIndicator
Kami ingin menunjukkan berbagai ikon di tengah layar ketika pemain menganggap item tertentu dari minat. Skrip klien OnItemindicator melakukan raycast di sekitar kamera Class.CFrame.LookVector dan menganalisis hasilnya. Berdasarkan hasilnya, itu menetapkan gambar di OnItemIndicator2 ScreenGui .
Ketika tidak ada item yang menarik ditghost, ikon default adalah dot kecil. Kita bisa menetapkan setiap ikon dengan menambahkan attribute OnItemIndicator ke mesh spesifik, menggunakan nama dari onItemIndicatorImages , seperti Hand, Eye, atau DoorCurrentlyLocked. Ikon hanya diperlukan dalam kas
Jenis memeriksa beberapa dalam urutan prioritas. Setelah OnItemIndicator mengambil alih, kami memeriksa apakah itu adalah tas tangan atau Drawer untuk ikon "tangan" melalui salah satu utils.CanGrabModel(model) at
highlightItemsFunc:Invoke({"GetType", curInst})
Label Lore dan ThoughtBubble ditinjau kemudian dengan memeriksa label. Untuk pintu, kami memiliki 2 ikon yang berbeda: DoorCurrentlyClosed dan DoorAlwaysLocked . 1> DoorManager1> menetapkan attribute true
Manajer Pintu
The DoorManager LocalScript menggunakan label Pintu dan 1> Class.CollectionService1> untuk mengelola pembukaan dan penutupan pintu. Door memiliki tombol depan dan belakang yang kitahubungkan
Setiap pintu memiliki sistem negara sederhana, DoorState (Tutup, Membuka, Membuka, Menutup), dengan tweens digunakan untuk transisi. Kami dapat mengaktifkan atau menonaktifkan kemampuan pintu untuk membuka atau menutup dari sistem eksternal dengan menelepon DoorManager.EnableDoor, yang menetapkan atribut Do
Animator Utama
The MasterAnimator LocalScript memutar gambar animasi (atau atlas tekst
Objek dengan animasi SurfaceGui memiliki Animator Class.ModuleScript</
Animasi Luar Angkasa Lokal
The Animasi Lokal LocalScript menggunakan tag LocalSpaceRotation untuk memutar sebagian besar objek "kosmetik" dengan kecepatan rotasi dan penunda
Manajer Kunci Pintu
The HeadlampManager LocalScript handle ketika pengguna meng選擇 on-screen ImageButton untuk menyalakan lampu di at
Manajer Kursi
Kami tidak ingin pemain secara otomatis duduk ketika dekat dengan objek yang mereka duduki. Sebalik
Manajer Drawer
Skrip DrawerManager menggunakan label Drawer2 dan CollectionService untuk menangani klik di Drawer untuk membukanya atau menutupnya, dan memutar audio yang sesuai. Tindakan pembukaan dan penutupan dilakukan dengan menetapkan TargetPosition untuk menjadi Class.PrismaticConstraint .
Volume Pembunuhan
Di beberapa daerah dari area permainan utama, seperti berkilauan api dan air di dekat awal jalan menuju rumah, seorang pemain dapat menetapkan Humanoid.Health mereka menjadi 0 ketika memasuki
PemutarMissionRespawn
Skrip PlayerMissionRespawn menggunakan tag RespawnVolume dan CollectionService untuk menangani volume yang membuat pemain respawn saat disentuh. Kami menempatkan volume ini di bawah ruang tamu yang rusak, kare
Ketika menangani GameEvents.PlayerRespawn, script dapat menggunakan RespawnPositions, jika konfigurasi misi menyediakannya. Jika tidak, itu menggunakan <
Sistem Pembantu Kecil
Manajer Piano
Skrip PianoManager menggunakan label Piano dan CollectionService untuk menambahkan 1> Class.ClickDetector|ClickDetectors1> dan memutar salah satu dari suara piano saat diklik di keyboard.
Dukungan Ritual
Lobi di mana pemain menempatkan selubung tanda memiliki kontraption yang rumit yang mengalami perubahan saat setiap selubung tanda ditempatkan di lokasi yang ditentukan. Misalnya, tergantung pada jumlah selubung tanda yang ditempatkan,
Manajer yang Dapat Dipulihkan
Beberapa objek yang dapat disalah ambil penting untuk gameplay, seperti seal, dan kami tidak ingin mereka tersesat jika seorang pemain menjatuhkannya di suatu tempat. Jika objek memiliki label RestorableManager, script <
Portal
Dalam beberapa misi, kami mengirim pemain sejauh dalam misi, seperti mengirim pemain kembali yang jatuh dari platform berputar. Untuk mempermudah pengaturan jenis teleportasi ini, yang kami sebut "Portal" dalam script, fungsi pengguna Process
P1.Touched:Connect(function(otherPart) utils.ProcessPortal(otherPart, P2) end)
ProcessPortal menangani memeriksa bahwa bagian lain adalah manusia, menyebarkan pemain melalui koordinasi CFrame , dan memanggil potongan kecil untuk menyembunyikan transisi menggunakan acara Teleport_Jump di 0> 1> EventManager 1> .
Skrip Konfigurasi
Kami memiliki beberapa konfigurasi, definisi data, dan skrip fungsionalitas umum: DemoConfig . Definisi misi. Numerasi untuk game states, acara untuk komunikasi antara klien-server. DemoGlobalSettings . Kami mengembangkan di satu tempat, tetapi rilis (dan playtest) di tempat lain. Skrip memeriksa placeID dan mengaktifkan/menonaktifkan berbagai cheat dan fungsi debug. DemoUtilities . Berbagai fungsi utilitas. Menangani transformasi. Mengatur visibilitas, posisi, atau property lainnya. Mengklik untuk poin di dalam kotak. Menemukan objek dalam hierarki dengan nama "dotted". Mengelola TempStorage (yang dapat digunakan untuk menempatkan model "suatu tempat jauh" dan menghap AudioUtilities . Beberapa fungsi untuk memutar suara acak berat dari atur. GrabUtil . Fungsi pengambil untuk mengambil.