강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

cancancan110890 のプロフィール画像
cancancan110890

投稿した質問数

ユニティ講座【ツクール風ゲーム制作】

イベント(2) - 会話システム

대화창이 안꺼지고 대사가 무한 반복됩니다...

作成

·

314

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<stringlistSentences;
    private List<SpritelistDialogWindows;

    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 = 0i < dialog.sentences.Lengthi++)
            {
                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 = 0i < listSentences[count].Lengthi++)
                {
                    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());
                    }
                }
            }
        }
}
코드에 문제가 있는건가요??
unity

回答

回答を待っている質問です
最初の回答を残してください!
cancancan110890 のプロフィール画像
cancancan110890

投稿した質問数

質問する