private IEnumerator EvalationEndSequence() { yield return(new WaitUntil(() => menuManager.IsAppearButtonEnd)); introUIManager.ToggleYukgack(true); introUIManager.ToggleTouchPanel(true); introUIManager.ToggleSkipButton(true); Debug.Log("EvalationEndSequence"); yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("드디어 평가를 끝내셨군요! 좋은 성적을 받으셨다고 생각하나요?", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("전적을 누르게 되시면 자신의 평가에 대한 결과들을 다시 둘러볼 수 있어요.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("시간 날때 전적을 보고 자신의 능력을 파악하는것도 중요해요.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("그럼 앞으로의 활약을 기대할게요!", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime))); introUIManager.ToggleYukgack(false); introUIManager.ToggleTouchPanel(false); introUIManager.ToggleSkipButton(false); introTrigger.isNeedEvalationEnd = false; NewGameManager.Instance.SaveIntroTrigger(introTrigger); }
private IEnumerator WriteToDialog(string text, RoutineStream clickFlag, float oneCharTime) { yield return(StartCoroutine(SetDialogActive(true))); //text = StringVariablePaser(text); dialogText.text = ""; //0 이하면 그냥 바로 텍스트 완성 if (oneCharTime > 0) { foreach (char letter in text.ToCharArray()) { dialogText.text += letter; //빠른 넘김 if (clickFlag.flag is bool && (bool)clickFlag.flag) { clickFlag.flag = false; break; } yield return(new WaitForSeconds(oneCharTime)); } } dialogText.text = text; }
private IEnumerator Sequence() { introUIManager.ToggleSkipButton(true); yield return(new WaitForSeconds(2f)); OnSpotlight(); yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(yukgack.SetDialogActive(true))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("게임능력평가에 오신 것을 환영합니다.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("저는 당신의 평가를 돕기 위한 초고지능 AI 육각이입니다.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("저희 게임능력평가는 여러가지 미니게임을 통해 당신을 총 5가지 항목으로 평가할 것입니다.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("그럼 평가를 하러 가볼까요?", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); SetParent(spotlightObject, yukgack.GetComponent <RectTransform>()); StartCoroutine(EndSequence()); }
private IEnumerator ConfirmSelectSubject() // 항목 선택한게 확실한지 다시 물어보는 함수 { routineStream = new RoutineStream(); string[] _chioce = { "응", "아니" }; //introUIManager.UpYukgackCanvasLayerOrder(10); introUIManager.ToggleTouchPanel(false); highLight.SetActive(true); yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(yukgacRotateAngle, 0.1f), yukgack.MoveTo(yukgacRotateAppearPosition, 0.1f)))); //yield return StartCoroutine(yukgack.MoveTo(yukgacRotateBeforePosition, 0)); //yield return StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(yukgacRotateAngle, 0), // yukgack.MoveTo(yukgacRotateAppearPosition, 0.3f))); yield return(StartCoroutine(yukgack.Ask("원하시는 항목을 고르신건가요?", _chioce, routineStream, 0))); //introUIManager.RecoverYukgackCanvasLayerOrder(); introUIManager.ToggleTouchPanel(true); Debug.Log("touchpanel"); if (routineStream.result as string == _chioce[0]) { routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("고르셨으니 이제 항목으로 넘어가기 위해 시작버튼을 눌러주세요!", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(Vector3.zero, 0.3f), yukgack.MoveTo(originYukgackPosition, 0.3f)))); introUIManager.ToggleYukgack(false); ActiveEvalationButton(); // 시작 버튼 활성화 highLight.StartTracing(highLightStartButton); } else { routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("이런, 죄송해요. 다시 고르실 때 까지 기다릴게요.", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); //yield return StartCoroutine(yukgack.MoveTo(yukgacRotateBeforePosition, 0.3f)); yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(Vector3.zero, 0.3f), yukgack.MoveTo(originYukgackPosition, 0.3f)))); highLight.SetActive(false); yield return(StartCoroutine(WaitSelectSubject())); introUIManager.ToggleYukgack(true); StartCoroutine(ConfirmSelectSubject()); } }
/// <summary> /// 다이얼로그에 대사가 나온다. /// </summary> /// <param name="text">적고 싶은 텍스트</param> /// <param name="clickFlag">대사를 스킵하거나 다음으로 넘어갈때 확인하는 값</param> /// <param name="oneCharTime">한 글자가 나오는데 소요되는 시간</param> /// <returns>루틴이 끝나면 반환된다.</returns> public IEnumerator Talk(string text, RoutineStream clickFlag, float oneCharTime = 0.04f) { SetTalkEndFlag(false); dialogText.GetComponent <RectTransform>().sizeDelta = new Vector2(textBoxWidth, textBoxHeightGenerally); yield return(StartCoroutine(WriteToDialog(text, clickFlag, oneCharTime))); dialogText.text = text; SetTalkEndFlag(true); yield return(new WaitUntil(() => (bool)clickFlag.flag)); SetTalkEndFlag(false); }
private IEnumerator ShowResultRoutine(int nowLevel) { int totalResult = CaculateTotalGaugeInput(); //코루틴의 기본적인 내용들 //http://theeye.pe.kr/archives/tag/waituntil //gauge image 루틴 호출 if (currentSubject != 0) { yield return(StartCoroutine(selectedGauge.ImageActivate(nowLevel))); } else { yield return(StartCoroutine(selectedGauge.ImageActivate(totalResult))); } yield return(new WaitForSeconds(0.5f)); yield return(StartCoroutine(MoveResult())); yield return(new WaitForSeconds(0.5f)); //육각이 등장 //if (nowLevel <= selectedGauge.GetValue()) //{ // //yukgack.Act(subject, NewGameManager.Instance.GetGameReuslts()); //} string[] _ments = yukgack.EvalationMente(subject, NewGameManager.Instance.GetGameReuslts()); yukgackAct.gameObject.SetActive(true); yield return(StartCoroutine(yukgackAct.MoveTo(yukgackAppearPosition, yukgackAppearTime))); yield return(StartCoroutine(yukgackAct.SetDialogActive(true))); if (_ments != null) { for (int i = 0; i < _ments.Length; i++) { routineStream = new RoutineStream(); yield return(StartCoroutine(yukgackAct.Talk(_ments[i], routineStream))); } } //육각이 대사 nextButton.gameObject.SetActive(true); //육각이 대사 끝나고 나서 호출하는것으로 바꿔야함 }
private IEnumerator SubjectResultAfterTutorial() // 하나의 항목이 끝난 후에 실행되야 하는 함수 { yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("한 항목에 대한 테스트를 끝내셨군요 이제 감이 잡히시나요?", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("남은 4가지 항목도 제가 설명드린대로, 끝내보자구요.", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime))); introUIManager.ToggleYukgack(false); introUIManager.ToggleTouchPanel(false); introUIManager.ToggleSkipButton(false); introUIManager.IsTutorial = false; NewGameManager.Instance.SetTouchDisablePanel(false); EndResultAfter(); // 육각이가 사라지고 나서 실행되어야하는 함수 }
private IEnumerator StartSelectTutorial() // 항목 선택에 대해서 설명해주는 함수 { highLight.SetActive(true); yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("방금 셔터가 내려오면서 사각이를 보셨나요?", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("저희 평가를 뒤에서 도와주는 아주 좋은 친구죠!", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("셔터가 내려올 때마다 보일테니 그의 노고를 알아주세요.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("이제 저희는 평가를 위해 하나의 항목을 선택할 거에요.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("제가 잠시 사라질테니 원하시는 항목을 하나 선택해주세요!", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime))); highLight.SetActive(false); //introUIManager.ToggleYukgack(false); //AllowSelectSubejct(); // 항목 선택이 가능하게 하는 함수 //yield return new WaitUntil(() => isSelectSubject); //항목을 누를때 까지 기다리게 하기 yield return(StartCoroutine(WaitSelectSubject())); introUIManager.ToggleYukgack(true); StartCoroutine(ConfirmSelectSubject()); }
/// <summary> /// 다이얼로그에 대사와 선택지가 뜨고, 선택을 하면 반환된다. /// </summary> /// <param name="text">선택지에 대한 대사</param> /// <param name="choice">선택지 문구 배열</param> /// <param name="answer">대사를 스킵하거나, 질의의 값을 기록한다.</param> /// <param name="oneCharTime">한 글자가 나오는데 소요되는 시간</param> /// <returns>루틴이 끝나면 반환된다.</returns> public IEnumerator Ask(string text, string[] choice, RoutineStream answer, float oneCharTime = 0.04f) { // 말하기 ( 묻기 ) dialogText.GetComponent <RectTransform>().sizeDelta = new Vector2(textBoxWidth, textBoxHeightWhenAsk); yield return(StartCoroutine(WriteToDialog(text, answer, oneCharTime))); // 버튼 만들 준비 GameObject[] buttonList = new GameObject[choice.Length]; buttonParent.GetComponent <HorizontalLayoutGroup>().spacing = 100f / choice.Length; // 버튼 만들기 RoutineStream trigger = new RoutineStream(); trigger.flag = false; for (int i = 0; i < choice.Length; ++i) { buttonList[i] = Instantiate(buttonProto, buttonParent.transform); buttonList[i].GetComponentInChildren <Text>().text = choice[i]; //choice[i]를 사용하면 참조로 접근하기 때문에 문제가 생김 //이를 해결하기 위해 변수에 값을 복사에 사용 string item = choice[i]; buttonList[i].GetComponent <Button>().onClick.AddListener(() => { trigger.flag = true; answer.result = item; }); } // 버튼 활성화 ( 보이게하기 ) buttonParent.SetActive(true); // 버튼 누를때까지 기다리기 yield return(new WaitUntil(() => (bool)trigger.flag)); // 버튼 비활성화 및 제거 buttonParent.SetActive(false); foreach (GameObject item in buttonList) { Destroy(item); } }
private IEnumerator StartDetailTutorial() // 항목 평가에 대해서 설명해수는 함수(슬롯 머신 화면) { ActiveTutorial(); yield return(new WaitForSeconds(4f)); introUIManager.ToggleYukgack(true); highLight.SetActive(true); yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("좋아요. 무사히 여기까지 왔군요! 이제 이곳에 대해 설명드릴거에요.", routineStream))); highLight.StartTracing(highLightSamgacks); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("일단 양쪽에 있는 이 친구들은 “삼각응원단”이에요. 당신의 평가를 응원해주는 친구들이죠!", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("당신의 평가가 어떻게 진행되는지에 따라, 이 친구들의 반응이 달라질거에요.", routineStream))); highLight.StopTracing(highLightSamgacks); highLight.StartTracing(highLightStatus); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("단계는 당신이 진행할 미니게임의 난이도를 결정합니다. 당신이 게임클리어를 성공하면 한단계 높아지고, 실패하면 한단계 낮아지죠.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("그리고 게임을 “완벽하게” 클리어하면 두단계가 올라가요!", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("높은 점수를 얻고싶다면 완벽하게 클리어하는 것이 좋겠죠?", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("8/8은 현재 남은 게임의 횟수를 뜻해요. 왼쪽의 8은 현재 남은횟수, 오른쪽의 8은 전체 횟수를 뜻하죠.", routineStream))); highLight.StopTracing(highLightStatus); highLight.StartTracing(highLightSlotMachine); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("가운데 GAME SELECT 버튼은 누르게되면 당신이 진행하게될 게임이 선택돼요.", routineStream))); highLight.StopTracing(highLightSlotMachine); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("자 이제 한번 해볼까요? 8번의 테스트 이후에 다시 보도록해요!", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime))); introUIManager.ToggleYukgack(false); introUIManager.ToggleSkipButton(false); introUIManager.ToggleTouchPanel(false); introUIManager.IsTutorial = false; highLight.SetActive(false); EndDetailExplanYukgack(); // 육각이가 사라지고 나서 실행되어야하는 함수 NewGameManager.Instance.SetTouchDisablePanel(false); }
private IEnumerator MenuSequence() // 메뉴 설명을 위한 연출 { introUIManager.ToggleTouchPanel(true); introUIManager.ToggleSkipButton(true); highLight.SetActive(true); if (IsFirstStartIntroScene()) { yield return(StartCoroutine(FadeIn())); } yield return(new WaitUntil(() => menuManager.IsAppearButtonEnd)); introUIManager.ToggleYukgack(true); yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("좋아요! 게임을 시작하기에 앞서, 버튼들에 대한 설명을 해드리죠.", routineStream))); highLight.StartTracing(highLightMenuButtons); StartCoroutine(yukgack.SetEmotion(Face.LookLeft)); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("우선 이 버튼들은 게임을 위한 버튼이에요!", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("새로하기를 누르면 평가를 시작합니다.", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("평가를 하던 도중에 나왔을때 이어하기 버튼을 누르면 하던 평가를 이어서 할 수 있어요.", routineStream))); highLight.StopTracing(highLightMenuButtons); StartCoroutine(yukgack.SetEmotion(Face.Idle)); yield return(StartCoroutine(yukgack.SetDialogActive(false))); StartCoroutine(yukgack.DialogMoveTo(dialogRightPosition, 0)); yield return(StartCoroutine(yukgack.MoveTo(yukgacLeftPosition, 1f))); highLight.StartTracing(highLightRecordButton); StartCoroutine(yukgack.SetEmotion(Face.LookRight)); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("이곳은 당신의 전적을 볼 수 있는 곳이에요!", routineStream))); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("나중에 평가가 끝난 뒤에 보시면, 평가에 대한 분석을 보실 수 있어요.", routineStream))); highLight.StopTracing(highLightRecordButton); StartCoroutine(yukgack.SetEmotion(Face.Idle)); routineStream = new RoutineStream(); yield return(StartCoroutine(yukgack.Talk("여기서 알려드릴건 다 알려드린 것 같군요! 그럼 새로하기를 눌러 평가를 시작해 볼까요?", routineStream))); yield return(StartCoroutine(yukgack.SetDialogActive(false))); yield return(StartCoroutine(yukgack.MoveTo(yukgackDisappearPosition, yukgackAppearTime))); introUIManager.ToggleYukgack(false); introUIManager.ToggleTouchPanel(false); introUIManager.ToggleSkipButton(false); highLight.SetActive(false); introTrigger.isNeedMenu = false; NewGameManager.Instance.SaveIntroTrigger(introTrigger); }