๋งŒ๋“ค๊ณ ์ž ํ•œ ๊ฒƒ : Sequence ์ด๋ฒคํŠธ

๋งŒ๋“ค๊ณ ๋‚˜๋‹ˆ Animator๋กœ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ด€ ์—†์„ ๋“ฏ



Sequence ์‹คํ–‰์„ ์œ„ํ•œ Queue

์ˆœ์ฐจ์  ์‹คํ–‰ ์ฒดํฌ๋ฅผ ์œ„ํ•œ queTrigger

delay ๋ฐ method๋“ค์„ ๋„ฃ์„ IEnumerator ๋ฆฌ์ŠคํŠธ

composite() ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ฒดํฌ ๊ธฐ๋Šฅ


1. ์›ํ•˜๋Š” ๋™์ž‘์„ ์œ„ํ•œ ํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜์—ฌ Method ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ 

2. ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋“ค์„ Task์— ๋“ฑ๋ก

3. ์‹คํ–‰ํ•˜๋ฉด ๋“ฑ๋ก๋œ Method ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ˆœ์ฐจ๋Œ€๋กœ ์‹คํ–‰


ํŠน์ • ์ด๋ฒคํŠธ๋Š” ๋™์‹œ์— ์‹คํ–‰ ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด, Composite ์ฒดํฌ๋ฅผ True๋กœ ํ•ด์ฃผ๊ณ  ์ƒˆ๋กœ์šด ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.


ย  ย  protected IEnumerator SeqActive(GameObject _object, bool _active, bool _comp = false)

ย  ย  {

ย  ย  ย  ย  _object.SetActive(_active);

ย  ย  ย  ย  yield return null;

ย  ย  ย  ย  composite(_comp);

ย  ย  }


ย  ย  public IEnumerator FadeInEffect(float duration = 1f, bool _comp = false)

ย  ย  {

ย  ย  ย  ย  Color originColor = Color.black;

ย  ย  ย  ย  originColor.a = 0f;

ย  ย  ย  ย  FadeEffectScript.instance.fadeEffect.color = originColor;

ย  ย  ย  ย  FadeEffectScript.instance.fadeEffect.gameObject.SetActive(true);

ย  ย  ย  ย  float curTime = 0f;


ย  ย  ย  ย  while (originColor.a < 1f)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  curTime += Time.unscaledDeltaTime / duration;

ย  ย  ย  ย  ย  ย  originColor.a = Mathf.Lerp(0, 1, curTime);

ย  ย  ย  ย  ย  ย  FadeEffectScript.instance.fadeEffect.color = originColor;

ย  ย  ย  ย  ย  ย  yield return null;

ย  ย  ย  ย  }


ย  ย  ย  ย  FadeEffectScript.instance.fadeEffect.gameObject.SetActive(false);


ย  ย  ย  ย  composite(_comp);

ย  ย  }


๋‹ค์Œ ๋‘ ํ•จ์ˆ˜๋Š” ๊ฐ๊ฐ

ํŠน์ • ์˜ค๋ธŒ์ ํŠธ๋ฅผ on/off ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜

CanvasUI๋ฅผ ๊ฑด๋“œ๋ ค Fade In ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜


๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€

์˜ค๋ธŒ์ ํŠธ๊ฐ€ On๋จ๊ณผ ๋™์‹œ์— Fade In ํšจ๊ณผ๋กœ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ฒœ์ฒœํžˆ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์Œ.


ย  ย  private IEnumerator compositeFictionStart()

ย  ย  {

ย  ย  ย  ย  StartCoroutine(SeqActive(FictionText, true, true));

ย  ย  ย  ย  StartCoroutine(FadeOutEffect(2f, true));

ย  ย  ย  ย  yield return new WaitForSeconds(2f);

ย  ย  ย  ย  composite();

ย  ย  }


