Lucy (24.08.01 ~)
공포 어드벤처 게임으로, 플레이어는 어둠 속에서 정신력과 체력을 관리하며 퍼즐을 풀고 생존해야 합니다.
🎮 Play Lucy on GitHub Pages
자동 빌드 및 배포는 GitHub Actions를 통해 이루어집니다.
자세한 CI/CD 설정 방법은 CICD_SETUP.md를 참고하세요.
- 정신력(Mental) 시스템: 어둠 속에서 정신력이 감소하며, 낮은 정신력 상태에서는 환각 효과가 나타남
- 체력(Stamina) 시스템: 달리기 시 소모되며, 일정 수치 이하로 떨어지면 달리기 불가
- 인벤토리 시스템: 아이템 수집, 장착, 사용 기능
- 포털 시스템: 씬 전환 및 플레이어 위치 이동
- 크리처 AI: 다양한 행동 패턴을 가진 몬스터 (Guard, Avoider, Stunnee)
- 퍼즐 시스템: 다양한 상호작용 가능한 퍼즐
게임의 핵심 매니저들은 싱글톤 패턴을 사용하여 씬 전환 시에도 유지됩니다:
InputManager: 입력 관리 및 키 바인딩PortalManager: 씬 전환 및 포털 관리ReferenceManager: 게임 오브젝트 참조 관리SoundManager: 사운드 재생 관리CreatureManager: 크리처 AI 및 맵 관리
ISceneChangeListener: 씬 변경 이벤트 리스너 인터페이스IKeyInputListener: 키 입력 이벤트 리스너 인터페이스EventScheduler: 게임 이벤트 스케줄링
- CharacterStat: 플레이어의 정신력과 체력 관리
- CharacterMove: 플레이어 이동 및 애니메이션
- Inventory: 아이템 인벤토리 관리
- CreatureManager: 맵 데이터 관리 및 경로 탐색
- PathFinder: A* 기반 경로 탐색 알고리즘
- Creature: 다양한 AI 행동 패턴 (추격, 회피, 기절 등)
Assets/Scripts/
├── Lucy/ # 플레이어 관련 스크립트
├── InputSystem/ # 입력 관리 시스템
├── Portal/ # 씬 전환 및 포털
├── ReferenceSystem/ # 참조 관리 시스템
├── soundSystem]/ # 사운드 시스템
├── Scripts_Creatures/ # 크리처 AI
├── invertoryAndItem/ # 인벤토리 및 아이템
├── Puzzle/ # 퍼즐 시스템
├── Dialogue/ # 대화 시스템
├── Event/ # 이벤트 시스템
└── Password_Object/ # 비밀번호 오브젝트
// Accessing a singleton manager
InputManager.Instance.SetMovementState(true);
PortalManager.Instance.SetSceneChangeListener(this);
// Creating a custom singleton
public class MyManager : SingletonObject<MyManager> {
protected override void Awake() {
base.Awake();
// Your initialization code
}
}public class MyScript : MonoBehaviour, ISceneChangeListener {
void Start() {
// Register to receive scene change notifications
PortalManager.Instance.SetSceneChangeListener(this);
}
void ISceneChangeListener.OnSceneChange() {
// Handle scene change
Debug.Log("Scene changed!");
}
}// Reduce stamina when running
CharacterStat.instance.ChangeStamina(-10);
// Stop mental reduction when equipped with flashlight
CharacterStat.instance.StopMentalReduce();
// Check if player can run
if (CharacterStat.instance.canRun) {
// Enable running
}// Add item to inventory
bool success = Inventory.instance.AddItem(itemData);
if (success) {
Debug.Log("Item added successfully");
}
// Check if item is equipped
bool isEquipped = Inventory.instance.IsItemEquipped(flashlightItem);// Register an object for global access
ReferenceManager.Instance.SetReferableObject("MainCamera", cameraComponent, false);
// Find object by key
CameraMove camera = ReferenceManager.Instance.FindComponentByName<CameraMove>("MainCamera");| 태그 | 설명 |
|---|---|
| feat | 새로운 코드 추가 |
| fix | 문제점 수정 |
| refact | 코드 리팩토링 |
| comment | 주석 추가(코드 변경X) 혹은 오타 수정 |
| docs | README와 같은 문서 수정 |
| merge | merge |
| rename | 파일, 폴더명 수정 혹은 이동 |
ex) feat(파일명)
시작 이벤트 구현
|
|
|
|
|
|
| 문성필 | 김현진 | 정윤성 | 정진욱 | 황인섭 |