ํ์๋ผ์ธ๐ฌ 07 - Custom Playables๋ก EyeIK ์ ์ฉํ๊ธฐ (์ ์ ๋ฆฌ๋ทฐ ๋ฐ ์ฝ๋๊ณต์ )
์ ๋๋ฉ์ด์ ๋ฐ ํํ ๋ฆฌ์ผ ์ ์์ ์ ์ฉํ ์ ๋ํฐ ํ์๋ผ์ธ์ ๋ํด ์์๋ณธ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Unity-chan ํ๋ก์ ํธ์์ ์ ๊ณตํ๋ IkLookAt๋ฅผ ์ด๋ป๊ฒ ํ์๋ผ์ธ์ผ๋ก ์ฎ๊ฒจ์๋์ง ์ค์ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ๋ฆฌ๋ทฐํ๋ค.
EyeIK Track
์ ๋๋ฉ์ด์ ์ ์ ํ๋ก์ ํธ ์งํ ๋์ค ์บ๋ฆญํฐ๋ค์ด ํน์ ์ฅ์๋ฅผ ๋ฐ๋ผ๋ณด๊ฑฐ๋, ์ฌ์ฉ์๋ฅผ ๋ฐ๋ผ๋ด์ผํ๋ ์ฅ๋ฉด๋ค์ด ๋ง์๋ค. ์ฝํฐ๋ ๊ธฐํ์ด๋ ๋ฆฌ์์ค๊ฐ ์๋ฒฝํ๊ฒ ๋์์์ด ์ ๋๋ฉ์ด์ ์์ฒด๋ฅผ ์์ ํ ํ์๊ฐ ์๋ ํน์ ์์ ํ ์ ์๋ ํ๋ก์ ํธ๋ผ๋ฉด ๋ชจ๋ฅผ๊น, ์ ๋๋ฉ์ด์ ์ ์ ๋จ๊ณ์์ ๋์ ๊ณผ ์์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ Unity Japan์์ ์ ๊ณตํ๋ Unity-chan ํ๋ก์ ํธ์ ์กด์ฌํ๋ IkLookAt ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์กฐํ์ฌ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
์ฐธ๊ณ ํ๋ก์ ํธ: Unity-chan
๐ ์ฐธ๊ณ ํ๋ก์ ํธ: SD์ ๋ํฐ์งฑ 3D๋ฐ์ดํฐ๋ชจ๋ธ ํ์ด์ง
Unity Japan์์ ์ฌ์ฉํ๋ IkLookAt ์คํฌ๋ฆฝํธ๋ Unity Animator ๋ด์ฅํจ์์ธ SetLookAtWeight()
์ SetLookAtPosition()
์ ์ด์ฉํ์ฌ ๊ตฌํํ ๊ฒ์ด๋ค. ์ด ๋ ํจ์๋ ์ ๋๋ฉ์ดํฐ ํด๋จธ๋
ธ์ด๋ ์๋ฐํ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์น๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ๋ง๋ ๋ค.
EyeIk Track์ ์ฌ์ฉํ๊ธฐ ์ํด unity-chan ํ๋ก์ ํธ๋ฅผ ๋ค์ด๋ก๋ ํ ํ์๋ ์๋ค.
๊ฐ์กฐ
IkLookAt ์คํฌ๋ฆฝํธ์์๋ bool๊ฐ์ ์ด์ฉํ์ฌ ๋ฐ๋ผ๋ณด๊ฑฐ๋ ๋ฐ๋ผ๋ณด์ง ์๊ฑฐ๋์ ๋ ์ํฉ์ผ๋ก ๋๋์ด ์๋ํ๋ค. ํ์ง๋ง ์บ๋ฆญํฐ์ ์์ ์ด๋์ด ์์ฐ์ค๋ฝ์ง ์๊ณ ๋๋ ๋์ด์ง๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ ๋๋ฉ์ด์ ์์๋ ์์ ์ ์์ง์์ด ์์ฐ์ค๋ฌ์์ผํ๊ธฐ ๋๋ฌธ์ lookAtWeight๊ฐ์ 0~1๋ก ์กฐ์ ํ๊ณ 0์ผ ๊ฒฝ์ฐ bool๊ฐ์ false๋ก ๋ง๋๋ ๋ฐฉ์์ ํํ๋ค.
๋ค์ด๋ก๋ ๋ฐ ์ฌ์ฉ๋ฒ
์์ ๋ค์ด๋ก๋ ๋งํฌ์์ *.unityPackage
๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์ ๋ํฐ์์ ์ด๋ฉด CustomPlayables/EyeIk ํ์ผ์ด ์์ฑ๋๋ค.
EyeIk ์คํฌ๋ฆฝํธ ์ค์ ํ๊ธฐ
์ฌ์ฉํ ํด๋จธ๋
ธ์ด๋ ์๋ฐํ ์บ๋ฆญํฐ ๊ฐ์ฒด์ EyeIk.cs
์คํฌ๋ฆฝํธ๋ฅผ [Add Component]ํ๋ค.
์๋์ผ๋ก ์ ๋๋ฉ์ดํฐ๊ฐ ๋ฑ๋ก๋๋๋ฐ, ๋ง์ฝ ์ ๋๋ฉ์ดํฐ์ ์ฝํธ๋กค๋ฌ์ ์๋ฐํ๊ฐ ๋ฑ๋ก๋์ด์์ง ์๋ค๋ฉด ๋ฑ๋กํด์ค๋ค.
[Look At obj]์ ์บ๋ฆญํฐ๊ฐ ๋ฐ๋ผ๋ณผ Targetํ๋๋ฅผ ์ค์ ํด์ค๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์ด ์๋ฐํ๊ฐ ๋ฐ๋ผ๋ณด๋ ๋์์ด ์ฌ๋ฌ๊ฐ๋ผ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ [Look At obj]๋ ๋ฐ๋ผ๋ณด๋ ๋์ ์์ฒด๊ฐ ์๋๋ผ, ๋ค๋น๊ฒ์ด์ ์ด ๋ ํธ๋ค๋ฌ๋ผ๋ ๊ฒ์ด๋ค. ํธ๋ค๋ฌ๋ฅผ ์กฐ์ข ํ๋ ๊ฒ์ด EyeIK Clip์ด ํ๋ ์ผ์ด ๋๋ค.
์๋ฅผ๋ค์ด, Box1๊ณผ Box2๋ฅผ ๋ฐ๋ผ๋ณผ ๊ฒ์ด๋ผ๋ฉด Box1์ด๋ Box2๋ฅผ [Look At obj]์ ๋ฃ๋ ๊ฒ์ด ์๋๋ผ Target์ด๋ผ๋ ๋น์ค๋ธ์ ํธ๋ฅผ ํ๋ ๋ง๋ค๊ณ Target์ [Look At obj]์ ํ ๋นํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ Target์ ์์ง์์ Clip์์ ์กฐ์ ํ๋ค. ์ด๋ ์ถํ ์ฌ์ฉ๋ฐฉ๋ฒ์์ ๋์ฑ ์์ธํ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
์ ๋๋ฉ์ดํฐ ์ฝํธ๋กค๋ฌ ์ค์ ํ๊ธฐ
์ ๋๋ฉ์ดํฐ ์ฝํธ๋กค๋ฌ๋ฅผ ๋๋ธํด๋ฆญํ์ฌ ์ ๋๋ฉ์ดํฐ ์๋ํฐ ์ฐฝ์ ์ฐ๋ค. Base Layer์ ํฑ๋๋ฐํด๋ฅผ ๋๋ฌ [IK Pass]์ ์ฒดํฌ๋ฅผ ํด์ฃผ์ด์ผ๋ง ํจ์์ ์ํฅ์ ๋ฐ๋๋ค.
ํธ๋ ์์ฑ
ํ์๋ผ์ธ์์ ํธ๋์ ์์ฑํ๋ค. CustomTimeline>Eye Ik Track์ ํด๋ฆญํ์ฌ ๋ง๋ค ์ ์๋ค. ์ฌ๊ธฐ์ CustomTimeline ํ์์ ๋ค์ด๊ฐ ์๋ ์ด์ ๋ Eye Ik Track์ namespace๊ฐ CustomTimeline์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์์์ Add Componentํ [EyeIk.cs]๊ฐ ๋ค์ด์๋ ๊ฐ์ฒด๋ฅผ ๋๋๊ทธ & ๋๋ํ๋ค.
ํด๋ฆฝ ์ค์
์์ฑํ ํธ๋์ [์ฐํด๋ฆญ] ํ [Add Eye Ik Clip]๋ก ํด๋ฆฝ์ ๋ง๋ ๋ค.
ํด๋ฆฝ์ ํด๋ฆญํ๊ณ Inspector์์ ํด๋ฆฝ์ ๋ํ ์ค์ ์ ์งํํ๋ค.
์ค์ํ ๊ฒ์ Ease In/Out Duration๊ณผ Current Target์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ฆฝ์์๋ EyeIk.cs
์์ ์ค์ ํ ํธ๋ค๋ฌ์ธ [Look At obj]๋ฅผ ์์ง์ด๋ ์ญํ ์ ํ๋ค.
๋ธ๋ ๋ฉ ๊ตฌ๊ฐ๋์ ๊ณ ๊ฐ๋ฅผ ๋๋ฆฌ๊ณ , ํด๋ฆฝ์ด ์ ์ง๋๋ ๋์ ๋ฐ๋ผ๋ณด๋ฉฐ, ํด๋ฆฝ์์ ๋๊ฐ๋ ์๊ฐ ๋ค์ ์ ๋ฉด์ ๋ฐ๋ผ๋ณธ๋ค.
ํ ์คํธ
Eye IK๋ ์๋ฐํ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ์กฐ์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Play ์ํ์์๋ง ํ์ธํด๋ณผ ์ ์๋ค. ์ ๋ํฐ์ Play ๋ฒํผ์ ๋๋ฌ ์ ์์๋ํ๋์ง ํ์ธํด๋ณธ๋ค.
๋ง๋ฌด๋ฆฌ
Timeline์ ๋ํ ํฌ์คํ ์ ์ด๊ฒ์ผ๋ก ๋ง์ง๋ง์ผ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก ์๊ฒ๋๋ ๊ฒ์ด ์์ผ๋ฉด ๋์ค์ ์ถ๊ฐํ๋๋ก ํ๊ฒ ๋ค. ์ค๋ช ์ด ๊ทธ๋ฆฌ ๊น๋ํ์ง ๋ชปํ์์ง๋ ๋ชจ๋ฅด์ง๋ง Timeline์ ๋ณด๋ฉด ๋ณผ์๋ก ๋งค๋ ฅ์ ์ธ ํด์ด๋ค. VR ํ๋ก์ ํธ์ฌ์ Timeline๊ณผ ์ฐฐ๋ก๊ถํฉ์ด๋ผ๋ Cinemachine๋ ๊ฐ์ด ์ฌ์ฉํด๋ณด์ง ๋ชปํ๋ค. ์ง๊ธ์ ์๋๋๋ผ๋ ๋์ค ํ๋ก์ ํธ์์๋ ๊ผญ ํ ๋ฒ ๊ฐ์ด ์ฌ์ฉํด๋ณด๊ณ ์ถ๋ค.