NPC (karakter non-pemain) dapat menambahkan banyak kedalaman pada sebuah pengalaman. Semua NPC berikut dapat disesuaikan secara visual, perilaku mereka dapat dimodifikasi, dan zombie/soldier bahkan dapat mempertahankan area dengan menyerang pemain atau karakter lain menggunakan sistem tag untuk menetapkan perilaku.
Untuk menggunakan NPC dalam permainan Anda:
Di halaman item NPC, klik tombol hijau Dapatkan dan konfirmasi transaksi.
Di Studio, buka Toolbox.
Pilih bagian Inventaris di toolbox Anda.

Temukan NPC dan klik untuk menambahkannya ke tempat.
Struktur karakter
Setiap model NPC biasanya memiliki objek berikut:
| Nama objek atau [Tipe] | Tipe | Deskripsi |
|---|---|---|
| Animasi | Folder | Berisi Animations, seperti AttackAnimation atau DeathAnimation. |
| Pose Awal | Folder | Berisi informasi pose. |
| Animate | Script | Memuat dan memutar animasi pada rig karakter. Lihat Animate untuk lebih jelasnya. |
| [Aksesoris] | Accessory | Salah satu dari beberapa Accessories untuk NPC seperti topi, senjata, dll. |
| Kesehatan | Script | Umumnya memperbaharui kesehatan Humanoid seiring waktu. Menonaktifkan ini akan mencegah karakter memperbaharui kesehatan. |
| Humanoid | Humanoid | Mengelola properti terkait Humanoid, seperti Humanoid.Health, Humanoid.WalkSpeed, Humanoid.DisplayDistanceType, dll. |
| NPC | Script | Menentukan perilaku khusus karakter seperti berkeliaran, menyerang, dll. Memparenting objek berikut: Maid (ModuleScript) mendefinisikan kelas yang berguna untuk membebaskan sumber daya yang digunakan. Ragdoll (ModuleScript) mendefinisikan fungsi yang mengubah karakter menjadi tubuh yang longgar dan dipengaruhi fisika (memparenting RigTypes ModuleScript yang mendefinisikan beberapa fungsi bantu). |
| RbxNpcSounds | Script | Menentukan dan mengelola perilaku terkait efek suara karakter seperti berlari, mati, dll. |
| BodyParts | BasePart | Berbagai bagian tubuh karakter yang terpasang pada HumanoidRootPart atau bagian tubuh yang berdekatan melalui Motor6D atau objek constraint. Lihat BodyParts untuk lebih jelasnya. |
| HumanoidRootPart | BasePart | Bagian khusus tak terlihat yang dianggap sebagai akar rig; ini juga merupakan PrimaryPart dari Model karakter. |
| Konfigurasi | Configuration | Berisi objek nilai yang mengatur berbagai perilaku. Lihat Konfigurasi untuk lebih jelasnya. |
Catatan desain
Saat menggunakan kit NPC, ingat catatan desain berikut:
Penampilan visual NPC dapat disesuaikan dengan menambahkan/memodifikasi berbagai objek [BodyParts] dan dengan menambahkan objek Accessory.
Soldier, Zombie Mengeluarkan Air Liur, dan Robot NP-C 9000 menggunakan Rthro sebagai dasar rig mereka. Namun, Robot RO-01 menggunakan basis Rthro yang dimodifikasi yang menambahkan bagian pendorong yang terhubung ke UpperTorso menggunakan WeldConstraints. Menggunakan sambungan sederhana dengan cara ini memungkinkan Anda untuk menyertakan geometri tambahan untuk karakter Anda tanpa mengubah rig dasar aslinya.
Pada tingkat dasar, animasi NPC dapat dikustomisasi dengan memodifikasi AnimationId dari objek Animasi yang ada di dalam pose skrip Animate, atau yang ada di dalam folder Animasi. Perubahan tersebut pada dasarnya adalah pertukaran aset - untuk mengubah detail yang lebih halus, Anda dapat membuat salinan kustom dari animasi yang ada, dan untuk memutar animasi dalam kondisi berbeda, Anda dapat mengedit skrip Animate atau NPC secara langsung. Untuk informasi lebih lanjut, lihat Animasi.
Animate
Skrip Script Animate di Model NPC menangani konfigurasi yang terkait dengan animasi dan berisi objek berikut:
| Nama objek atau [Tipe] | Tipe | Deskripsi |
|---|---|---|
| ScaleDampeningPercent | NumberValue | Menentukan bagaimana kecepatan animasi dimodifikasi saat karakter diperbesar (kurang dari 1 menunjukkan pemutaran animasi berkurang sebanding saat karakter diperbesar). |
| PlayEmote | BindableFunction | Ini dapat dipanggil oleh skrip lain untuk memaksa asumsi pose. |
| [Pose] | StringValue | Referensi ke kategori animasi yang dapat dimainkan seperti diam, melompat, berjalan, dll. Objek ini dapat memparenting sejumlah Animations. Objek Animations ini memparenting Weight (NumberValue) yang memprioritaskan satu dari beberapa animasi untuk dimainkan saat pose diambil; biasanya digunakan untuk menambah variasi pada pose diam dan tari. |
BodyParts
Bagian BodyPart BasePart di Model NPC mewakili berbagai bagian tubuh karakter dan berisi objek berikut:
| Nama objek atau [Tipe] | Tipe | Deskripsi |
|---|---|---|
| AvatarPartScaleType | StringValue | Menentukan bagaimana bagian akan diperbesar; nilai dapat Classic, ProportionsNormal, atau ProportionsSlender. |
| OriginalSize | Vector3Value | Menentukan ukuran bagian ketika skala karakter adalah 1. |
| [Attachment] | Attachment | Menentukan titik relatif terhadap bagian individu yang dapat digunakan skrip, efek, dan objek seperti Tool atau Accessory dalam penempatan. |
| [Motor6D] | Motor6D | Sendi yang dianimasikan antara dua bagian tubuh. Perhatikan bahwa Animator bergantung pada nama Motor6Ds untuk konsisten dengan nama Motor6Ds yang digunakan saat animasi dibuat, jadi hindari mengganti nama objek ini. |
| [Joint] | WeldConstraint, Constraint, JointInstance | Sendi yang tidak dianimasikan antara dua bagian tubuh. |
| [Sound] | Sound | Umumnya ditemukan di kepala atau HumanoidRootPart; memutar suara dari dalam rig yang dikontrol oleh skrip RbxNpcSounds. |
Konfigurasi
Setiap NPC menyertakan objek Configuration di dalam hierarkinya yang bertindak sebagai wadah objek nilai. Ini digunakan oleh skrip NPC untuk mengatur berbagai perilaku. Kecuali ditentukan lain, ini berlaku untuk semua karakter.
| Nama objek atau [Tipe] | Tipe | Deskripsi |
|---|---|---|
| DestroyOnDeath | BoolValue | Menyebabkan seluruh NPC dihancurkan segera setelah mati. Nonaktifkan ini agar ragdoll tetap ada. |
| PatrolEnabled | BoolValue | Menyebabkan NPC berkeliaran di area sekitar posisi awalnya. |
| PatrolRadius | NumberValue | Menentukan jarak maksimum yang dapat ditempuh NPC dari posisi awalnya, dengan asumsi PatrolEnabled adalah true. |
| RagdollEnabled | BoolValue | Menyebabkan NPC menjadi lemas saat mati, bukan hancur. |
| AttackDamage | NumberValue | Menentukan berapa banyak kesehatan yang hilang oleh korban saat diserang oleh NPC. Ini hanya berlaku untuk kit Zombie dan Soldier. |
| AttackDelay | NumberValue | Menentukan jumlah menit minimum antara serangan. Ini hanya berlaku untuk kit Soldier. |
| AttackMode | NumberValue | Menentukan apa yang akan diserang oleh soldier, berdasarkan sistem tagging. Ini hanya berlaku untuk kit Soldier. |
| AttackRadius | NumberValue | Menentukan jarak maksimum NPC harus dari korban potensial sebelum mencoba untuk menyerang. Ini hanya berlaku untuk kit Zombie dan Soldier. |
| ClipCapacity | NumberValue | Menentukan berapa banyak peluru yang bisa ditembakkan oleh soldier sebelum perlu melakukan reload. Ini hanya berlaku untuk kit Soldier. |
| ReloadDelay | NumberValue | Menentukan berapa banyak detik yang harus berlalu sebelum klip senjata soldier diisi ulang. Ini hanya berlaku untuk kit Soldier. |
Menetapkan tag
Skrip NPC menggunakan tag CollectionService untuk mengelola agresi terhadap karakter dan pemain lain. Berbagai tag dari tabel berikut dapat ditetapkan sebagai berikut:
Untuk menetapkan tag pada karakter Player, Anda dapat menambahkan Script ke StarterCharacterScripts dengan panggilan CollectionService:AddTag(). Misalnya:
local CollectionService = game:GetService("CollectionService")CollectionService:AddTag(script.Parent, "SoldierEnemy")
| Tag | Tujuan |
|---|---|
| SoldierEnemy atau SoldierFriend | Menentukan apakah soldier, berdasarkan nilai konfigurasi AttackMode, harus menyerang karakter lain. Saat AttackMode soldier diatur ke 1, karakter lain harus ditandai dengan SoldierEnemy agar dianggap dapat diserang. Saat AttackMode soldier diatur ke 2, semua objek tanpa tag SoldierFriend dianggap dapat diserang. Saat AttackMode soldier diatur ke 3, tag ini diabaikan sepenuhnya dan soldier akan menyerang semua karakter. |
| ZombieFriend | Tag ini digunakan oleh zombie untuk menentukan apakah ia tidak boleh menyerang karakter. Ketika diterapkan, zombie menjadi jinak terhadap karakter yang ditandai. |



