113 lines
14 KiB
Plaintext
113 lines
14 KiB
Plaintext
Giai đoạn 1: Xây dựng Nền tảng (Core Architecture)
|
|
Mục tiêu: Tạo bộ khung cơ bản, xử lý các logic chung nhất mà bất kỳ bẫy nào cũng phải có, đặc biệt là đảm bảo tính đồng bộ trên mạng.
|
|
|
|
Create Base Trap System: Tạo một class cha (ví dụ: TrapBase.cs). Tất cả các bẫy sau này sẽ kế thừa từ class này. Class này nên chứa các biến chung như máu của bẫy, thời gian tồn tại, và các hàm ảo (virtual functions) như OnTrigger(), OnDestroy().
|
|
|
|
Add Trap Ownership System: Thêm logic xác định người chơi nào đã đặt bẫy (lưu trữ ID của người chơi). Điều này rất quan trọng để tính điểm hạ gục hoặc tránh việc bẫy gây sát thương lên chính đồng đội.
|
|
|
|
Synchronize Traps Online: Khởi tạo các thành phần đồng bộ mạng (như NetworkObject nếu dùng Photon Fusion). Đảm bảo rằng khi một bẫy được sinh ra (spawn), toàn bộ client trong phòng đều nhận biết được sự tồn tại của nó.
|
|
|
|
Create Trap Prefabs: Dựng các Prefab cơ bản ban đầu cho bẫy (có gắn Mesh, Collider, và script TrapBase).
|
|
|
|
Giai đoạn 2: Hệ thống Đặt Bẫy (Placement & UI)
|
|
Mục tiêu: Cho phép người chơi tương tác, đặt bẫy xuống môi trường một cách hợp lệ và hiển thị thông tin lên màn hình.
|
|
|
|
Implement Trap Placement: Xử lý logic bắn Raycast từ camera hoặc người chơi để xác định vị trí hợp lệ trên mặt đất (Terrain/Sàn nhà) và Spawn Prefab tại đó.
|
|
|
|
Add Trap Placement Limit: Giới hạn số lượng bẫy tối đa mà một người chơi có thể đặt cùng lúc để tối ưu hiệu suất và cân bằng game.
|
|
|
|
Add Trap Cooldown: Thêm bộ đếm thời gian (timer) để ngăn người chơi spam bẫy liên tục.
|
|
|
|
Create Trap UI Indicator: Cập nhật UI hiển thị icon bẫy, thời gian hồi chiêu (Cooldown), số lượng bẫy còn lại, hoặc hiển thị bóng mờ (ghost mesh) trước khi người chơi click đặt bẫy.
|
|
3. Các bước tiếp theo (Giai đoạn 2-3)
|
|
Đăng ký bẫy lên Fusion và gán cho
|
|
3a. Gán TrapPrefab vào TrapDataSO Player
|
|
|
|
Mỗi .asset trong Assets/TEST CUA TUAN/TRAP/ cần: Context
|
|
47,412 tokens
|
|
- Kéo TrapPrefab tương ứng vào ô TrapPrefab (BearTrapData → BearTrap_Network...) 24% used
|
|
- Set GhostPrefab (shadow preview mesh) $0.00 spent
|
|
- Set Icon, PlaceSFX, TriggerSFX, TriggerVFX
|
|
LSP
|
|
3b. Tạo Layer "StealthTrap" trong Tags & Layers LSPs are disabled
|
|
|
|
Vào Edit > Project Settings > Tags and Layers, tạo User Layer (ví dụ Layer 10) tên StealthTrap. Code ConfigureVisibility() trong TrapBase.cs đã dùng layer này để ẩn bẫy với
|
|
Seeker.
|
|
|
|
3c. Cấu hình Camera Culling
|
|
|
|
- Camera của Seeker: Trong Culling Mask, bỏ tick layer StealthTrap → bẫy sẽ hoàn toàn tàng hình
|
|
- Camera của Trapper: Giữ tick layer Default để thấy bẫy
|
|
|
|
3d. Tạo UI Trap Selection & Cooldown
|
|
|
|
Thêm Hotbar UI hiển thị:
|
|
|
|
- Icon 4 bẫy (đã có sẵn trong TrapDataSO.Icon)
|
|
- Cooldown overlay (xám đi khi đang CD)
|
|
- Số lượng bẫy còn lại (nếu có limit)
|
|
|
|
3e. Thêm Trap Placement Limit
|
|
|
|
Hiện tại TrapPlacementController chưa giới hạn số bẫy. Cần thêm [Networked] int trapsPlaced trong PlayerData và kiểm tra trong TryPlaceTrap().
|
|
⬖ Getting started ✕
|
|
3f. Kiểm tra đồng bộ mạng
|
|
OpenCode includes free models
|
|
Build 2 client, test flow: so you can start immediately.
|
|
|
|
- Trapper nhấn Q → ghost preview hiện → Click Left Mouse → RPC gửi lên Host → Runner.Spawn() → cả 2 client thấy trap Connect from 75+ providers to
|
|
- Seeker chạy qua → OnTriggerEnter server-side → gọi OnTriggered() → damage/stun/VFX/SFX đồng bộ
|
|
|
|
Giai đoạn 3: Logic Kích hoạt & Vòng đời (Trigger & Lifecycle)
|
|
Mục tiêu: Xử lý những gì xảy ra khi kẻ địch dẫm phải bẫy và cách bẫy biến mất.
|
|
|
|
Add Trap Trigger Detection: Xử lý va chạm (ví dụ: OnTriggerEnter). Phân loại rõ đối tượng chạm vào là ai (kẻ địch, đồng đội hay chính mình) để quyết định kích hoạt.
|
|
|
|
Add Trap Animation & Add Trap Sound Effects: Gắn Animator và AudioSource vào Base System. Kích hoạt hiệu ứng hình ảnh/âm thanh khi bẫy nổ hoặc sập xuống.
|
|
|
|
Add Trap Interaction Effects: Kích hoạt các Particle System (hiệu ứng hạt) hoặc apply sát thương cơ bản/hiệu ứng vật lý lên người dẫm phải.
|
|
|
|
Add Trap Despawn Logic: Logic dọn dẹp bẫy. Hủy GameObject sau khi đã kích hoạt xong, hoặc sau một khoảng thời gian tồn tại nhất định để giải phóng bộ nhớ.
|
|
|
|
Giai đoạn 4: Cơ chế Tầm nhìn (Visibility & Counterplay)
|
|
Mục tiêu: Tạo chiều sâu chiến thuật cho game bằng cách cho phép giấu bẫy và dò bẫy.
|
|
|
|
Add Trap Visibility Logic: Làm cho bẫy tàng hình hoặc mờ đi với phe địch, nhưng vẫn hiển thị rõ với người đặt và đồng đội. Có thể can thiệp qua Layer hoặc thay đổi Shader/Material.
|
|
|
|
Add Trap Reveal Mechanic: Chức năng cho phép kẻ địch phát hiện bẫy ẩn (ví dụ: lại gần trong bán kính 3m, hoặc dùng một kỹ năng dò đường đặc biệt).
|
|
|
|
Giai đoạn 5: Phát triển các Bẫy Cụ thể (Concrete Trap Types)
|
|
Mục tiêu: Kế thừa class TrapBase để tạo ra các loại bẫy với chức năng riêng biệt. Bạn có thể làm nhóm nào trước tùy theo độ ưu tiên của dự án.
|
|
|
|
Nhóm Sát thương & Khống chế:
|
|
|
|
Create Bear Trap Logic (Trói chân, sát thương đơn mục tiêu)
|
|
|
|
Create Spike Trap Logic (Sát thương vật lý diện rộng)
|
|
|
|
Create Poison Gas Trap (Sát thương theo thời gian - DoT, giảm tầm nhìn)
|
|
|
|
Create Net Trap Logic (Khống chế/Bắt giữ)
|
|
|
|
Nhóm Chiến thuật & Thông tin:
|
|
|
|
Create Sound Trap Logic (Phát ra âm thanh lớn)
|
|
|
|
Create Alarm Trap Logic (Ping lên minimap hoặc báo động cho phe mình)
|
|
|
|
Create Flashbang Trap (Làm mù mắt kẻ địch trong thời gian ngắn)
|
|
|
|
Create EMP Trap Logic (Vô hiệu hóa kỹ năng/màn hình UI của robot địch)
|
|
|
|
Nhóm Đánh lừa (Deception):
|
|
|
|
Create Fake Trap Logic (Bẫy giả không có tác dụng, chỉ để hù dọa)
|
|
|
|
Create Decoy Trap Logic (Tạo hình nhân/hologram giả mạo)
|
|
|
|
Create Fake Exit Trap & Add Exit Lock Trap (Bẫy liên quan đến lối thoát hiểm để dụ địch)
|
|
|
|
Giai đoạn 6: Kiểm thử (Testing & Polish)
|
|
Test Multiplayer Trap Sync: Build game ra ít nhất 2 client khác nhau. Kiểm tra xem bẫy của Client A đặt xuống thì Client B có nhìn thấy đúng trạng thái tàng hình không, khi dẫm vào thì âm thanh và sát thương có đồng bộ chính xác trên cả 2 máy không.
|
|
|
|
Việc đi theo trình tự này giúp bạn có một "cái móng" (Giai đoạn 1, 2, 3) thật chắc. Đến Giai đoạn 5, việc thêm một cái bẫy mới chỉ đơn giản là tạo script mới kế thừa TrapBase và viết thêm đúng logic đặc thù của nó mà không phải code lại phần mạng hay UI. |