์ด์ ๊ธ์์ ๋ ๋ถ์๋ ๋ฐ๋ก ๋จธ๋ฆฌ ๋ผ๋(Head Bone) ์์ ์ค๋ธ์ ํธ๋ก ๋ฌ์์คฌ์๋๋ฐ, ์๋๋ผ๋ฉด ๋๋ ํฌํ ์ต ์์ ์์ ๋ฐ๋ก ๋ ์ด์ด(Layer)๋ฅผ ๋๋ ์ ํ PSB ํ์ผ์ ๊ฐ์ด ์๋ ๊ฒ ์ข๊ธด ํ๋ค.
/* ๋ผ๋ ์์์ผ๋ก ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด, ๋ผ๋๊ฐ ์์ง์ผ ๋ ํด๋น ์ค๋ธ์ ํธ๋ ๊ฐ์ด ์์ง์ด์ง ์๋๋ค. */
๊ทธ๋ฐ๋ฐ, ๊ธฐ์กด์๋ ๋ ๊น๋นก์์ ๊ตฌํํ ์๊ฐ์ด ์์๋๋ฐ ์ข ๋ ์ฌ์ค์ ์ธ ์ฐ์ถ์ ์ํด ๋ฃ์ด์ผ ํ๋ค๋ณด๋ ๋์์ด๋๋๊ป์ ๋ค์ ์ฌ์์ ์ ํด์ผํ๋ ์ํฉ์ด ์ผ์ด๋ฌ๋ค. ๊ทธ๋ฌ๋ ๊ณผ์ ์์ ๋์ด ์๋ ์บ๋ฆญํฐ ํ์ผ๊ณผ ๋๋ง ๋ฐ๋ก ์๋ ํ์ผ 2๊ฐ๋ฅผ ๋ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
/* ์ด์ ๊ธ์์ ๋์ด ์ฒ์์ ์์๋ ์ด์ ์๋ค. */
์.. ์ผ๋จ ์ด๊ฑธ๋ก ๋ ๊น๋นก์์ ๊ตฌํํด๋ณด์.
1. ๋ ๊น๋นก์ ์ ๋๋ฉ์ด์ ๋ฐ ๋๋ค ๊น๋นก์ ์คํฌ๋ฆฝํธ ์ ์
๋ ๊น๋นก์ ์ ๋๋ฉ์ด์ ์ ์
๋์ ๊น๋นก์ด๋ ์ ๋๋ฉ์ด์ ํด๋ฆฝ ์ด๋ฆ์ Girl_EyeBlink ์ด๋ผ๊ณ ์ง์ด์ฃผ๊ณ , ํ์ด์ง ์ ๋๋ฉ์ด์ ์ผ๋ก ๊ตฌํํ๋ค.
๋์ ๊น๋นก์ด๋ ์๋๋ ์ ์ ๋๋ฉด ์ถฉ๋ถํ ๊ฒ ๊ฐ๋ค. "Girl Controller"๋ผ๋ ์ ๋๋ฉ์ดํฐ(Animator)๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์ฃผ์ธ๊ณต ์บ๋ฆญํฐ(Girl)์ ๋ถ์ฐฉํด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋๋ฉ์ดํฐ๋ฅผ ์ด์ด์, ์ ๋๋ฉ์ด์ ๋ ์ด์ด(Animation Layer)๋ฅผ ์๋ก ํ๋ ๋ง๋ค์ด์คฌ๋ค.
์ด๋ ๊ฒ ๋ ๊น๋นก์ด๋ ๊ฑธ ๋ฐ๋ก ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ํตํด ์ฌ์ํ๊ฒ ๋๋ฉด ๋์ค์ ์ด๋ค ๋์์ ํด๋ ์ ์ดํ๊ธฐ๊ฐ ํธํ๋ค.
์์ ๊ฐ์ด ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ๋๋์ง ์์๋ค๋ฉด, ๋๋ ๊ฑท๊ธฐ๋ ๋ฌ๋ฆฌ๊ธฐ ์ ๋๋ฉ์ด์ ์ ์ ์ํ ๋๋ ๋ ๊น๋นก์ด๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํด์ ์ ์ํด์ผ ํ๋ค.
ํ์ง๋ง ์์ ๊ฐ์ด ๊ธฐ๋ฅ๋ณ๋ก ๋ ์ด์ด๋ฅผ ๋๋ด๋ค๋ฉด, ๊ฑท๊ธฐ๋ ๋ฌ๋ฆฌ๊ธฐ ์ ๋๋ฉ์ด์ ์ ์ ์ํ ๋ ๋์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
์ฆ, ๋ฌ๋ฆฌ๊ธฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๋๋ฐ ๋๋ ์๋์ผ๋ก ๊น๋นก์ฌ์ฃผ๋ ํธ๋ฆฌํ ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ "Eye" ์ ๋๋ฉ์ด์ ๋ ์ด์ด์ ๋ค์ด๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐ์น๋ฅผ ํ๋ค.
์ด ๋, ๋ ๊น๋นก์์ ๊ณ์ ๋ฐ๋ณต ์ฌ์ํ๋ฉด ์ ๋๋ฏ๋ก Girl_EyeBlink ์ ๋๋ฉ์ด์ ์ Loop Time ์ต์ ์ ๊บผ์คฌ๋ค.
๊ทธ๋ฆฌ๊ณ , ํธ๋ฆฌ๊ฑฐ ๋งค๊ฐ๋ณ์(Trigger Parameters)๋ฅผ "EyeBlink"๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋ ๋ง๋ค์ด์คฌ๋ค.
์ด ๋งค๊ฐ๋ณ์๋ "Girl_EyeBlink"์์ "Exit"๋ก์ ์ํ ์ ์ด(Transition)์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ด์ ์คํฌ๋ฆฝํธ(Script) ๋ด์ฉ์ผ๋ก ๋์ด๊ฐ๋ณด์.
EyeBlink ์คํฌ๋ฆฝํธ ์ ์
๋๋ค ํจ์ Random.Range()๋ฅผ ์ด์ฉํ์ฌ, ๋๋ค ์ฃผ๊ธฐ๋ง๋ค ๋์ ๊น๋นก์ด๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ณจ๋๋ฉํ๋ ์ ํ๋ธ๋ฅผ ๋ณด๋ฉด์ ์๊ฐ์ ์ป์ ์ฌ๊ทํจ์(Recursion Function) ๋ฐฉ๋ฒ์ ํตํด ๊ตฌํํด๋ดค๋ค.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EyeBlink : MonoBehaviour
{
[SerializeField]
private Animator animator;
void Start()
{
Blink();
}
void Blink()
{
int time = Random.Range(2, 5);
_Invoke(time);
}
void _Invoke(int time)
{
animator.SetTrigger("EyeBlink");
Invoke("Blink", time);
}
}
๋๋ต 2~5์ด ์ฌ์ด์ ์ฃผ๊ธฐ๋ก ๋์ ๊น๋นก์ด๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์์ ๊ฐ์ด ์์ฑํ๊ณ , ๋(Eye) ์ค๋ธ์ ํธ์ ๋ถ์ฐฉํด์คฌ๋ค.
์บ๋ฆญํฐ๋ ์ฒ์ ๊ฒ์์ ์์ํ๋ฉด ๋์ ๊น๋นก์ด๊ณ , ํด๋น ์ ๋๋ฉ์ด์ ์ด ๋๋ฌ๋๋ผ๋ Exit ์ํ๋ก์ ์ ์ด๊ฐ ์ผ์ด๋๋ ค๋ฉด 2~5์ด ์ฌ์ด์ ๋๋ค ์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๊ณ , Loop Time์ ๊บผ๋จ๊ธฐ ๋๋ฌธ์ ๋์ ํ ๋ฒ๋ง ๊น๋นก์ด๊ณ ์ฌ์์ ๋คํ๋ค๋ฉด ๋ฉ์ถ ๊ฒ์ด๋ค.
Exit ์ํ๋ก์ ์ํ ์ ์ด๊ฐ ์ผ์ด๋ฌ๋ค๋ฉด, ๋ค์ Entry๋ก ๋ค์ด์์ Girl_EyeBlink๋ก์ ์ํ ์ ์ด๊ฐ ๋ฐ๋ก ์ผ์ด๋๋, ๋๋ต ์ด๋ฐ ๋ก์ง์ผ๋ก ๋ ๊น๋นก์์ ๊ตฌํํ๋ค.
๋ง์ง๋ง์ผ๋ก ์ ๋๋ฉ์ด์ ๋ ์ด์ด์ ๊ฐ์ค์น ์กฐ์ ์ ํด์คฌ๋ค. ๊ฐ์ค์น๊ฐ 1์ ๊ฐ๊น๋ค๋ฉด, ํด๋น ์ ๋๋ฉ์ด์ ๋ง ๋ณด์ผ ๊ฒ์ด๊ณ , 0์ ๊ฐ๊น๋ค๋ฉด ์ ๋ณด์ผ ๊ฒ์ด๋ค. ์ฆ, ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ค๊ณผ์ ํผํฉ ๋น์จ์ ์ค์ ํ๋ ์์ ์ด๋ค.
์ด๋ ๊ฒ ๋ ๊น๋นก์ด๋ ์ ๋๋ฉ์ด์ ์ ์์ด ์์ฑ๋์๋ค. ๋ค์์ Idle, Walk ์ ๋๋ฉ์ด์ ์ ์ ์ํด๋ณผ ์ฐจ๋ก๋ค.
2. ์บ๋ฆญํฐ Idle, Walk ์ ๋๋ฉ์ด์ ์ ์
Idle ์ ๋๋ฉ์ด์ ์ ์
์ฌ์ค Idle ์ ๋๋ฉ์ด์ ์ ์์ ๋ณ ๊ฑฐ ์์๋ค. ๊ทธ๋ฅ ํ๋ ์ ์ฃผ๊ธฐ๋ฅผ ์กฐ๊ธ ๊ธธ๊ฒ ํด์ ๋ง์น ์บ๋ฆญํฐ๊ฐ ๋ค์จ ๋ ์จ์ ์ฌ๋ ๊ฒ์ฒ๋ผ ๋ผ๋๋ฅผ ์กฐ์ ํด์ฃผ๋ฉด ๋๋ค. ์ฒ์ถ, ํ์ถ, ๋ชฉ์ ์ด์ง ์๋ก ํ์ ํ๋ค๊ฐ ์์๋ณต๊ตฌ ์ํค๊ณ , ํ์ด๋ ๋ค๋ฆฌ๊ฐ ๊ฐ๋งํ ์์ผ๋ฉด ์ด์ง๊ฐ์ด ๋ค์ด์ ์๋ค๋ค๋ ์ด์ง์ฉ๋ง ์์ง์ฌ์คฌ๋ค.
์. ๋ค์ ํ ๋ฒ ์ฃผ์๊น๊ฒ ๋ด์ผ ํ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ๋๋ ์ฌ๊ธฐ์ ๋์ ๊ฑด๋ค์ง ์์๋ค. ์ด Idle ์ ๋๋ฉ์ด์ ์ Base Layer์ ๋ฃ๊ณ , Default๋ก ์ง์ ํ๋ค. Loop Time์ ํ์ฑํ๋์ด ์๋ ๊ฒ ๊ธฐ๋ณธ ๊ฐ์ด๋ฏ๋ก, ์ด๋๋ก ๊ฒ์์ ์์ํด๋ณด๋ฉด ์ ๊ธฐํ ๊ด๊ฒฝ์ด ๋ฒ์ด์ง๋ค.
์ด๊ฑธ ์ํด, ์์์ ์ ๋๋ฉ์ด์ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์์ ํ๋ ๊ฒ ํจ์ฌ ์์ํด์ง๋ค.
์ด์ ๊ฑท๊ธฐ(Walk) ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ฐจ๋ก๋ค. ์๋ฌด๋๋ ๋ชจ์ ์ด ๋ง์ด ๋ค์ด๊ฐ๋ ๋์์ด๋ค ๋ณด๋ ๊ต์ฅํ ์ด๋ ค์ ๋ค. ์์ฐ์ค๋ฌ์ด ๋์์ ๊ตฌํํ๋ค๊ณ ๋ช ์๊ฐ์ ์์ ๋ถ์๋ค. ๋์์ด๋๋๊ป ์ฐธ๊ณ ๊ฐ ๋ ๋งํ ์ฌ์ง์ ๋ฐ์์ ๊ทธ๊ฑธ ํ ๋๋ก ๋ง๋ค์๋ค.
์ฐ์ ์ ์ฌ์ง์ ํ ๋๋ก ๋ค๋ฆฌ ์์ง์์ ์ต๋ํ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํํด๋ดค๋ค. ์ฌ๋์ ๋ค๋ฆฌ๊ฐ ์์ง์ด๋ฉด ๊ทธ์ ๋ฐ๋ผ ์๋์ผ๋ก ํ, ๋ชธํต, ๋ชฉ, ๋จธ๋ฆฌ ๋ํ ์์ง์ธ๋ค. ๊ทธ๋์ ๋ค๋ฆฌ ์์ง์์ ๋ค ๋ง๋ ํ์, ์ถ๊ฐ์ ์ผ๋ก ์์ ๊ฐ์ ๋ถ๋ถ๋ค๋ ๋ง๋ค์ด์คฌ๋ค.
์ง์ง ๊ฑฐ์ง๋ง ์ ์น๊ณ ์ฒ์ํ๋ ์์ ์ด๋ค ๋ณด๋(์ฌ์ง์ด ๋๋ ๋์์ธ๊ณ์ด๋ ์๋๋ค), 3์๊ฐ์ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ์ ๋ง ์ ๋์์ ๋ฟ๋ฏํ๊ณ ๊ธฐ๋ปค๋ค.
๋์ค์ ๋ฐฐ๊ฒฝ ๋งต ๋ฆฌ์์ค๋ฅผ ๋ฐ๊ฒ ๋๋ฉด, ๋ฐ์ด ๋ ๋ฐ๋ฅ์ ๋ฟ๊ฒ ํ๋ Target Matching์ด๋ผ๋ ๊ฒ๋ ๊ณต๋ถํด์ ์ ์ฉํด ์ค์ผ๊ฒ ์ง๋ง, ๊ทธ๊ฑด ๋์ค์ ํ๊ธฐ๋ก ํ๊ณ ์ง๊ธ์ ์ด ๊ธฐ์จ์ ์ฆ๊ธฐ์.
Walk ์ ๋๋ฉ์ด์ ๊น์ง ์ ๋ฝ์์ผ๋, ์ด์ ํค ์ ๋ ฅ์ ๋ฐ์ ์บ๋ฆญํฐ๋ฅผ ์ข์ฐ๋ก ์์ง์ด๋ ๊ฑธ ํด๋ด์ผ ํ๋ค.
ํ์ง๋ง, ๊ทธ๊ฒ๊น์ง ์ ๋ค๊ฐ ์ฝ์ ์๊ฐ์ ๋ฆ์ ๊ฒ ๊ฐ์ ๊ฐ๋ค์์ ํฌ์คํ ํ๋๋ก ํ๋ค.