๋ง๋ค๊ณ ์ ํ ๊ฒ : 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๊ฐ ์คํ ๋๊ธฐ ์ ์ ํจ์๊ฐ ๋๋๋๋ก ์๊ฐ๋ ์กฐ์ .
๊ทธ ๊ฒฐ๊ณผ

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);
}
---------------------------------------
์ด์ ๋๋ฉด๊ทธ๋ฅ dotween์ผ๋ก ์ฒ๋ฆฌํ๋๊ฒ ์ ์ผ ๊น๋ํด๋ณด์ด๋๋ฐ