Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Quaternion
- 확장메서드
- 유니티
- 리듬게임
- 인터페이스
- callbyreference
- 병맛게임
- raycast
- 레이캐스트
- ar
- callbyvalue
- github
- C#
- 게임제작
- AR게임
- 짐벌락
- 델리게이트
- 로케트
- 리듬게임에디터
- ARProgect
- Unity
- 1인개발
- AR Foundation
- ExtensionMethod
- 게임개발
- 깃허브
- Euler
- 게임
- AR세팅
- 소규모프로젝트
Archives
- Today
- Total
Ssssong += Dev
[퍼즐게임] WHITE POLYGON - 3 본문
씬 이동, 인벤토리, 공간 회전 동작, 대화시스템 기본 세팅하였다.
대화시스템은 아직 텍스트 출력만 넣어두고 여러 텍스트 순서대로 출력하는 건 적용되지 않았다.
인벤토리와 대화시스템 관리는 싱글턴으로 관리하고 있다.
싱글턴 생성이 프레임워크로 들어가 있는데, 이 코드를 유용하게 쓰고 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public abstract class CSingleton<T> : CComponent where T : CComponent
{
public static T m_oInstance = null;
//! 인스턴스 프로퍼티
public static T Instance
{
get
{
if(m_oInstance == null)
{
var oGameObject = new GameObject(typeof(T).ToString());
m_oInstance = Function.AddComponent<T>(oGameObject);
DontDestroyOnLoad(oGameObject);
}
return m_oInstance;
}
}
//! 인스턴스를 생성한다.
public static T Create()
{
return CSingleton<T>.Instance;
}
}
대화시스템 현재 세팅된 모습인데 다음 대화로 넘기는 기능이 아직 없어서 추가해야 한다.
다음 대화가 없다면 창을 끄는 것과 대화 진행 상태, 퀘스트 조건에 따른 진행 상태도 추가되어야 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class CDialogueSystem : CSingleton<CDialogueSystem>
{
private TextMeshProUGUI textMeshProUGUI;
private float textSpeed;
private string textContent;
private bool isTalking = false;
public void SetDialogueInfo(TextMeshProUGUI a_textMesh, float a_textSpeed, string a_textContent)
{
textMeshProUGUI = a_textMesh;
textSpeed = a_textSpeed;
textContent = a_textContent;
}
public void WriteText()
{
isTalking = true;
StartCoroutine(TextEffect());
}
public void WriteAllText()
{
StopAllCoroutines();
textMeshProUGUI.text = textContent;
isTalking = false;
}
IEnumerator TextEffect()
{
foreach(char letter in textContent.ToCharArray())
{
textMeshProUGUI.text += letter;
yield return new WaitForSeconds(textSpeed);
}
isTalking = false;
}
public override void Update()
{
base.Update();
if(Input.GetKeyDown(KeyCode.Space))
{
if(isTalking)
{
WriteAllText();
}
}
}
}
캐릭터마다 대화창이 보이거나 또는 다른 퀘스트 조건이 실행되어야 하므로
델리게이트로 각 기능을 더해주고자 한다. ShowDialogue 메서드는 텍스트 객체 세팅 후 좀 더 사용하기 편하게 수정될 것이다.
위치도 CCharacter로 옮겨줘야 한다.
public class CCharacter : CComponent
{
public delegate void CharacterClickEvent();
public CharacterClickEvent characterClickEvent;
private void OnMouseDown()
{
characterClickEvent();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShopKeeper : CCharacter
{
[SerializeField]
private CDialogueObj dialogueUI;
public override void Start()
{
base.Start();
characterClickEvent += ShowDialogue;
}
private void ShowDialogue()
{
dialogueUI.gameObject.SetActive(true);
CDialogueSystem cDialogue = CDialogueSystem.Instance;
cDialogue.SetDialogueInfo(dialogueUI.textMesh, 0.1f, "뭐 좀 사갈래?");
cDialogue.WriteText();
}
}
'개발 > WHITE POLYGON' 카테고리의 다른 글
[퍼즐게임] WHITEPOLYGON - 6 (0) | 2022.07.24 |
---|---|
[퍼즐게임] WHITE POLYGON - 5 (0) | 2022.07.19 |
[퍼즐게임] WHITEPOLYGON - 4 (0) | 2022.07.18 |
[퍼즐게임] WHITE POLYGON - 2 (0) | 2022.07.08 |
[퍼즐게임] WHITE POLYGON - 1 (0) | 2022.07.08 |