형님들 들어와 주셔서 감사합니다!!
일단 제가 알려주셨는데도 빡대가리라서 잘 이해를 못하겠습니다.
일단 대화창 만드는 함수를 만들었습니다.
그 대화창이 종료되는 순간에 바로 창 전환을 이루고 싶은데요...
콜백함수를 마지막에 이용하면 된다는데 그게 무슨 말일까요?
델리게이트 이용해서 파라미터값 통일해주면 된다는데 잘 이해를 못하겠습니다...
형님 이 참에 델리게이트 제대로 알고 넘어가고 싶습니다, 번거로우시더라도 예제를 보여주실 수있으실까요??
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
[System.Serializable]//외부스크립트에서 수정을 못하게,
// 참조할 필요없는 변수가 접근해서 쓸데없는 상황을 안만들기
//public 은 그냥 직렬화 되지만 private는 직렬화(serialization)해줘야된다.
public class Dialogue
{
[TextArea] //여러줄써줄수있게만들어줌
public string dialogue;
public Sprite cg;
}
public class DialogManager : MonoBehaviour
{
[SerializeField] private SpriteRenderer sprite_StandingCG; //private 변수지만 //변수선언 이유 CG변경
[SerializeField] private Image image_DialogueBox; //inspector 접근가능하다 //텍스트 박스
[SerializeField] private Text txt_Dialogue; //게임 오브젝트나 컴포넌트 관리할때 // 텍스트 내용
//인스펙터에서만 관리할려고
private bool isDialogue = false; //대화가 진행중이다 판별해줌
private int count = 0;
// 대화가 얼마나 진행되엇는지 알려주는 카운트
[SerializeField] private Dialogue[] dialogue; //Dialogue 클래스의 대화 배열받기
public void ShowDialogue() // 대화창 보여주는 유무 기능의 함수
{
// Start is called before the first frame update
OnOff(true);
count = 0; //대화 시작되는 부분 초기화
NextDialogue(); // 호출되자마자 대화시작
}
private void OnOff(bool _flag) //대화창 보이는거 안보이는거 조정하는 함수
{
image_DialogueBox.gameObject.SetActive(_flag); //flag는 바로 위 OnOff(true)함수 기능 중 true를 flag로 받음
sprite_StandingCG.gameObject.SetActive(_flag);
txt_Dialogue.gameObject.SetActive(_flag);
isDialogue = _flag;
}
private void NextDialogue() // 대화진행 함수 만들기
{
txt_Dialogue.text = dialogue[count].dialogue; //첫번째 대사
sprite_StandingCG.sprite = dialogue[count].cg; // 첫번째 CG 등장시 카운터시작
count++; //다음 장면으로 이어가게
}
// Update is called once per frame
void Update() { //매 프레임마다 반복되는 함수, 만약 매프레임마다 연산할 필요없을 경우 밖에다 기능만들어야됨
if (isDialogue) //예를 들면 반복적으로 대화를 통해 정보를 얻어야 되는 게임이라면 이곳에 기능을 만들어야됨...
{
if (Input.GetMouseButtonDown(0)) //마우스 왼쪽 버튼으로 입력받기! 대화 클릭으로 진행됨
{
if (count < dialogue.Length) // 대화의 배열의 크기가 카운트 되는 수(현재 대화)보다 작으면
NextDialogue(); // 다음 대화창으로 진행
else // 그렇지 않으면
OnOff(false);
//자동으로 종료
}
}
}
IEnumerator TestCoroutine() // 조건문을 코루틴 안에 넣어보기 if~문 그리고 return null 이거 실행해보기
{
yield return new WaitUntil( () => count > dialogue.Length);
SceneManager.LoadScene("lifeover");
}
}
//대화 끝나면 자동으로 다음 씬으로 넘기는 기능 만들어보기!!
//이를 처리 하기 위해서는 콜백함수,델리게이트(함수를 가지는 변수!) 이용해보기!
//함수 밖으로 뺀다는 것 -> 파라미터로 받는 걸 의미!
https://m.youtube.com/watch?v=G5R4C8BLEOc&feature=youtu.be
감사합니다! 더 배우고 오겠씀다