12 KiB
진실의 샘 UI 스크립트 사용 설명서
이 폴더는 진실의 샘 UI를 만들기 위한 Unity C# 스크립트 세트입니다.
진실의 샘은 질문에 답하면 선택지의 Lie Amount에 따라 코 게이지가 올라가고, 최종적으로 성공/실패를 판정하는 구조입니다.
1. 포함된 스크립트
| 파일 | 역할 | 오브젝트에 붙이는가 |
|---|---|---|
TruthChoiceData.cs |
선택지 하나의 데이터 | 붙이지 않음 |
TruthQuestionData.cs |
질문 하나의 데이터 | 붙이지 않음 |
TruthFountainData.cs |
전체 질문 묶음 ScriptableObject | 붙이지 않음, asset 생성용 |
TruthChoiceButtonUI.cs |
선택지 버튼 하나 표시/클릭 처리 | 선택지 버튼 3개 각각 |
TruthFountainUI.cs |
질문, 선택지, 코 게이지, 결과창 표시 | TruthFountainUI 오브젝트 |
TruthFountainGameManager.cs |
게임 진행, 점수 계산, 성공/실패 판정 | TruthFountainSystem |
TruthFountainReward.cs |
성공 보상 지급 | TruthFountainSystem |
TruthFountainOpenClose.cs |
UI 열기/닫기, VR 카메라 앞 배치 | TruthFountainUI 또는 별도 시스템 오브젝트 |
2. Unity 폴더 위치
추천 폴더 구조입니다.
Assets
└── My project
└── TruthFountain
├── Data
├── Prefabs
├── Scripts
└── Sprites
스크립트는 여기에 넣으세요.
Assets/My project/TruthFountain/Scripts
데이터 asset은 여기에 만드는 것을 추천합니다.
Assets/My project/TruthFountain/Data
3. 권장 Hierarchy
TruthFountainCanvas
└── TruthFountainUI
├── TruthFountainUI.cs
├── TruthFountainOpenClose.cs
├── Background
├── TitleText
├── QuestionPanel
│ ├── QuestionBG
│ ├── QuestionText
│ └── QuestionHintText
├── ChoiceRoot
│ ├── ChoiceButton_01
│ │ └── TruthChoiceButtonUI.cs
│ ├── ChoiceButton_02
│ │ └── TruthChoiceButtonUI.cs
│ └── ChoiceButton_03
│ └── TruthChoiceButtonUI.cs
├── NoseGaugePanel
│ ├── NoseGaugeBG
│ ├── NoseGaugeFill
│ ├── NoseIcon
│ └── NoseValueText
├── ProgressText
├── ResultText
├── FinalResultPanel
│ ├── FinalResultBG
│ ├── FinalTitleText
│ ├── FinalDescriptionText
│ └── ConfirmButton
│ └── ConfirmButtonText
└── CloseButton
└── CloseText
TruthFountainSystem
├── TruthFountainGameManager.cs
└── TruthFountainReward.cs
4. TruthFountainData asset 만들기
Project 창에서 우클릭합니다.
Create
→ Adventure
→ Truth Fountain
→ Truth Fountain Data
파일 이름 예시:
TruthFountainData_Default
설정 예시:
Title: 진실의 샘
Max Lie Score: 3
Fail Immediately At Max Lie Score: 체크
Result Delay: 1
Success Title: 진실의 샘이 빛납니다
Success Description: 당신의 진심이 샘에 닿았습니다. 기억의 조각을 획득했습니다.
Fail Title: 코가 너무 길어졌습니다
Fail Description: 샘이 당신의 대답을 믿지 못했습니다. 다시 도전해보세요.
질문은 Questions 배열에 추가합니다.
5. 질문 데이터 입력 예시
질문 1
Question Text:
친구를 돕기 위해 거짓말을 해도 될까?
Hint Text:
당신의 선택에 따라 코가 반응합니다.
Choice 1:
Choice Text: 솔직하게 말한다
Lie Amount: 0
Result Message: 샘의 물결이 맑게 빛납니다.
Choice 2:
Choice Text: 좋은 의도라면 거짓말한다
Lie Amount: 1
Result Message: 피노키오의 코가 조금 길어졌습니다.
질문 2
Question Text:
위험을 피하려고 약속을 어겨도 될까?
Choice 1:
Choice Text: 약속을 지킨다
Lie Amount: 0
Result Message: 샘이 조용히 빛납니다.
Choice 2:
Choice Text: 아무 말 없이 도망친다
Lie Amount: 1
Result Message: 코끝이 불편하게 간질거립니다.
질문 3
Question Text:
보상을 얻기 위해 모르는 척해도 될까?
Choice 1:
Choice Text: 사실을 말한다
Lie Amount: 0
Result Message: 맑은 물방울이 떠오릅니다.
Choice 2:
Choice Text: 모르는 척한다
Lie Amount: 1
Result Message: 샘이 잠시 어두워집니다.
질문 4
Question Text:
실수를 숨기면 모두가 편해질까?
Choice 1:
Choice Text: 실수를 인정한다
Lie Amount: 0
Result Message: 물결이 부드럽게 퍼집니다.
Choice 2:
Choice Text: 아무도 모르게 숨긴다
Lie Amount: 1
Result Message: 코가 길어지는 느낌이 듭니다.
질문 5
Question Text:
진실이 아파도 말해야 할까?
Choice 1:
Choice Text: 조심스럽게 진실을 말한다
Lie Amount: 0
Result Message: 샘이 밝게 빛납니다.
Choice 2:
Choice Text: 상처 주지 않기 위해 숨긴다
Lie Amount: 1
Result Message: 샘의 빛이 흔들립니다.
6. TruthChoiceButtonUI.cs 붙이기
선택지 버튼 3개에 각각 붙입니다.
ChoiceButton_01 → TruthChoiceButtonUI
ChoiceButton_02 → TruthChoiceButtonUI
ChoiceButton_03 → TruthChoiceButtonUI
각 버튼에서 연결할 것:
Button → 자기 자신의 Button 컴포넌트
Background Image → 자기 자신의 Image 컴포넌트
Choice Text → ChoiceText
Sprite가 아직 없다면 아래는 비워도 됩니다.
Normal Sprite
Selected Sprite
Truth Sprite
Lie Sprite
Sprite가 없으면 색상으로 버튼 상태가 표시됩니다.
7. TruthFountainUI.cs 붙이기
붙일 위치:
TruthFountainCanvas
└── TruthFountainUI
└── TruthFountainUI.cs
Inspector 연결:
UI Root → TruthFountainUI
Title Text → TitleText
Question Text → QuestionPanel / QuestionText
Question Hint Text → QuestionPanel / QuestionHintText
Progress Text → ProgressText
Result Text → ResultText
Choice Buttons Size: 3
Element 0 → ChoiceButton_01의 TruthChoiceButtonUI
Element 1 → ChoiceButton_02의 TruthChoiceButtonUI
Element 2 → ChoiceButton_03의 TruthChoiceButtonUI
Nose Gauge Fill → NoseGaugePanel / NoseGaugeFill
Nose Value Text → NoseGaugePanel / NoseValueText
Final Result Panel → FinalResultPanel
Final Title Text → FinalResultPanel / FinalTitleText
Final Description Text → FinalResultPanel / FinalDescriptionText
Confirm Button → FinalResultPanel / ConfirmButton
NoseGaugeFill의 Image 설정:
Image Type: Filled
Fill Method: Vertical
Fill Origin: Bottom
Fill Amount: 0
8. TruthFountainGameManager.cs 붙이기
빈 오브젝트를 만듭니다.
TruthFountainSystem
여기에 붙입니다.
TruthFountainSystem
└── TruthFountainGameManager.cs
Inspector 연결:
Fountain Data → TruthFountainData_Default
UI → TruthFountainUI 오브젝트의 TruthFountainUI 컴포넌트
Reward → TruthFountainSystem의 TruthFountainReward 컴포넌트
Start On Awake → 테스트할 때만 체크
Show Debug Log → 체크
테스트할 때는 Start On Awake를 켜면 Play 직후 바로 질문이 표시됩니다.
실제 게임에서는 TruthFountainOpenClose.Open()에서 시작하게 하는 것을 추천합니다.
9. TruthFountainReward.cs 붙이기
붙일 위치:
TruthFountainSystem
└── TruthFountainReward.cs
기본 설정:
Give Only Once → 체크
Show Debug Log → 체크
기억의 조각 보상과 연결하는 방법 A
이미 만든 MemoryPieceReward.cs를 TruthFountainSystem에 같이 붙입니다.
TruthFountainSystem
├── TruthFountainGameManager
├── TruthFountainReward
└── MemoryPieceReward
TruthFountainReward에서:
Reward Receiver → MemoryPieceReward 컴포넌트
Reward Method Name → GiveReward
이렇게 하면 진실의 샘 성공 시 MemoryPieceReward.GiveReward()가 자동 호출됩니다.
기억의 조각 보상과 연결하는 방법 B
TruthFountainReward의 On Reward Given 이벤트에 직접 연결합니다.
On Reward Given
→ MemoryPieceReward
→ GiveReward()
방 클리어 상태도 같이 바꾸고 싶으면 On Reward Given 이벤트에 RoomProgressManager.MarkRoomCleared(RoomData) 또는 RoomProgressManager.MarkMemoryPieceCollected(RoomData)를 추가로 연결할 수 있습니다.
10. TruthFountainOpenClose.cs 붙이기
붙일 위치 추천:
TruthFountainCanvas
└── TruthFountainUI
└── TruthFountainOpenClose.cs
Inspector 연결:
Truth Fountain Root → TruthFountainUI
Game Manager → TruthFountainSystem의 TruthFountainGameManager
Target Camera → Main Camera 또는 XR Camera
Open On Start → 테스트할 때만 체크
Start Game On Open → 체크
Place In Front Of Camera On Open → 체크
Face Camera On Open → 체크
Distance From Camera → 2.2
Vertical Offset → -0.1
닫기 버튼 연결:
CloseButton OnClick
→ TruthFountainUI
→ TruthFountainOpenClose.Close()
방 선택 UI에서 진실의 샘 방 입장 시 연결:
RoomEnterHandler 또는 진실의 샘 입장 이벤트
→ TruthFountainOpenClose.Open()
11. 최종 작동 흐름
TruthFountainOpenClose.Open()
→ TruthFountainUI 켜짐
→ TruthFountainGameManager.StartGame()
→ 첫 질문 표시
→ 플레이어 선택지 클릭
→ lieScore 증가 또는 유지
→ NoseGaugeFill 갱신
→ 다음 질문 표시
→ 모든 질문 종료
→ 성공/실패 판정
→ 성공 시 TruthFountainReward.GiveReward()
→ 최종 결과 패널 표시
12. 테스트 순서
1. TruthFountainData_Default asset 만들기
2. 질문 5개 입력하기
3. ChoiceButton 3개에 TruthChoiceButtonUI 붙이기
4. TruthFountainUI 오브젝트에 TruthFountainUI.cs 붙이기
5. TruthFountainSystem 만들기
6. TruthFountainGameManager 붙이기
7. TruthFountainReward 붙이기
8. GameManager에 Data, UI, Reward 연결하기
9. Start On Awake 체크
10. Play 누르기
11. 질문이 표시되는지 확인
12. 선택지를 누르면 ResultText와 NoseGaugeFill이 바뀌는지 확인
13. 최종 성공/실패 패널이 뜨는지 확인
14. 성공 시 보상 이벤트가 호출되는지 확인
13. 자주 나는 오류
질문이 안 뜸
확인할 것:
TruthFountainGameManager의 Fountain Data가 비어 있지 않은가?
TruthFountainData의 Questions 배열에 질문이 들어 있는가?
TruthFountainGameManager의 UI가 연결되어 있는가?
선택지 버튼이 안 보임
확인할 것:
TruthQuestionData의 Choices 배열에 선택지가 들어 있는가?
TruthFountainUI의 Choice Buttons 배열이 연결되어 있는가?
각 ChoiceButton에 TruthChoiceButtonUI가 붙어 있는가?
코 게이지가 안 움직임
확인할 것:
NoseGaugeFill이 TruthFountainUI에 연결되어 있는가?
NoseGaugeFill의 Image Type이 Filled인가?
Fill Method가 Vertical인가?
선택지의 Lie Amount가 1 이상인가?
버튼 클릭이 안 됨
확인할 것:
Canvas에 Graphic Raycaster가 있는가?
씬에 EventSystem이 있는가?
Button Image의 Raycast Target이 켜져 있는가?
VR이라면 XR UI Input Module과 XR Ray Interactor UI Interaction이 켜져 있는가?
14. 현재 단계에서 가장 먼저 할 것
처음에는 보상 연결보다 아래 3가지만 먼저 확인하세요.
1. 질문 표시
2. 선택지 클릭
3. 코 게이지 증가
이 3개가 정상 작동하면 진실의 샘 UI의 핵심은 완성입니다.