๋‹ค์Œ ์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘” ํ•จ์ˆ˜ 2๊ฐœ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ ์‹œํ‚ค๊ณ ,

๋‹ค์Œ Task๊ฐ€ ์‹คํ–‰ ๋˜๊ธฐ ์ „์— ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋„๋ก ์‹œ๊ฐ„๋„ ์กฐ์ •.


๊ทธ ๊ฒฐ๊ณผ


https://youtu.be/Dmlc94W9Fhk

Sequence Manager ๊ตฌํ˜„ ๊ฒฐ๊ณผ

Sequence Manager ๊ตฌํ˜„ ๊ฒฐ๊ณผ

youtu.be



์˜ˆ์‹œ ์˜์ƒ์ด ๋„ˆ๋ฌด ๋ณ„๋กœ์ธ๊ฒƒ ๊ฐ™์€๋ฐ

์‹ค์ œ๋กœ๋Š” ์˜ค๋ธŒ์ ํŠธ ์ด๋™, ๋Œ€ํ™”์ฐฝ ์ถœ๋ ฅ ๋“ฑ

Task ๋“ฑ๋ก์„ ํ•ด์„œ ์›ํ•˜๋Š” ์ด๋ฒคํŠธ ์ปท์”ฌ์„ ๋งŒ๋“ค๋„๋ก ํ–ˆ์Œ


์ถ”๊ฐ€๋กœ Sequence ์‹คํ–‰ ์ค‘์„ ์•Œ๋ ค์„œ ํ”Œ๋ ˆ์ด์–ด ์กฐ์ž‘์„ ๋ง‰๊ฒŒ๋„ ํ•˜๊ณ ,

ํŠน์ • ๋ชจ๋“ˆ์€ ์ž…๋ ฅ ์ „๊นŒ์ง€ ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ ๋ฉˆ์ถฐ์žˆ๊ฒŒ ํ•˜๋Š” ๋“ฑ.

๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ๋ชจ๋“ˆ๋งŒ ๋“ฑ๋กํ•˜๋ฉด ์‹น ๋Œ์•„๊ฐ!

๊ทธ๋ƒฅ ์ œ์ทจํ–ฅ๋Œ€๋กœ ๋งŒ๋“ ๊ฑฐ๋‹ˆ.. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์“ฐ์„ธ์š”.


-----------------------------------------


[SerializeField] protected bool queTrigger;

protected Queue<IEnumerator> QueSeqeunce = new Queue<IEnumerator>();


protected List<IEnumerator> functions = new List<IEnumerator>();

protected List<float> delays = new List<float>();


public void composite(bool _active=false)

{

ย  ย  if (!_active)

ย  ย  {

ย  ย  ย  ย  queTrigger = false;

ย  ย  }

}


protected IEnumerator SequencePlay()

{

ย  ย  while (QueSeqeunce.Count > 0)

ย  ย  {

ย  ย  ย  ย  queTrigger = true;

ย  ย  ย  ย  yield return StartCoroutine(QueSeqeunce.Dequeue());

ย  ย  ย  ย  yield return new WaitUntil(() => queTrigger == false);

ย  ย  }

ย  ย  //SequenceManager.instance.SequenceProcessing = false;


}


protected void GenerateSequence(List<IEnumerator> methods, List<float> delays)

{

ย  ย  //SequenceManager.instance.SequenceProcessing = true;

ย  ย  int count = methods.Count;


ย  ย  for (int inum = 0; inum < count; inum++)

ย  ย  {

ย  ย  ย  ย  QueSeqeunce.Enqueue(Task(methods[inum], delays[inum]));

ย  ย  }

ย  ย  queTrigger = true;


ย  ย  StartCoroutine(SequencePlay());

}


protected IEnumerator Task(IEnumerator _method, float delay)

{

ย  ย ย 

ย  ย  yield return new WaitForSeconds(delay);

ย  ย  yield return StartCoroutine(_method);

}


---------------------------------------