-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
대화창이 안꺼지고 대사가 무한 반복됩니다...
19.12.17 14:38 작성 조회수 161
0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DialogManager : MonoBehaviour
{
public static DialogManager instance;
#region Singleton
private void Awake()
{
if(instance == null)
{
DontDestroyOnLoad(this.gameObject);
instance = this;
}
else
{
Destroy(this.gameObject);
}
}
#endregion Singleton
public Text text;
public SpriteRenderer rendererDialogWindow;
private List<string> listSentences;
private List<Sprite> listDialogWindows;
private int count;
public Animator animDialogWindow;
public bool talking = false;
private bool keyActivated = false;
public Canvas ConCanvas;
void Start()
{
count = 0;
text.text ="";
listSentences = new List<string>();
listDialogWindows = new List<Sprite>();
}
public void ShowDialog(Dialog dialog)
{
talking = true;
for(int i = 0; i < dialog.sentences.Length; i++)
{
listSentences.Add(dialog.sentences[i]);
listDialogWindows.Add(dialog.dialogWindows[i]);
}
animDialogWindow.SetBool("Appear", true);
StartCoroutine(StartDialogueCoroutine());
}
public void ExitDialogue()
{
text.text ="";
count = 0;
listSentences.Clear();
listDialogWindows.Clear();
animDialogWindow.SetBool("Appear", false);
talking = false;
}
IEnumerator StartDialogueCoroutine()
{
if(count > 0)
{
if(listDialogWindows[count] != listDialogWindows[count-1])
{
animDialogWindow.SetBool("Appear", false);
yield return new WaitForSeconds(0.2f);
rendererDialogWindow.GetComponent<SpriteRenderer>().sprite = listDialogWindows[count];
animDialogWindow.SetBool("Appear", true);
}
}
else
{
yield return new WaitForSeconds(0.05f);
rendererDialogWindow.GetComponent<SpriteRenderer>().sprite = listDialogWindows[count];
}
keyActivated = true;
for(int i = 0; i < listSentences[count].Length; i++)
{
text.text += listSentences[count][i];
yield return new WaitForSeconds(0.01f);
}
}
void Update()
{
if(talking && keyActivated)
{
if(Input.GetKeyDown(KeyCode.Z))
{
keyActivated = false;
count++;
text.text ="";
if(count == listSentences.Count)
{
StopAllCoroutines();
ExitDialogue();
ConCanvas.enabled = false;
}
else
{
StopAllCoroutines();
StartCoroutine(StartDialogueCoroutine());
}
}
}
}
}
코드에 문제가 있는건가요??
답변을 작성해보세요.
답변 0