Day1 (copy)
Dialogue System for Unity
Quick Start
프리팹에서 매니저 프리팹을 하이어라키에 올린다. 인스펙터에서 Dialogue Database를 생성함 conversation을 추가한다. 노드를 추가했을 때, 회색은 NPC, 파란색은 플레이어의 대사가 된다. 액터에서는 대화를 하는 대상을 추가할 수 있지만, 시작할때는 디폴트로 놔둠.
플레이어와 NPC를 추가하고 테스트할 수 있다. NPC에 Dialogue System Trigger를 만들어서 배치한다. 이후 add action으로 start conversation을 누른 다음 실행되어야 할 conversation을 선택하면 된다.
conversation Actor에 플레이어를, conversation conversant에 NPC를 추가한다. Trigger는 OnStart로 한다. (그러면 시작할 때 바로 대화를 시작한다.)
trigger를 on use로 변경후 usable component를 추가한다. 거리를 설정하고, Player에 가서 selector component를 추가한다. select at을 mouse position으로 설정. 그러면 마우스를 올렸을 때, 선택할 수 있도록 변경되고, 클릭하면 대화가 시작된다.
플레이어에 Dialogue System Events를 추가하고, On Conversation Start에 Selector component의 enabled를 false 처리한다. (더 이상 선택되지 않도록) 대화가 끝났을 때 enabled 처리.
Conversation Conditions
똑같이 매니저 프리팹 추가 후 inspector에서 dialogue db 추가한다. 이번에는 actor를 추가. Player와 Detective를 추가하고 inspector에서 Displayname을 설정한다. variables 탭으로 이동하여 AtWork라는 불리언 변수를 추가한다. 이제 conversation으로 이동해서 Questioning이라는 새로운 대화를 만든다. player를 actor로, Detective를 conversant로 설정한다. 대화를 만들 때, var 마크업 태그를 사용한다. (예: Got a minute, [var=Actor]?) 이렇게 하면 대화를 하는 대상의 이름이 자동으로 표시될 것. 인스펙터의 actor 옆에 화살표를 이용하면 누가 이야기하는 것인지 쉽게 전환이 가능하다.
아래에 노드를 두 개 만들어서 선택할 수 있도록 설정할 수 있다. 조건을 추가하기 위해서, 내가 선택한 대화의 인스펙터에서 Script에 …을 클릭하여 아까 추가한 variable을 추가한다.
여기서 대사를 강조하기 위해서는 ““[em1]””[/em1]”” 태그를 걸 수 있는데, 이 태그를 걸면 강조가 된다. 강조 효과는 Database 탭의 emphasis Settings에서 확인할 수 있다.
만들어진 대사가 시작되도록 하기 위해서, gameObject를 하나 만들고, Dialogue System Trigger를 붙인 다음, OnStart 상황에서 실행되게 하고, 시작되는대사는 만들어두었던 Questioning으로 설정한다.
Barks
프리팹, db 추가 후 barks라는 이름의 대화를 추가한다. Barks는 항상 Start 노드에 연결된다. 캡슐을 만들어서 Dialogue Actor component 추가. bark UI Settings에서 템플릿을 추가한다. 역시ㅓ는 Prefabs > StandardUIPrefabs > Bubble 에 있는 템플릿을 사용한다. 그리고 Bark On Idle 스크립트를 추가한다. bark conversation을 대화로 설정하고, 설정해주면 혼자서 짖기 시작한다. 이거는 유용하게 사용할 수 있을 것 같다.
– 픽셀크러셔 영상 한글판으로 만들어서 추가하고싶다. 메일 보내봐야지.
Interaction Tutorial
– 드디어 상호작용인가 이거 다 학습하고 시작해야지.
박스가 가까이 가면 bark 하도록 설정
픽셀크러셔에서 튜토리얼 에셋을 다운받는다. 매니저는 데모 대화 데이터베이스를 선택한다. 이런 식으로 매니저가 가져오는 데이터베이스를 씬베이스로 관리하면서 변경해나가면 좋다. 박스에 콜라이더를 달아서 Is Trigger 체크한다. 충돌하지 않고 가까이가면 Bark 하도록. Dialogue System Trigger를 추가한 다음, Trigger를 On Trigger Enter로 설정한다. 플레이어 태그를 추가함. 박스의 Dialogue System Trigger에 Action을 Bark로 한 다음, Text로 지정해서 정해진 텍스트를 짖어대도록 한다. Bark UI를 상자의 자식으로 추가한다. 설정을 완료한 다음, 프리팹으로 다시 만들어주고, 상자에는 Dialogue Actor component를 추가해서 Bark UI를 아까 만들어놓은 프리팹을 붙여준다.
주민과의 근접 선택 상호작용
주민에 usable component 추가 플레이어에 trigger 역할을 하는 collider 추가, Proximity Selector script 추가 이때, 매니저에는 Instantiate Prefabs component가 붙어있는데, 말 그대로 UI를 생성하는 것 같다. 주민에는 Dialogue System Trigger를 붙이는데, Trigger는 On Use로 설정한다. 다시말해, 플레이어에 붙어있는 Proximity Selector가 use 버튼을 누르면 대화가 시작되는 로직. 이제 주민에 Dialogue Actor를 추가해서 barkUI를 추가해주고 테스트해보면된다.
bark로 설정되었던 Action을 삭제하고, conversation으로 변경 가능하다. 아무거나 선택한 다음 해보면 클릭했을 때 대화가 시작되긴 하지만 플레이어가 여전히 이동 가능한 것을 알 수 있다. 플레이어에 Dialogue System Events component를 추가해본다. 이후 플레이어 컨트롤러 enable을 통제하여 대화 중에는 움직일 수 없도록 한다. 대화가 끝났을 때 다시 enable하는 것을 잊지말자.
Edit Mode Player
그러니까 플레이모드나 빌드 없이도 대화를 시뮬레이션 해볼 수 있는 기능. Conversation에서 menu > play를 선택하면 바로 대화를 실행해 볼 수 있다. 개별 노드에서도 우클릭으로 플레이를 해볼 수 있다.
Conversation Templates
템플릿 소개인듯? 퀘스트 템플릿 등을 이용할 수 있고, 기존에 만들어두었던 템플릿을 저장해서 재활용할 수도 있음. 저장은 JSON으로 된다.
Dialogue UI Tutorial 1 & 2
이제부터 본격적인 UI 튜토리얼이 시작되는듯. UI는 어려운데 스-벌
대화시스템 UI의 구성
- NPC 대화창
- Player 대화창
- 대화 선택지
- Optional 타이머
- Alert message
- Input field
- QTE 별도의 UI로 퀘스트 다이얼로그를 열거나, 컴퓨터 등의 오브젝트에 띄워서 월드스페이스에서 인풋을 받을 수도 있다.
인터페이스 PixelCrushers.DialogueSystem.IDialogueUI 를 통해서 만들 수 있다.
0.DialogueUI 이용하기
매니저에서 UI템플릿을 지정할 수 있고, default canvas도 지정할 수 있다. 템플릿 선택 시 인스턴스를 만들지 프리팹을 사용할지 물어보는 창이 뜬다. 인스턴스를 선택하면 캔버스에서 확인할 수 있다.
1.이미 존재하는 템플릿을 변경
QTE를 사용하지 않을거라면 템플릿에서 그냥 삭제해버려도 된다. text element가 오래된 버전이라면 TMP로 변경한 후 재할당해주면 해결된다. 이미지를 바꾸거나 레이아웃을 변경하는 것도 가능하다.
2.직접 UI를 만들어서 구성하기
매니저를 인스펙터에 추가한 다음, 캔버스 아래에 empty gameobject 추가 후 dialogueUI로 이름짓는다. standard dialogue UI component 추가. UI > panel 추가해서 alert panel로 만들기. 색깔을 바꾸고 자식으로 Alert txt 붙여주면 된다. horizontal layout group component를 추가해서 배치를 해준다.
Dialogue를 추가할때에도 패널을 먼저 추가한 다음 사이즈 조정하고 배치한다. 그 밑에 subtitle panel을 추가하는데, 배경 색깔이 필요없으니까 image component는 disable 한다. subtitle panel 밑에 TMP를 두개 추가해서 이름과 대사를 출력받을 수 있게 한다.
선택지는 menu panel을 만들어서 똑같이 해준다. 중요한건, 각 목적에 맞게 panel들에 standard UI component를 붙여줘야한다는거(alert, dialogue, menu 등)
에라모르겠다 대충 나래비세워놓고 대충 비슷하게 만들면 됨. 아니면 있던거에서 고치는게 나을지도.
DialogueUI Tutorial 3 - animated Portraits
Cinemachine
씨네머신 패키지 설치하면 된다. 가만히 있을 때에는 캐릭터를 돌아볼 수 있도록 하고, 걸을 때에는 follow cam으로 하고, 뛸때에는 백뷰로 하면 어떨까. 클리어샷으로 하면 목표물을 정확하게 찍을 수 있는 곳으로 이동함.
댓글남기기