Mengenal fondasi Unreal Engine: Blueprints visual scripting vs C++, actor sebagai objek dunia, dan level sebagai dunia game, lalu membangun project Unreal pertama dengan karakter bergerak yang siap dikembangkan

Setelah Unity dan Godot, sekarang kita lengkapi trio engine dengan Unreal Engine — engine kelas AAA yang menguasai game 3D berkualitas sinematik, dari game action hingga simulator. Unreal berbeda dari dua engine sebelumnya dalam satu hal besar: Blueprints, sistem visual scripting yang memungkinkan logika dibangun tanpa menulis kode, berdampingan dengan C++ untuk kontrol penuh.
Mengapa belajar Unreal jika fokus kita 2D? Karena (1) banyak studio memakai Unreal untuk 3D, (2) konsep actor/level adalah bahasa bersama industri, dan (3) kemampuan C++ tetap menjadi nilai jual karir yang tinggi. Kalian tidak harus jadi ahli — cukup paham cara Unreal memandang dunia, supaya perbandingan antar engine lengkap.
Di Unreal, dua istilah yang paling sering muncul:
Setiap actor punya Components (mirip Unity) yang menambah kemampuan, dan semua actor punya lifecycle: BeginPlay (setara Start/_ready) dan Tick (setara Update/_process). Struktur level Rimba Runner 3D di Outliner:
Level: Level1
├── BP_Runner (Actor: CharacterMovement + CapsuleCollision + Mesh)
├── Floor (Static Mesh Actor)
├── Obstacles (Static Mesh Actors)
└── PlayerController (Player Controller)Inilah perbedaan terbesar Unreal. Blueprints adalah visual scripting: logika disusun dari node-nod grafik yang dihubungkan — seperti flowchart. C++ memberi kontrol penuh atas performa dan sistem. Keputusan "Blueprint atau C++" adalah keputusan arsitektur yang menentukan gaya tim kalian.
| Aspek | Blueprint | C++ |
|---|---|---|
| Kecepatan prototipe | Sangat cepat | Lambat (perlu compile) |
| Performa | Cukup untuk sebagian besar | Terbaik |
| Mudah diubah designer | Ya, visual | Tidak |
| Kontrol low-level | Terbatas | Penuh |
| Risiko konflik merge | Tinggi (file biner) | Standar (teks) |
Praktik industri yang umum: C++ untuk sistem inti (fisika, AI, networking, sistem besar) dan Blueprint di atasnya untuk gameplay ringan & tuning. Rantai C++ → Blueprint: kelas C++ mengekspos fungsi/properti (UPROPERTY(BlueprintReadWrite)), lalu designer mengatur nilainya di editor tanpa menyentuh kode.
Contoh Blueprint paling sederhana — membuat karakter berjalan maju saat tombol W ditekan: mulai dari node Event Tick, cek IsInputKeyDown untuk key W, lalu panggil AddMovementInput pada arah forward. Di C++:
void ARunnerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
PlayerInputComponent->BindAxis("MoveForward", this, &ARunnerCharacter::MoveForward);
}
void ARunnerCharacter::MoveForward(float Value)
{
AddMovementInput(GetActorForwardVector(), Value);
}Ritme kerjanya sama dengan episode 3-4: baca input, petakan ke aksi, gunakan movement component. Perbedaan utamanya adalah Unreal menuntut lebih banyak konfigurasi eksplisit (input axis, movement component, collision setup) sebelum sesuatu bisa berjalan.
Ikuti langkah-langkah di Epic Games Launcher (Unreal 5.x):
RimbaRunner3D.Cube (Search → Cube Static Mesh) ke dunia, geser jadi platform.Character. Buka blueprint, perhatikan komponen CharacterMovement, CapsuleComponent, dan Mesh.MoveForward ke W/S dan Turn ke mouse X. Tempelkan fungsi MoveForward di atas ke blueprint (atau langsung di C++).BP_PlayerCharacter. Tekan Play di toolbar.[x] Project Third Person (Blueprint) dibuat
[x] Paham viewport, outliner, details, content browser
[x] Actor Cube diletakkan di dunia
[x] BP_Character punya CharacterMovement + input bound
[x] Karakter bisa berjalan di level saat PlayWarning
Unreal adalah engine terberat di trio ini. Compile shader pertama kali dan build lighting bisa memakan waktu beberapa menit bahkan pada mesin kuat. Jangan panik — ini normal. Pastikan GPU dedicated dan RAM ≥ 16 GB agar pengalaman mengedit tetap nyaman.
Dua konsep yang wajib diluruskan sejak awal di Unreal: collision channels dan GameMode. Collision di Unreal memakai object types dan channels — bukan sekadar "solid/tidak solid" seperti di Godot. Setiap actor punya respon terhadap channel lain: block, overlap, atau ignore. Ini memberi kontrol halus: karakter diblokir tembok tapi hanya overlap dengan volume trigger.
Mengatur respon di C++:
CapsuleComponent->SetCollisionResponseToChannel(
ECC_GameTraceChannel1, // channel custom (misal "interact")
ECR_Overlap
);Untuk gameplay, kalian mendefinisikan channel custom (misal Player, Enemy, Interact) lewat Project Settings → Collision, lalu memilih respon tiap pasangan. Ini terlihat rumit di awal, tapi justru mencegah bug collision "kategori tak sengaja saling menghalangi" yang menyakitkan di project besar.
GameMode menentukan aturan level: karakter apa yang spawn, player controller mana yang dipakai, dan bagaimana flow game bekerja. Di Unreal, satu level punya GameMode; game yang kompleks mengganti GameMode per level/mode. Ini setara dengan mengatur state game level (episode 2) — Unreal hanya menamainya dan menaruhnya sebagai asset yang bisa dipilih.
Kalian sekarang telah merasakan tiga engine besar — perspektif langka yang sangat berharga di industri.
Inti yang harus dibawa pulang:
BeginPlay/Tick identik dengan Start/Update di engine lain.Di episode 6 selanjutnya kita masuk ke inti profesi: gameplay programming — player controller, input handling, dan game mechanics, lengkap dengan praktik membangun gameplay loop Rimba Runner yang utuh. Sampai jumpa di episode 6!