Update README

This commit is contained in:
2026-04-08 12:16:34 +07:00
parent 158a3038e3
commit 7cb68fdca2

568
README.md
View File

@@ -16,9 +16,9 @@
3. [Kiến trúc Kỹ thuật (Technical Architecture)](#-kiến-trúc-kỹ-thuật-technical-architecture) 3. [Kiến trúc Kỹ thuật (Technical Architecture)](#-kiến-trúc-kỹ-thuật-technical-architecture)
4. [Hệ thống Mê cung (Maze Generation)](#-hệ-thống-mê-cung-maze-generation) 4. [Hệ thống Mê cung (Maze Generation)](#-hệ-thống-mê-cung-maze-generation)
5. [Đồng bộ Mạng (Networking)](#-đồng-bộ-mạng-networking) 5. [Đồng bộ Mạng (Networking)](#-đồng-bộ-mạng-networking)
6. [Công cụ Phát triển (Developer Tools)](#-công-cụ-phát-triển-developer-tools) 6. [Hệ thống Comeback (Comeback System)](#-hệ-thống-comeback-đa-tầng-tiered-adaptive-system)
7. [Lộ trình Phát triển (Roadmap)](#-lộ-trình-phát-triển-roadmap) 7. [Lộ trình Phát triển (Roadmap)](#-lộ-trình-phát-triển-roadmap)
8. [Cấu trúc Thư mục (Folder Structure)](#-cấu-trúc-thư-mục-folder-structure) 8. [Cấu trúc Thư mục (Folder Structure)](#-cấu-trúc-thư-mục-dự-án-project-folder-structure)
9. [Hướng dẫn Cài đặt (Installation)](#-hướng-dẫn-cài-đặt-installation) 9. [Hướng dẫn Cài đặt (Installation)](#-hướng-dẫn-cài-đặt-installation)
--- ---
@@ -49,68 +49,82 @@ Dự án hướng tới việc tạo ra một trải nghiệm **"High-Stakes Hid
```mermaid ```mermaid
graph TD graph TD
%% Phase 1: Initialization & Synchronization %% Định nghĩa Style cho các nhóm
subgraph Initialization ["1. GIAI ĐOẠN KHỞI TẠO (NET-SYNC)"] classDef initStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#01579b;
A[Bắt đầu Trận đấu] --> B{Photon Fusion Matchmaking} classDef seekerStyle fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#e65100;
B --> C[Phân vai ngẫu nhiên: Seeker vs Trapper] classDef trapperStyle fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#4a148c;
C --> D[Maze Generator: Chạy đa thuật toán Prims/Wilsons] classDef netStyle fill:#eceff1,stroke:#263238,stroke-dasharray: 5 5,color:#263238;
D --> E[Baking NavMesh & Static Colliders] classDef winStyle fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px,color:#1b5e20;
E --> F[Character Auto-Setup: Sync Physical Bounds] classDef criticalStyle fill:#ffebee,stroke:#b71c1c,stroke-width:2px,color:#b71c1c;
F --> G[Spawn Players tại vị trí đối nghịch]
end
%% Phase 2: Core Loop (The Heart of the Game) %% Phase 1: Initialization
subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"] subgraph Initialization ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"]
A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking<br/>(Photon Fusion)"}
B --> C["🎭 Phân vai: Seeker vs Trapper"]
C --> D["🧩 Maze Generator<br/>(Prims/Wilsons)"]
D --> E["🏗️ Baking NavMesh & Colliders"]
E --> F["🧍 Character Auto-Setup"]
F --> G["📍 Spawn Players"]
end
class Initialization,A,B,C,D,E,F,G initStyle;
%% Phase 2: Core Loop
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"]
G --> Loop((TICK: FixedUpdateNetwork)) G --> Loop((TICK: FixedUpdateNetwork))
%% Seeker Branch %% Seeker Branch
subgraph Seeker_Logic ["SEEKER (POV 1st)"] subgraph Seeker_Logic ["<b>🏃 SEEKER (POV 1st)</b>"]
S1[Input: WASD / Space / Shift] --> S2[State Machine: Move/Run/Jump/Dash] S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
S2 --> S3{Hành động?} S2 --> S3{"⚡ Hành động?"}
S3 -- "Sprinting" --> S4[Phát ra tiếng động lớn - Noise Meter Up] S3 -- "Sprinting" --> S4["🔊 Noise Up"]
S3 -- "Sneaking" --> S5[Ẩn nấp - Noise Meter Down] S3 -- "Sneaking" --> S5["🤫 Noise Down"]
S3 -- "Flashlight" --> S6[Nhìn rõ đường - Tốn Pin - Lộ vị trí] S3 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
S4 & S5 & S6 --> S_Check{Check Environment} S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
S_Check -- "Dẫm bẫy" --> S_Trap[Khống chế/Lộ diện] S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
S_Check -- "Gặp cửa/đèn" --> S_Interact[Interact Logic]
end end
%% Trapper Branch %% Trapper Branch
subgraph Trapper_Logic ["TRAPPER (STRATEGY VIEW)"] subgraph Trapper_Logic ["<b>🕸️ TRAPPER (STRATEGY)</b>"]
T1[Input: Mouse / Hotkeys] --> T2[View: Map Sơ đồ nhiệt / Camera] T1["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
T2 --> T3{Hành động?} T2 --> T3{"🛠️ Kỹ năng?"}
T3 -- "Đặt bẫy" --> T4[Trừ tài nguyên Bẫy - Sync mạng] T3 -- "Đặt bẫy" --> T4["🪤 Sync Trap"]
T3 -- "Pulse Scan" --> T5[Ping vị trí Seeker tạm thời] T3 -- "Scan" --> T5["📡 Ping Seeker"]
T3 -- "Lock Door" --> T6[Khóa đường đi Seeker] T3 -- "Lock" --> T6["🚪 Khóa cửa"]
T4 & T5 & T6 --> T_Check{Theo dõi Seeker} T4 & T5 & T6 --> T_Check{"👁️ Theo dõi"}
end end
%% Networking Layer %% Networking Layer
subgraph Network_Sync ["NETWORK SYNC (PHOTON FUSION)"] subgraph Network_Sync ["<b>🌐 NETWORK SYNC</b>"]
Loop --> NS1[Client-Side Prediction] Loop --> NS1["⏩ Client Prediction"]
NS1 --> NS2[Server Reconciliation] NS1 --> NS2["🔄 Server Reconciliation"]
NS2 --> NS3[State Sync: Networked Properties] NS2 --> NS3["📦 State Sync"]
end end
end end
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
class Network_Sync,NS1,NS2,NS3,Loop netStyle;
class S_Trap criticalStyle;
%% Phase 3: Condition & Results %% Phase 3: Results
subgraph Result_Logic ["3. ĐIỀU KIỆN THẮNG & COMEBACK"] subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"]
S_Check -- "Chạm Exit" --> Win_S[SEEKER THẮNG] S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
T_Check -- "Bắt được Seeker" --> Win_T[TRAPPER THẮNG] T_Check -- "Bắt được Seeker" --> Win_T["🏆 TRAPPER THẮNG"]
Loop -- "Timer = 0" --> Win_T Loop -- "Timer = 0" --> Win_T
Win_S & Win_T --> Post_Match[Cập nhật Rank / Thống kê] Win_S & Win_T --> Post_Match["📊 Thống kê Rank"]
Post_Match --> Buff{Check Chuỗi Thắng/Thua} Post_Match --> Buff{"⚖️ Balance Check"}
Buff -- "Người thua" --> Buff_Apply[Kích hoạt Comeback Buffs cho Round sau] Buff -- "Thua cuộc" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
Buff_Apply --> A Buff_Apply --> A
end end
class Win_S,Win_T winStyle;
class Result_Logic,Post_Match,Buff,Buff_Apply initStyle;
%% Connections %% Interactions (Dashed Lines)
S_Trap -.->|Phát tín hiệu cảnh báo| T_Check S_Trap -.->|Cảnh báo| T_Check
S4 -.->|Hiển thị sóng âm trên Map| T2 S4 -.->|Sóng âm| T2
T4 -.->|Tạo Collision ẩn| S_Check T4 -.->|Collision ẩn| S_Check
NS3 --> Loop NS3 --> Loop
``` ```
@@ -118,29 +132,116 @@ graph TD
## 🏗️ Kiến trúc Kỹ thuật (Technical Architecture) ## 🏗️ Kiến trúc Kỹ thuật (Technical Architecture)
### 1. Advanced Player State Machine ### 1. Advanced Player & Camera State Machine
Hệ thống điều khiển nhân vật sử dụng mô hình **Hierarchical State Machine** kết hợp với **Photon Fusion**, cho phép xử lý các trạng thái phức tạp một cách mượt mà.
Hệ thống điều khiển nhân vật không chỉ quản lý hành động mà còn điều phối **Camera Dynamics** để tăng cường cảm giác nhập vai và đồng bộ hóa hướng nhìn qua mạng.
```mermaid ```mermaid
stateDiagram-v2 stateDiagram-v2
[*] --> Idle direction TB
Idle --> Moving: Movement Input
Moving --> Running: Sprint Input %% Định nghĩa các Style giả lập qua ghi chú (vì stateDiagram-v2 hạn chế classDef trực tiếp)
Running --> Idle: Stop
Moving --> Sneaking: Sneak Input
state "Airborne Logic" as Airborne { state "🕹️ GROUND LOCOMOTION (STEALTH & SPEED)" as Ground {
Jump --> Falling [*] --> Idle
Falling --> Grounded
state Idle {
direction LR
I_Phys: Vel < 0.1m/s
I_Cam: Breathing Cycle (0.5Hz)
}
Idle --> Moving: Input.mag > 0.1
state Moving {
direction LR
M_Phys: Speed 2-4m/s
M_Cam: Head Bob (1.2Hz, Amp 0.05)
}
Moving --> Sneaking: OnSneak (Hold)
state Sneaking {
direction LR
Sn_Phys: Speed 1.5m/s | Noise -50%
Sn_Cam: Height -0.5m | FOV 55 (Focus)
}
Moving --> Sprinting: OnSprint (Hold) && Stamina > 0
state Sprinting {
direction LR
Sp_Phys: Speed > 6.5m/s | Noise +100%
Sp_Cam: FOV 60->85 (Dynamic) | Motion Blur
}
Sprinting --> Moving: Stamina == 0 || !SprintInput
Sneaking --> Moving: !SneakInput
} }
state "🌪️ AIRBORNE & KINETIC IMPACT" as Air {
state Jump {
J_Phys: AddForce(Vector3.up * Power)
J_Cam: Instant Y-Kick (Recoil)
}
state Falling {
F_Phys: Gravity * 1.5 (Fast Fall)
F_Cam: FOV Stretch | Wind SFX
}
state Landing {
L_Phys: Impact Velocity Check
L_Cam: Hard/Soft Shake (Z-Axis Roll)
}
Jump --> Falling: Vel.y < 0
Falling --> Landing: IsGrounded == true
}
state "⚡ ACTION & ABILITY LAYER" as Utility {
state Dashing {
D_Phys: Linear Velocity Burst (15m/s)
D_Cam: Lens Distortion (Radial) | Trail VFX
}
state Interacting {
Int_Phys: Root Motion Lock
Int_Cam: Contextual Smooth Look-at
}
}
state "🌐 NETWORK RECONCILIATION LAYER" as Net {
state InputAuthority {
IA: Local Prediction (Zero Latency)
IA: Buffer Tick N
}
state StateAuthority {
SA: Server Snapshot (Tick N-3)
SA: Verification & Correction
}
IA --> SA: [Networked] CamRotation
SA --> IA: Teleport/Snap if Error > 0.5m
}
%% Hệ thống góc nhìn bất đối xứng (Asymmetric Views)
state "🎭 ROLE SPECIFIC VIEWPORTS" as Roles {
state Seeker_FPS {
S_View: 1st Person POV
S_Logic: Raycast Flashlight | Noise Meter UI
}
state Trapper_STRAT {
T_View: Top-Down Orthographic / Isometric
T_Logic: Heatmap Overlay | CCTV Switcher
}
}
%% Transitions chính
Ground --> Air: !IsGrounded (Coyote Time: 0.2s)
Air --> Ground: OnLand Event
Ground --> Utility: OnAbilityTrigger
Utility --> Ground: OnAnimationEnd
Moving --> Jump: Jump Input note left of Ground: Sync: [Networked] Velocity, MoveState
Airborne --> Idle: Land note right of Net: Fusion: FixedUpdateNetwork() Loop
Moving --> Dashing: Dash Input
Dashing --> Moving: Complete
Interact --> Idle: Action Key
``` ```
### 2. Environment Scanner & Interaction ### 2. Environment Scanner & Interaction
@@ -163,39 +264,58 @@ Trái tim của **HALLUCINATE** là hệ thống tạo mê cung đa thuật toá
```mermaid ```mermaid
graph TD graph TD
subgraph Grid_Logic ["1. CẤU TRÚC LỚP BẢN ĐỒ (GRID LOGIC)"] %% Định nghĩa Style
ML[MapLocation Class: x, z] --> Map[byte[,] map: 1=Wall, 0=Corridor] classDef lossStyle fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#c62828;
Map --> Init[InitialiseMap: Toàn bộ là Wall - byte 1] classDef tier1Style fill:#fff8e1,stroke:#fbc02d,stroke-width:2px,color:#f57f17;
classDef tier2Style fill:#fff3e0,stroke:#fb8c00,stroke-width:2px,color:#e65100;
classDef tier3Style fill:#fbe9e7,stroke:#ff5722,stroke-width:2px,color:#bf360c;
classDef systemStyle fill:#f5f5f5,stroke:#424242,stroke-width:2px,color:#424242;
classDef winStyle fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20;
%% Quy trình chính
Start(("💔 <b>PLAYER LOSES ROUND</b>")) --> Streak{{"📊 Check Loss Streak"}}
%% Phân tầng Buff
subgraph Buff_Pools ["<b>🔥 HỆ THỐNG CÂN BẰNG ĐỘNG (COMEBACK POOLS)</b>"]
Streak -- "1 Trận" --> T1
Streak -- "2 Trận" --> T2
Streak -- "3+ Trận" --> T3
T1["🥉 <b>Tier 1: Awakening</b><br/>(Small Boosts)"]
T2["🥈 <b>Tier 2: Evolution</b><br/>(Tactical Advantage)"]
T3["🥇 <b>Tier 3: Manifestation</b><br/>(Game Changer)"]
%% Ví dụ chỉ số (Tooltip-like)
T1 --- T1_Ex["+10% Speed<br/>+15% Stamina Regen"]
T2 --- T2_Ex["Bẫy tàng hình (Trapper)<br/>Giảm 50% tiếng ồn (Seeker)"]
T3 --- T3_Ex["Nhìn xuyên tường 5s<br/>Hồi sinh 1 lần tại chỗ"]
end end
subgraph Algorithm_Engine ["2. ENGINE THUẬT TOÁN (GENERATION)"] %% Giai đoạn áp dụng
Init --> Choice{Algorithm Selector} T1 & T2 & T3 --> Selection{{"🎲 Selection Mode"}}
Choice -- "Prims" --> P1[Tree Growth: Start at Random Cell] Selection -- "Manual" --> P1["Người chơi tự chọn 1 trong 3 Buff"]
P1 --> P2[Add Neighbors to Wall List] Selection -- "Auto" --> P2["Hệ thống chọn ngẫu nhiên"]
P2 --> P3[Connect to random Tree-Cell & Carve Corridor]
P1 & P2 --> Apply["✨ <b>Apply to Next Round Only</b><br/>(Trạng thái: Active)"]
Choice -- "Wilsons" --> W1[Loop-Erased Random Walk]
W1 --> W2[Walk until hit existing Tree]
W2 --> W3[Carve path into Map - byte 0]
Choice -- "Crawler" --> C1[Spawn N Crawlers at Map Center]
C1 --> C2[Random Walk & Carve 0s based on CountSquareNeighbors]
C2 --> C3[Limit by Map Width/Depth Bounds]
end
subgraph Post_Processing ["3. XỬ LÝ HẬU KỲ & MESH GEN"] %% Kết quả vòng đấu sau
P3 & W3 & C3 --> Neighbor[Neighbor Checks: CountSquare / Diagonal Neighbors] Apply --> Result{{"🏁 New Round Result?"}}
Neighbor --> Scale[Scaling System: WorldPos = GridPos * scale]
Scale --> Mesh[Mesh Generator: Instantiate Prefabs / Primitive Cubes]
Mesh --> Nav[NavMesh Runtime Surface Baking for Trapper AI]
end
subgraph Interaction_Injection ["4. TIÊM VẬT THỂ (INJECTION)"] Result -- "🏆 WIN" --> Reset["♻️ <b>Reset Streak</b><br/>Remove All Buffs"]
Nav --> Lamp[LampInteractable: Light Intensity & State Sync] Result -- "❌ LOSS" --> Increment["📈 <b>Increase Streak</b><br/>Progress to Next Tier"]
Nav --> Door[DoorInteractable: Physics Bounds & Animation State]
Nav --> Exit[Exit Strategy: Calc Farthest Node for Goal Spawn] %% Vòng lặp
end Reset --> NewGame(("🎮 Fair Match"))
Increment --> Start
%% Gán Style
class Start,Increment lossStyle;
class T1,T1_Ex tier1Style;
class T2,T2_Ex tier2Style;
class T3,T3_Ex tier3Style;
class Selection,P1,P2,Apply systemStyle;
class Result,Reset,NewGame winStyle;
``` ```
--- ---
@@ -207,85 +327,73 @@ Sử dụng **Photon Fusion (State Sync)** với cơ chế Client-Side Predictio
### Network Data Flow & Synchronization ### Network Data Flow & Synchronization
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
participant IR as InputReader (Local) autonumber
participant CP as Local Player (Input Authority)
participant S as Server (State Authority) %% Định nghĩa các bên tham gia với Icon
participant RP as Remote Proxy (Other Clients) participant IR as 🖱️ Input Reader (Local)
box rgb(235, 245, 255) "CLIENT (Input Authority)"
participant CP as 👤 Local Player<br/>(Predictive Simulation)
end
box rgb(255, 243, 224) "NETWORK LAYER"
participant NT as 🌐 Photon Fusion Buffer
end
box rgb(232, 245, 233) "SERVER (State Authority)"
participant S as 🖥️ Headless Server<br/>(Validation)
end
box rgb(243, 229, 245) "OTHER CLIENTS (Proxies)"
participant RP as 👥 Remote Proxies<br/>(Interpolation)
end
Note over IR, CP: [TICK N] Thu thập Input từ Keyboard/Mouse %% --- GIAI ĐOẠN 1: THU THẬP INPUT ---
IR->>CP: OnMove / OnSprint / OnJump Events rect rgb(200, 230, 250)
CP->>CP: Đóng gói vào NetworkInputData {move, rot, sprint} Note over IR, CP: [TICK N] Giai đoạn lấy dữ liệu đầu vào
IR->>CP: OnMove(Vector2), OnJump(bool)
CP->>CP: Encode NetworkInputData {Buttons, Angles}
end
%% --- GIAI ĐOẠN 2: DỰ ĐOÁN & GỬI DỮ LIỆU ---
rect rgb(255, 248, 225)
Note over CP, NT: [FixedUpdateNetwork] Khởi chạy vòng lặp mạng
CP->>CP: 🏃 Client-Side Prediction:<br/>Áp dụng vận tốc & Physics ngay lập tức
CP->>NT: Reliable/Unreliable Input Packet
NT-->>S: Transport Layer (UDP/Photon Bolt)
end
%% --- GIAI ĐOẠN 3: XÁC THỰC TẠI SERVER ---
rect rgb(232, 245, 233)
Note right of S: SERVER SIMULATION (Tick N)
S->>S: Dequeue Input từ Buffer
S->>S: Thực thi Logic: Move -> Collision Check -> Stamina
S->>S: Ghi đè [Networked] Properties (State Authority)
end
%% --- GIAI ĐOẠN 4: ĐỒNG BỘ HÓA & HIỆU CHỈNH ---
S-->>NT: Broadcast State Snapshot (Tick N)
Note over CP, S: [FIXED UPDATE NETWORK] par Hồi đáp Local Player
CP->>S: Send Input (Unreliable / Reliable Data) NT-->>CP: State Snapshot
Note over CP: 🔄 RECONCILIATION
Note right of S: Kiểm tra Logic & Thẩm quyền (Simulation) alt Nếu vị trí sai lệch > Threshold
S->>S: Apply Input to State Machine (Tick currentState) CP->>CP: Hard Snap / Resimulate từ Tick lỗi
S->>S: Tính toán Velocity & Collision (CharacterController) else Khớp dữ liệu
S->>S: Cập nhật [Networked] properties: CamRot, StateName CP->>CP: Tiếp tục Simulation
end
S-->>CP: State Reconciliation (Nếu sai lệch vị trí > Error Threshold) and Cập nhật các Player khác
S-->>RP: State Sync: Cập nhật Position, Rotation, Animator State NT-->>RP: State Snapshot
Note over RP: 🎞️ INTERPOLATION
Note over RP: INTERPOLATION & RENDERING RP->>RP: Lerp từ Snapshot (N-1) sang Snapshot (N)
RP->>RP: Render: Cập nhật Visuals dựa trên State Sync (Smoothing) end
%% --- GIAI ĐOẠN 5: HIỂN THỊ (MONOBEHAVIOUR) ---
rect rgb(245, 245, 245)
Note over CP, RP: [LateUpdate / Render Loop]
CP->>CP: Update Visual: Camera Shake, VFX
RP->>RP: Render Smooth Mesh Motion
end
``` ```
--- ---
## 📂 Cấu trúc Thư mục Dự án (Project Folder Structure)
Dự án được tổ chức theo tiêu chuẩn công nghiệp (Standard Industry Practices), tách biệt rõ ràng giữa logic Code, Assets và Configuration.
```text
E:/Learning_Progress/Projects/HALLUCINATE/
├── Assets/ # Tài nguyên chính của trò chơi
│ ├── Scripts/ # Logic Code (C#) - Được module hóa cao
│ │ ├── Attributes/ # Các Custom Attributes phục vụ Inspector
│ │ ├── Camera Controller/ # Hệ thống Camera (Follow, Shake, Zoom)
│ │ ├── Debug/ # Công cụ gỡ lỗi tại Runtime
│ │ ├── Fusion/ # Logic Networking (Spawner, Data, Rpc)
│ │ │ └── BasicSpawner.cs # Khởi tạo Runner & Quản lý Session
│ │ ├── GameSetup/ # Logic khởi tạo thế giới
│ │ │ ├── Maze/ # Hệ thống tạo mê cung đa thuật toán
│ │ │ │ ├── Crawler.cs # Thuật toán Walkers ngẫu nhiên
│ │ │ │ ├── Prims.cs # Thuật toán MST (Minimal Spanning Tree)
│ │ │ │ ├── Wilsons.cs # Thuật toán Loop-Erased Walk
│ │ │ │ └── Maze.cs # Lớp cơ sở điều phối Generation
│ │ │ └── CharacterAutoSetup.cs # Tự động cấu hình CharacterController
│ │ ├── Interactables/ # Hệ thống tương tác (IInteractable)
│ │ │ ├── DoorInteractable.cs # Logic đóng/mở & Chặn đường
│ │ │ ├── LampInteractable.cs # Hệ thống ánh sáng (On/Off)
│ │ │ └── BaseInteractable.cs # Lớp trừu tượng cho mọi vật thể
│ │ ├── Interface/ # Chứa các bản thiết kế chung (IInteractable.cs)
│ │ ├── Player Controller/ # Trái tim của Gameplay - State Machine
│ │ │ ├── PlayerStateMachine.cs # Điều phối các trạng thái chính
│ │ │ ├── InputReader.cs # Xử lý Input tập trung (New Input System)
│ │ │ └── States/ # Các lớp trạng thái riêng biệt (Idle, Run, Jump, Dash...)
│ │ ├── Optimization/ # Các Script tối ưu hóa (Culling, Object Pooling)
│ │ ├── UI/ # Quản lý giao diện người dùng
│ │ └── VFX/ # Điều khiển hiệu ứng hình ảnh (Particle, Shader)
│ ├── Prefabs/ # Các đối tượng được dựng sẵn (Player, Shrine, Camera)
│ ├── document/ # Tài liệu thiết kế, sơ đồ & Ảnh Preview
│ ├── Scenes/ # Các màn chơi (Main Scene, Lobby, Test Scenes)
│ ├── Materials/ # Các vật liệu (PBR, Cell-Shading cho Anime Model)
│ ├── Models/ # Các mô hình 3D (Humanoid F/M, Anime Models)
│ ├── Animation/ # Hệ thống Animator Controllers & FBX Clips
│ ├── Photon/ # SDK Photon Fusion & Các Plugin Networking
│ ├── TextMesh Pro/ # Tài nguyên cho hệ thống Text chất lượng cao
│ └── Settings/ # Cấu hình URP, Input System & Physics
├── ProjectSettings/ # Cấu hình toàn cục của Unity Editor
│ ├── TagManager.asset # Quản lý Layer (Ground, Interactable)
│ ├── DynamicsManager.asset # Cấu hình Physics (Gravity, Collision Matrix)
│ └── MultiplayerManager.asset # Cấu hình Networking Roles & Stripping
├── Packages/ # Quản lý các Unity Package (manifest.json)
└── README.md # Tài liệu này
```
---
---
## ⚖️ Hệ thống Comeback Đa tầng (Tiered Adaptive System) ## ⚖️ Hệ thống Comeback Đa tầng (Tiered Adaptive System)
Để đảm bảo mỗi trận đấu đều kịch tính đến giây cuối cùng, HALLUCINATE áp dụng hệ thống **"Despair Mechanics"**. Người chơi có chuỗi thua càng dài sẽ nhận được quyền năng từ mê cung càng lớn, tạo ra những khoảnh khắc lật kèo kinh điển. Để đảm bảo mỗi trận đấu đều kịch tính đến giây cuối cùng, HALLUCINATE áp dụng hệ thống **"Despair Mechanics"**. Người chơi có chuỗi thua càng dài sẽ nhận được quyền năng từ mê cung càng lớn, tạo ra những khoảnh khắc lật kèo kinh điển.
@@ -322,28 +430,8 @@ Khi Trapper để xổng mất con mồi, mê cung sẽ hiến tế sự ổn đ
--- ---
### 🧠 Logic Cân bằng & Reset (Balance Logic)
```mermaid
graph TD
Loss[Player Loses Round] --> Streak{Check Streak}
Streak -- "1 Loss" --> T1[Tier 1 Pool: Awakening]
Streak -- "2 Losses" --> T2[Tier 2 Pool: Evolution]
Streak -- "3+ Losses" --> T3[Tier 3 Pool: Manifestation]
T1 & T2 & T3 --> Selection{Random/Manual Selection}
Selection --> Apply[Apply to Next Round Only]
Apply --> Result{Outcome?}
Result -- "Win" --> Reset[Reset Streak: Remove All Buffs]
Result -- "Loss" --> Streak
```
---
## 🚀 Lộ trình Phát triển (Roadmap) ## 🚀 Lộ trình Phát triển (Roadmap)
- [x] **Phase 1: Foundation** - [x] **Phase 1: Foundation**
- [x] Player State Machine (Idle, Move, Run, Jump). - [x] Player State Machine (Idle, Move, Run, Jump).
- [x] Maze Generation (Multi-algorithm). - [x] Maze Generation (Multi-algorithm).
@@ -355,16 +443,122 @@ graph TD
--- ---
## 🤝 Hướng dẫn Cài đặt (Installation) ## 📂 Cấu trúc Thư mục Dự án (Project Folder Structure)
Dự án được tổ chức theo tiêu chuẩn công nghiệp (Standard Industry Practices), tách biệt rõ ràng giữa logic Code, Assets và Configuration.
```text
📦 HALLUCINATE
├── 🌸 Assets/ (Trái tim của trò chơi)
│ ├── 📜 Scripts/ (Phép thuật điều khiển logic)
│ │ ├── 🏷️ Attributes/ # Tùy biến Inspector xinh xắn
│ │ ├── 🎥 Camera Controller/ # Ánh nhìn của nhân vật
│ │ ├── 🛠️ Debug/ # Đội cứu hộ lỗi (Fix-it!)
│ │ ├── 🌐 Fusion/ # Sợi dây kết nối mọi người (Networking)
│ │ │ └── 🚀 BasicSpawner.cs
│ │ ├── 🏗️ GameSetup/ # Kiến tạo thế giới ảo
│ │ │ ├── 🌀 Maze/ # Mê cung huyền bí
│ │ │ │ ├── 🐾 Crawler.cs # Những bước chân ngẫu nhiên
│ │ │ │ ├── 🌳 Prims.cs # Cây khung tối tiểu
│ │ │ │ ├── 🧵 Wilsons.cs # Bước đi không vòng lặp
│ │ │ │ └── 🗺️ Maze.cs # Nhạc trưởng mê cung
│ │ │ └── 🧍 CharacterAutoSetup.cs
│ │ ├── 🖱️ Interactables/ # Những vật thể biết nói
│ │ │ ├── 🚪 DoorInteractable.cs
│ │ │ ├── 💡 LampInteractable.cs
│ │ │ └── 💎 BaseInteractable.cs
│ │ ├── 📐 Interface/ # Bản thiết kế chung (IInteractable)
│ │ ├── 🏃‍♀️ Player Controller/ # Linh hồn của Gameplay
│ │ │ ├── 🧠 PlayerStateMachine.cs
│ │ │ ├── ⌨️ InputReader.cs
│ │ │ └── 🎭 States/ # Cảm xúc hành động (Idle, Run, Jump...)
│ │ ├── ⚡ Optimization/ # Phép màu mượt mà (60 FPS!)
│ │ ├── 🖥️ UI/ # Giao diện dễ thương
│ │ └── 🎆 VFX/ # Bụi tiên và ánh sáng
│ ├── 🧸 Prefabs/ # Những món đồ chơi dựng sẵn
│ ├── 📖 document/ # Sách bí kíp (Design & Diagrams)
│ ├── 🎬 Scenes/ # Những sân khấu kịch
│ ├── 🎨 Materials/ # Lớp áo lấp lánh (Cell-Shading)
│ ├── 👸 Models/ # Những cư dân Anime 3D
│ ├── 💃 Animation/ # Điệu nhảy của nhân vật
│ ├── 🔌 Photon/ # Cổng dịch chuyển không gian (SDK)
│ ├── 🅰️ TextMesh Pro/ # Những dòng chữ nghệ thuật
│ └── ⚙️ Settings/ # Cấu hình thế giới (URP & Physics)
├── 🛠️ ProjectSettings/ # Quy tắc của vũ trụ Unity
│ ├── 🏷️ TagManager.asset # Phân loại tầng mây
│ ├── 🌍 DynamicsManager.asset # Trọng lực & Va chạm
│ └── 📡 MultiplayerManager.asset # Quy tắc chơi chung
├── 📦 Packages/ # Những chiếc túi thần kỳ
└── 📝 README.md # Lời chào từ Creator (。•̀ᴗ-)✧
```
---
## 🤝 Hướng dẫn Cài đặt & Khởi chạy (Installation & Setup)
Để trải nghiệm **HALLUCINATE** một cách mượt mà nhất, vui lòng thực hiện theo các bước chi tiết dưới đây:
### 1. Yêu cầu Hệ thống
* **Unity Editor:** Phiên bản **6000.3.10f1 (Unity 6)** trở lên.
* **Hệ điều hành:** Windows 10/11 hoặc macOS (M1/M2/Intel).
* **Disk Space:** Tối thiểu 5GB trống để chứa Project và Library.
### 2. Tải về & Mở dự án
1. **Clone Repository:** 1. **Clone Repository:**
```bash ```bash
git clone https://github.com/OnlyScove/HALLUCINATE.git git clone https://github.com/OnlyScove/HALLUCINATE.git
``` ```
2. **Unity Version:** Đảm bảo bạn sử dụng Unity **6000.3.10f1** (Unity 6). 2. Mở **Unity Hub**, chọn **Add** -> **Add project from disk**.
3. **Photon Fusion:** AppID cấu hình ti `Photon/Fusion/Resources/PhotonAppSettings`. 3. Tìm đến thư mục vừa clone và nhấn **Open**. Chờ Unity Hub ti các Packages cần thiết (có thể mất vài phút).
### 3. Cấu hình Photon Fusion (Bắt buộc)
Trò chơi yêu cầu **AppID** hợp lệ để hoạt động qua mạng:
1. Đăng nhập vào [Photon Engine Dashboard](https://dashboard.photonengine.com/).
2. Tạo một ứng dụng mới với loại App là **Fusion**.
3. Sao chép **App ID** vừa tạo.
4. Trong Unity Editor, đi đến: `Photon` -> `Fusion` -> `Network Project Settings`.
5. Dán App ID vào mục **App Id Fusion** (cho cả Realtime và Fusion).
6. Đảm bảo **Network Mode** được đặt là `Client/Server` (để hỗ trợ State Authority).
### 4. Khởi chạy Trò chơi
1. Mở Scene chính tại: `Assets/Scenes/Main Scene.unity`.
2. Sử dụng **Smart Bootstrapper** (nằm ở thanh Menu trên cùng) để tự động cấu hình Runner.
3. Nhấn nút **Play** trong Unity Editor.
4. Để test Multiplayer, bạn có thể build ra file `.exe` hoặc sử dụng công cụ **ParrelSync** (nếu đã cài) để chạy hai instance cùng lúc.
--- ---
**© 2026 ONLYSCOVE STUDIOS.** ## 💖 Support & Community
<p align="center">
<a href="https://github.com/OnlyScove/HALLUCINATE/stargazers">
<img src="https://img.shields.io/github/stars/OnlyScove/HALLUCINATE?style=for-the-badge&logo=github&color=yellow" alt="Stars">
</a>
<a href="https://github.com/OnlyScove/HALLUCINATE/network/members">
<img src="https://img.shields.io/github/forks/OnlyScove/HALLUCINATE?style=for-the-badge&logo=github&color=blue" alt="Forks">
</a>
<a href="https://github.com/OnlyScove">
<img src="https://img.shields.io/github/followers/OnlyScove?style=for-the-badge&logo=github&color=green" alt="Follow">
</a>
</p>
<p align="center">
<a href="https://www.buymeacoffee.com/yourname">
<img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Donate-orange?style=for-the-badge&logo=buy-me-a-coffee&logoColor=white" alt="Buy Me A Coffee">
</a>
<a href="https://discord.gg/yourlink">
<img src="https://img.shields.io/badge/Discord-Join%20Community-7289DA?style=for-the-badge&logo=discord&logoColor=white" alt="Discord">
</a>
<a href="https://ko-fi.com/yourname">
<img src="https://img.shields.io/badge/Ko--fi-Support-red?style=for-the-badge&logo=ko-fi&logoColor=white" alt="Ko-fi">
</a>
</p>
<p align="center">
<img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FOnlyScove%2FHALLUCINATE&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=Visitors&edge_flat=false" alt="Visitors">
</p>
---
**© 2026 SCOVANIA STUDIOS.**
*Hallucinate is more than a game, it's a social experiment.* *Hallucinate is more than a game, it's a social experiment.*