ํ์๋ผ์ธ๐ฌ 06 - Custom Playables๋ก ์๊ฐ ๋ค๋ฃจ๊ธฐ (์ ์ ๋ฆฌ๋ทฐ ๋ฐ ์ฝ๋๊ณต์ )
์ ๋๋ฉ์ด์ ๋ฐ ํํ ๋ฆฌ์ผ ์ ์์ ์ ์ฉํ ์ ๋ํฐ ํ์๋ผ์ธ์ ๋ํด ์์๋ณธ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ํ์๋ผ์ธ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฒ์ ๋ํด ํ์๊ฐ ์ค์ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ๋ฆฌ๋ทฐํ๋ค.
Custom Playables๋ก ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค. ๊ธฐ์กด ์ ๋ํฐ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ค๋ฉด (๊ธฐ๋ณธ์ ์ผ๋ก ์ถ์ฒํ์ง ์๋ ๋ฐฉ์์ด๊ธด ํ์ง๋ง) TimeScale์ ๊ฑด๋๋ฆฌ๊ฑฐ๋, ๋ณ๋์ ์์คํ ์ ๋ง๋ค์ด ์ฌ์ฉํด์ผ๋ง ํ๋ค.
ํ์๋ผ์ธ์ ์ ๋ํฐ์ TimeScale์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ ์์ฃผ ์ฝ๊ฒ ๋ณ๋์ ์๊ฐ์ ์ ๊ฐ์ง ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค. ์๋์ ๊ธ์์๋ ์ค์ ํ๋ก์ ํธ์ ์ฌ์ฉํ๋ ์ฝ๋ ์ค โํ์๋ผ์ธ์ ์๊ฐ์ ๊ฑด๋๋ฆฌ๋ ์ฝ๋๋คโ์ ๋ํด ๋ค๋ฃฌ๋ค.
SlowMotion Track
์ฒ์ ํ์๋ผ์ธ ์์ ์์ Custom Playables ์ ์์ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ ๋๋ โํ์๋ผ์ธ์ ์๊ฐ์ ์์ ๋กญ๊ฒ ๋ค๋ค์ผ ํ๋ ๊ธฐ๋ฅโ์ ๊ฐ๋ฐํ ๋์๋ค. ํ๋ก์ ํธ์ ํน์ฑ์ ํ์๋ผ์ธ ์์ํ ๋๋ ค์ง๊ณ , ๋ค์ ๋นจ๋ผ์ง๊ณ , ์๊ฐ์ ๋ฐ์ด๋๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค. Signal๋ก ํ๊ธฐ์ ์ฌ์ฉํด์ผํ๋ ๊ณณ์ด ๋ง์๊ณ , ์ฝ๋๋ก ํ์๋ ํ์๋ผ์ธ๊ณผ์ ํ์ด๋ฐ์ ๋ง์ถ๊ฑฐ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ ์ฌ๋์ด ๋ค๋ฃจ๊ธฐ๊ฐ ํ๋ค์๋ค. ๋ฐ๋ผ์ Custom Playables๋ก ๊ฐ๋ฐํ๊ธฐ๋ก ํ๋ค.
์ฐธ๊ณ ํ๋ก์ ํธ: Terrible Kingdom Demo
์ ์ฌํ ์์ ํ๋ก์ ํธ๋ฅผ ์ฐพ์๋ณด๋ ์ ๋ํฐ์์ ์ ๊ณตํ๋ Terrible Kingdom์ด๋ผ๋ ์ ๋ชฉ์ ๋ฐ๋ชจ ํ๋ก์ ํธ๋ฅผ ์ฐพ์ ์ ์์๋ค.
๐ ์์ ๋ค์ด๋ก๋ ๋งํฌ
์ด ํ๋ก์ ํธ์๋ ๋ค์ํ ์ปค์คํ ํ๋ ์ด์ด๋ธ ํธ๋๋ค์ด ์๋ค. ๋ช ๊ฐ์ง๋ ํด๋น ํ๋ก์ ํธ์ ๋งค๋์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผํ๋ ํธ๋๋ค์ด๋ค. ์์ธํ ๋ด์ฉ์ ์ค๋ช ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๊ฑฐ๋ Demo๋ฅผ ๋ค์ด๋ฐ์ ์ง์ ์ดํด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
- AI Command Track
- Dialogue Track
- Light Track
- SimpleClip
- TMPTextSwitcher
- Time Machine Track
์ฌ๊ธฐ์ ํ์๊ฐ ์ฐธ๊ณ ํ ํธ๋์ Time Machine Track์ด๋ค. ์ด๋ฆ์ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ํ์๋ผ์ธ์์ ํน์ ์๊ฐ์ผ๋ก ์ด๋ํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. ์ฌ๊ธฐ์ โํน์ ์๊ฐ์ผ๋ก ์ด๋ํ๋ ๊ธฐ๋ฅโ์ ์ฐธ๊ณ ํ์ฌ ํธ๋์ ๋ง๋ค์๋ค.
๊ฐ์กฐ
์ฐธ๊ณ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ Time Machine Track์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ์ ํ๋ก์ ํธ์ ์ฐ๋ ค๋ฉด ์ปค์คํฐ๋ง์ด์ง ํด์ผํ๋ ๋ถ๋ถ์ด ์์๋ค. ์ฐ์ , ์กฐ๊ฑด์ ์ถฉ์กฑํ๊ธฐ ์ ๊น์ง๋ ์์ํ ๋๋ ค์ง๋ ์ฌ๋ก์ฐ๋ชจ์ ์ด ๋ค์ด๊ฐ์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ ํธ๋์ด๋ฆ์ SlowMotion Track์ด๋ผ๊ณ ์ง์๋ค.
๋ํ ์ฐธ๊ณ ํ๋ก์ ํธ์ ์ฝ๋์์๋ ๋๋ ค์ง๋ ์กฐ๊ฑด์ Swich๋ฌธ์ผ๋ก ํ๋ณํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ด ๋์ด๋ ์๋ก ์ฝ๋๋ ๊ธธ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด ์กฐ๊ฑด์ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์ ๊ด๋ฆฌํ๋ฉด์ ํธ๋์ ๊ด๋ฆฌ๋ง ํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์๋ค.
์คํฌ๋ฆฝํธ ๋ชฉ๋ก
ํธ๋๊ณผ ๊ด๋ จ๋ ๋ชฉ๋ก
- SlowMotionTrack
- SlowMotionClip
- SlowMotionBehaviour
- SlowMotionMixerBehaviour
- SlowMotionClipInspector(Editor)
๊ทธ ์ธ
- TimelineSpeedController
- ํ์๋ผ์ธ์ ์๊ฐ์ ์กฐ์
- SlowMotionCondition
- ์กฐ๊ฑด์ ๊ฑฐ๋ ์คํฌ๋ฆฝํธ. ์กฐ๊ฑด์ ๊ฑฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ํด์ผ๋ง ํ๋ค.
MixerBehaviour
๊ธฐ๋ณธ์ ์ธ ํธ๋์ ํ์ ๊ทธ๋๋ก ๊ฐ์ ธ์๊ณ , ๊ฐ์กฐํ ๋ถ๋ถ์ ์กฐ๊ฑด์ ํ๋ณํ๋ MixerBehaviour ์คํฌ๋ฆฝํธ์ Switch๋ฌธ์ด๋ค. 3๊ฐ์ง case๋ฅผ ๋ง๋ค์๋ค. ContinuousSlowing์ ๋จ์ผ๋ก ๋์ํ๋ฉฐ SlowDownAndJumpToMarker์ Marker๋ ์๋ก ์์ ์ด๋ฃจ์ด์ผ ํ๋ค.
- ContinuousSlowing
- ์กฐ๊ฑด์ด false๋ผ๋ฉด ์ง์ ํ ์๋๊น์ง ์ ์ฐจ ๋๋ ค์ง๊ณ , True๊ฐ ๋๋ฉด ๋ค์ 1๋ก ํ๋ณต๋๋ค.
- SlowDownAndJumpToMarker
- ์กฐ๊ฑด์ด false๋ผ๋ฉด ์ง์ ํ ์๋๊น์ง ์ ์ฐจ ๋๋ ค์ง๊ณ , True๊ฐ ๋๋ฉด Marker๊ฐ ์์นํ ํ์๋ผ์ธ ์๊ฐ๋๋ก ์ ํํ๋ค.
- Marker
- 2๋ฒ๊ณผ ์ฐ๊ด๋ case์ด๋ค. ์ ์ฐจ ์๋๊ฐ 1๋ก ํ๋ณต๋๋ค.
1๋ฒ๊ณผ 2๋ฒ์ ๋๋ ค์ง๋ ์กฐ๊ฑด์ ๋ฐ๋๋ค. ๊ทธ ์กฐ๊ฑด์ SlowMotionCondition์ ์์๋ฐ์ ์คํฌ๋ฆฝํธ์๊ฒ์ ๊ฐ์ ธ์จ๋ค.
๋ค์ด๋ก๋ ๋ฐ ์ฌ์ฉ๋ฒ
์์ ๋ค์ด๋ก๋ ๋งํฌ์์ *.unityPackage
๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์ ๋ํฐ์์ ์ด๋ฉด CustomPlayables/SlowMotion ํ์ผ์ด ์์ฑ๋๋ค.
์ฌ์ ์ค์
๋จผ์ , ํ์๋ผ์ธ์ ์๊ฐ์ ์กฐ์ ํ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ [Add Component]ํด์ผํ๋ค.
TimelineSpeedController ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ฒด์ ๋ถ์ด๊ณ , Director ๋ณ์์ ํ์ฌ ์ฌ์ฉํ [Playable Director]๋ฅผ ๋๋๊ทธ & ๋๋ํ๋ค.
ํธ๋ ์์ฑ
ํ์๋ผ์ธ์์ ํธ๋์ ์์ฑํ๋ค. CustomTimeline>SlowMotion์ ํด๋ฆญํ์ฌ ๋ง๋ค ์ ์๋ค. ์ฌ๊ธฐ์ CustomTimeline ํ์์ ๋ค์ด๊ฐ ์๋ ์ด์ ๋ SlowMotion Track์ namespace๊ฐ CustomTimeline์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ ์ค์ ์์ Add Componentํ [TimelineSpeedController.cs]๊ฐ ๋ค์ด์๋ ๊ฐ์ฒด๋ฅผ ๋๋๊ทธ & ๋๋ํ๋ค.
ํด๋ฆฝ ์ค์
์์ฑํ ํธ๋์ [์ฐํด๋ฆญ] ํ [Add Slow Motion Clip]๋ก ํด๋ฆฝ์ ๋ง๋ ๋ค.
ํด๋ฆฝ์ ํด๋ฆญํ๊ณ Inspector์์ ํด๋ฆฝ์ ๋ํ ์ค์ ์ ์งํํ๋ค.
- Action
- ContinuousSlowing/SlowDownAndJumpToMarker/Marker ์ค์ ์ ํ์ด ๊ฐ๋ฅํ๋ค.
ContinuousSlowing์ ๋จ์ผ๋ก ๋์ํ๋ฉฐ
SlowDownAndJumpToMarker์ Marker๋ ์๋ก ์์ ์ด๋ฃจ์ด์ผ ํ๋ค.
์์ธํ ์ฌํญ์ ์๋ฅผ ์ฐธ์กฐ. (MixerBehaviour)
- Marker Label
- ์ด๋ฆ์ ์ฐ๋ฉด ์๋์ผ๋ก ํด๋ฆฝ์ ์ ๋ชฉ์ผ๋ก ์์ฑ๋๋ค.
์ค์! ์ฌ๊ธฐ์ Marker Label์ ContinuousSlowing์ ๊ฒฝ์ฐ ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์ง๋ง, SlowDownAndJumpToMarker์ Marker๋ ์๋ก์ ์ง์ Marker Label์ด ์ผ์นํด์ผ๋ง ์ง์ผ๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๊ผญ ์์ฑํด์ผ๋ง ํ๋ค.
- Event_Method
- ์กฐ๊ฑด์ด ๋ค์ด๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ๊ธฐ์ ๋ฃ์ด์ค๋ค. SlowMotionCondition์ ์์๋ฐ์ ์คํฌ๋ฆฝํธ์ฌ์ผ๋ง ํ๋ค.
- Min Timeline Speed
- ํ์๋ผ์ธ์ ์ต์ ์๋๋ฅผ ๋งํ๋ค. ์ ์ ์ค์ด๋ค์ด ๋ฉ์ถ๊ณ ์ถ๋ค๋ฉด 0์ ๋ฃ์ผ๋ฉด ๋๋ค.
- Lerp Speed
- ์์ Min Timeline Speed๊น์ง ์ผ๋ง๋ ๋น ๋ฅธ ์๋๋ก ์ค์ด๋ค ๊ฒ์ธ์ง ์ค์ ํ๋ค. (Time.DeltaTime * Lerp Speed)
SlowDownAndJumpToMarker์ Marker์ ๋ํ ์ค๋ช ์ด ๋ถ์กฑํ ๊ฒ ๊ฐ์ ์ถ๊ฐ๋ก ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์๋ค.
์ด๋ฐ ์์ผ๋ก Marker Label์ String๊ฐ์ ๋น๊ตํ์ฌ ์๋ก์ ์ง์ ์ฐพ์๊ฐ๋ค.
์กฐ๊ฑด ์ค์
์กฐ๊ฑด ์คํฌ๋ฆฝํธ๋ SlowMotionCondition์ ์์๋ฐ์์ผ๋ก์จ ๋ง๋ค ์ ์๋ค.
์ค์ํ ๊ฒ์ SlowMotionCondition์ GetEventCondition()
์ ๋ฌด์กฐ๊ฑด overrideํด์ผ ํ๋ค๋ ์ ์ด๋ค. ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ด๋ณด๋ฉด Exception์ผ๋ก ํ๊ธฐํด ๋์ ๊ฒ์ ๋ณผ ์ ์๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
namespace CustomTimeline
{
[ExecuteInEditMode]
public class SlowMotionCondition : MonoBehaviour
{
public bool skip = false;
public virtual bool GetEventCondition() // override ํ์
{
throw new System.Exception("Not overwritten");
}
public bool CheckCheckEventCondition()
{
if (skip)
return true;
return GetEventCondition();
}
}
}
GetEventCondition()
ํจ์๋ฅผ override ํ ๋ค ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด true๋ฅผ returnํ๋ ๊ตฌ์กฐ๋ก ์์ฑํ๋ฉด ๋๋ค. ์์ฃผ ๊ฐ๋จํ๊ฒ bool๊ฐ์ ํ๋ ๋ง๋ค์ด ํ
์คํธํด๋ณผ ์ ์๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
namespace CustomTimeline
{
public class SlowMotionEvent_Example : SlowMotionCondition
{
public bool checkTemp;
public override bool GetEventCondition()
{
return checkTemp;
}
}
}
์ด๋ ๊ฒ ๋ง๋ ์กฐ๊ฑด ์คํฌ๋ฆฝํธ๋ฅผ Clip์ Event_Method์ ๋ฃ์ผ๋ฉด ๋๋ค.
ํ ์คํธ
TimelineSpeedController.cs
์ [ExecuteInEditMode]๋ฅผ ๋ฃ์์ผ๋ ์ ๋ํฐ๋ฅผ PlayMode๋ก ๋ง๋ค ํ์ ์์ด ํ๋ ์ด ๋ฒํผ์ ๋๋ฅด์ง ์์๋ ํ์๋ผ์ธ์ ํ๋ฆฌ๋ทฐ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
TimelineSpeed Track
์์์ ์ค๋ช ํ๋ SlowMotion Track์ ์กฐ๊ฑด์ ๋ฐ๋ผ์ ์๊ฐ์ ์กฐ์ ํ๋ ์คํฌ๋ฆฝํธ์๋ค. ์ด๋ฒ์ ์ค๋ช ํ TimelineSpeed Track์ ๊ฐ๋จํ๊ฒ ์๊ฐ๋ง ์กฐ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ ํ๋ก์ ํธ: Default Playables - Time Dilation
์ด์ ์ ์ค๋ช ํ๋ Default Playables์ ํฌํจ๋์ด ์๋ Time Dilationํธ๋์ ์ฐธ๊ณ ํ์๋ค. ํด๋น ํธ๋์ TimeScale์ ์กฐ์ ํ๋ ์คํฌ๋ฆฝํธ๋ก์จ, ํ์๋ผ์ธ์ ์๊ฐ๋ง์ ์กฐ์ ํด์ผํ๋ ํ๋ก์ ํธ์ ์ฑ๊ฒฉ๊ณผ๋ ๋ง์ง ์์ ๊ฐ์กฐํ๊ฒ ๋์๋ค.
๊ฐ์กฐ
TimeScale์ ์กฐ์ ํ๋ ๋ถ๋ถ์ Timeline์ Playables ์์ฒด์ ์๋๋ฅผ ๋ฆ์ถ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์๋ค.
๋ค์ด๋ก๋ ๋ฐ ์ฌ์ฉ๋ฒ
์์ ๋ค์ด๋ก๋ ๋งํฌ์์ *.unityPackage
๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์ ๋ํฐ์์ ์ด๋ฉด CustomPlayables/TimelineSpeed ํ์ผ์ด ์์ฑ๋๋ค.
์ฌ์ ์ค์
SlowMotion Track๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์๋ผ์ธ์ ์๊ฐ์ ์กฐ์ ํ ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ [Add Component]ํด์ผํ๋ค.
TimelineSpeedController ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ฒด์ ๋ถ์ด๊ณ , Director ๋ณ์์ ํ์ฌ ์ฌ์ฉํ [Playable Director]๋ฅผ ๋๋๊ทธ & ๋๋ํ๋ค.
ํธ๋ ์์ฑ
ํ์๋ผ์ธ์์ ํธ๋์ ์์ฑํ๋ค. CustomTimeline>TimelineSpeed Track์ ํด๋ฆญํ์ฌ ๋ง๋ค ์ ์๋ค. ์ฌ๊ธฐ์ CustomTimeline ํ์์ ๋ค์ด๊ฐ ์๋ ์ด์ ๋ TimelineSpeed Track์ namespace๊ฐ CustomTimeline์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ ์ค์ ์์ Add Componentํ [TimelineSpeedController.cs]๊ฐ ๋ค์ด์๋ ๊ฐ์ฒด๋ฅผ ๋๋๊ทธ & ๋๋ํ๋ค.
ํด๋ฆฝ ์ค์
์์ฑํ ํธ๋์ [์ฐํด๋ฆญ] ํ [Add Timeline Speed Clip]๋ก ํด๋ฆฝ์ ๋ง๋ ๋ค.
ํด๋ฆฝ์ ํด๋ฆญํ๊ณ Inspector์์ ํด๋ฆฝ์ ๋ํ ์ค์ ์ ์งํํ๋ค.
์ค์ํ ๊ฒ์ Ease In/Out Duration๊ณผ TimeSpeed์ด๋ค.
๋ธ๋ ๋ฉ ๊ตฌ๊ฐ๋์ ์์ํ ์๋๊ฐ ์กฐ์ ๋๋ฉฐ, ํด๋ฆฝ์ด ์๋ ๊ตฌ๊ฐ์ Time Speed ๋ณ์๊ฐ์ผ๋ก ์๋๊ฐ ์ ์ง๋๊ณ , ํด๋ฆฝ์ด ์๋ ๊ตฌ๊ฐ์ ์คํผ๋๊ฐ 1๋ก ๋์๊ฐ๋ค.
ํ ์คํธ
์์ SlowMotion์ ๋ง์ฐฌ๊ฐ์ง๋ก TimelineSpeedController.cs
์ [ExecuteInEditMode]๋ฅผ ๋ฃ์๊ธฐ ๋๋ฌธ์, ์ ๋ํฐ๋ฅผ PlayMode๋ก ๋ง๋ค ํ์ ์์ด ํ๋ ์ด ๋ฒํผ์ ๋๋ฅด์ง ์์๋ ํ์๋ผ์ธ์ ํ๋ฆฌ๋ทฐ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๋ง๋ฌด๋ฆฌ
์ง๊ธ๊น์ง ํ์๋ผ์ธ์์ ์๊ฐ์ ๋ค๋ฃจ๋ ๋ฒ์ ๋ํด ์ค์ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์๋ณด์๋ค. ๊ณต์ ํ ์ฝ๋๋ค์ ๋ชจ๋ ํ๋ก์ ํธ์ฉ์ผ๋ก ์ ์ํ ๊ฒ์ผ๋ก์จ ์ ๋ง์ ๋ง์ถฐ ๋ฐ๊ฟ ์ฌ์ฉํด์ผ ํ ํ ์ง๋ง ํ์๋ผ์ธ์์ ์๊ฐ์ ์กฐ์ ํ๋ ค๋ ๋ถ๋ค๊ป ์กฐ๊ธ์ด๋๋ง ์ค๋ง๋ฆฌ๊ฐ ๋์์ผ๋ฉด ํ๋ค.