5.1 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
VampireLike is a Unity 2022.3 LTS action survival game project using a GameMain + GameFramework layered architecture. The project uses C# with 4-space indentation, K&R braces, and UTF-8 with BOM encoding.
Build & Development Commands
- Open in Unity Editor:
Unity -projectPath . - Open solution in IDE:
VampireLike.sln - Run from Launcher scene: Open
Assets/Launcher.unityin Editor and press Play - Run tests via Unity Editor:
Window > General > Test Runner - Run EditMode tests via CLI:
Unity -batchmode -projectPath . -runTests -testPlatform editmode -quit -logFile Logs/editmode-tests.log
Architecture
Code Organization
Assets/GameMain/Scripts/- Game business code (UI, Entity, Procedure, Events, DataTable)Assets/GameFramework/- Shared framework/runtime and editor extensionsAssets/Plugins/- Third-party plugins (e.g., DOTween)Assets/Launcher.unity- Entry point scene
GameFramework (Base Framework)
The framework provides modular components accessible via GameEntry.<ComponentName>:
GameEntry.Event- Event system (subscribe/unsubscribe pattern)GameEntry.Entity- Entity management (show/hide/instantiate pooled objects)GameEntry.UI- UI form managementGameEntry.DataTable- Data table loadingGameEntry.Procedure- Finite state machine proceduresGameEntry.Resource- Resource loading- Other components: Config, Scene, Sound, Setting, ObjectPool, Fsm, etc.
GameEntry is partially generated. Custom components are initialized in GameEntry.Custom.cs.
UI Architecture (Controller/UseCase/View Pattern)
UI forms follow a layered pattern in Assets/GameMain/Scripts/UI/:
- Controller - Inherits
UIFormControllerCommonBase<Context, Form>. Handles input events, subscribes to game events, manages UI lifecycle - UseCase - Business logic layer (e.g.,
ShopFormUseCase). Pure logic without Unity dependencies - View - MonoBehaviour UGuiForm. Handles presentation only
Context objects (e.g., ShopFormContext) carry display data to the View layer.
Entity System
Entities are game objects managed by GameEntry.Entity:
Assets/GameMain/Scripts/Entity/EntityLogic/- Entity classes (Player, Enemy, Weapon, Coin, Exp, Effect)Assets/GameMain/Scripts/Entity/EntityData/- Entity data objects (spawn configuration)- Weapon attack effects implement
IWeaponAttackEffectinterface - Target selectors implement
ITargetSelector(NearestTargetSelector, LowestHealthTargetSelector, HighestHealthTargetSelector)
Simulation System (ECS-like)
Assets/GameMain/Scripts/Simulation/SimulationWorld.cs provides a data-oriented simulation layer:
- Separates simulation data (
*SimDatastructs) from presentation (MonoBehaviour entities) - Uses
SimulationWorld.Tick()to advance simulation state - Data flows through: JobDataChannel -> Jobs (enemy/projectile/collision logic) -> OutputCommit -> Presentation sync
- Enemy separation uses spatial indexing and temporal avoidance
- Tests in
Assets/Tests/Simulation/validate simulation behavior
Component Pattern
Gameplay components in Assets/GameMain/Scripts/Components/:
MovementComponent- Handles movement with direction/speedAttackComponent- Attack logicHealthComponent- HP managementStatComponent- Stats with modifiers (additive/multiplicative)AbsorbComponent- Pickup absorptionInputComponent- Player inputBackpackComponent- Inventory
Components use OnInit() initialization and OnUpdate() per-frame logic.
Procedure System
Procedures in Assets/GameMain/Scripts/Procedure/ manage game flow state machine:
ProcedureStartMenu- Menu sceneProcedureStressTest- Stress test mode- Procedures transition via
GameEntry.Procedure
Data Tables
Data tables in Assets/GameMain/Scripts/DataTable/ (DR prefix = Data Row):
- DRBullet, DREnemy, DREntity, DRGoods, DRLevel, DRLevelRarity, DRLevelUpReward, DRMusic, DRProp, DRRole, DRScene, DRSound, DRUIForm, DRUISound, DRWeapon
- Loaded via
GameEntry.DataTable
Events
Custom events in Assets/GameMain/Scripts/CustomEvent/ follow *EventArgs naming. Subscribe via GameEntry.Event.Subscribe(EventArgs.EventId, handler).
Enum Definitions
Enums in Assets/GameMain/Scripts/Definition/Enum/: BulletType, CampType, EnemyType, GoodsType, ItemRarity, RelationType, StatType, UIFormType, WeaponType
Coding Conventions
- C# with 4-space indentation, K&R braces
- One main type per file, file name matches type name
PascalCasefor public types/members,camelCasefor locals/parameters[SerializeField] privatefor Inspector exposure- Always preserve
.metafiles for Unity asset GUID references
Testing
Tests use com.unity.test-framework (NUnit). Place tests in:
Assets/Tests/- General testsAssets/Tests/Simulation/EditMode/- EditMode simulation testsAssets/Tests/Simulation/PlayMode/- PlayMode simulation tests- Name test files
*Tests.cs
Run via Unity Test Runner (Window > General > Test Runner) or CLI.
Ignore (Do Not Commit)
Library/, Temp/, Logs/, obj/, UserSettings/