์ ๋ํฐ์๋ ์ข์ ํจํค์ง๋ค์ ์ง์ํ๋๋ฐ ์ด๋ฒ์๋ ์๋ค๋จธ์ ์ ๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฒฝํํ๊ฒ ๋ ๊ธฐ๋ฅ๋ค์ ๋ํด ์ ์ด๋ณผ๊น ํ๋ค. ์ฐธ๊ณ ๋ก ์๋ค๋จธ์ ์ ๋ฐ๋ก document๊ฐ ์กด์ฌํด์ ๊ธฐ์ ์ ๊ทผ์ ๋ฒฝ์ด ๊ฝค๋ ๋๊ฒ ๋๊ปด์ง์ง๋ ์์๋ค.
๐ Cinemachine Document ๋ฐ๋ก๊ฐ๊ธฐ
์ ๋ํฐ ํ๋ก์ ํธ๋ฅผ ์ด๊ณ Package Manager์ ๋ค์ด๊ฐ๋ค. Cinemachine
์ ๊ฒ์ํ๊ณ Installํด์ฃผ๋ฉด ํด๋น ํ๋ก์ ํธ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค!
์๋ค๋จธ์ ๋ธ๋ ์ธ (Cinemachine Brain) ์ด๋ผ๊ณ ํ๋ฉฐ,
Scene ์์ ์๋ ์๋ค๋จธ์ ์ ๋ชจ๋ ๊ฐ์ ์นด๋ฉ๋ผ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ค๋ธ์ ํธ. ์ ๋ํฐ ์นด๋ฉ๋ผ์ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
์๋ค๋จธ์ ๋ธ๋ ์ธ์ ์ค์ง์ ์ผ๋ก ๊ฒ์ ํ๋ฉด์์ ๋น์ถ์ด์ค ๊ฐ์ ์นด๋ฉ๋ผ๊ฐ ๋ฌด์์ธ๊ฐ๋ฅผ ์ค์ ํ๋๋ฐ, ์ด๋ ๊ฐ์ฅ ๋จผ์ ์ํฐ๋ธ ๋๊ฑฐ๋ ์ฐ์ ์์๊ฐ ์๋ ๊ฐ์ ์นด๋ฉ๋ผ๋ฅผ ๋น์ถ์ด์ค๋ค.
์ฐ์ ์ ๋ํฐ Scene์ ์ฒ์ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Main Camera๊ฐ Hierarchy์ ์กด์ฌํ๋ค.
์๋ค๋จธ์ ์ Hierarchy์ฐฝ์์ ์๋์ ๊ฐ์ด ์๋กญ๊ฒ ์์ฑํ ์ ์๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ธ Virtual Camera๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด MainCamera์๋ CinemachineBrain์ด๋ผ๋ Component๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ ์๋ก ์์ฑ๋ ๊ฐ์ ์นด๋ฉ๋ผ๋ฅผ Live๋ก ์ฑํํ๊ณ ์๋ค.
์๋ก ๋ง๋ ๊ฐ์ ์นด๋ฉ๋ผ ์ค๋ธ์ ํธ๋ฅผ ์ ํํด๋ณด๋ฉด ์๋์ ๊ฐ์ Component๊ฐ ์๊ณ ํด๋น ์์๋ค์ ์กฐ์ ํด์ ์นด๋ฉ๋ผ ๋ทฐ ๋ฐ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
๐คธ๐ป ์ฌ์ฉํด๋ณธ ์์๋ง ๊ฒฝํ์ ์ผ๋ก ์์ฑํฉ๋๋ค.
๐ Status: Live [Solo] : ํด๋น ์๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ฑํ ๋์ด์์ง ์์ ์บ ์ด๋๋ผ๋ ํ์ฌ ๋น์ถ๊ณ ํด๋น ์บ ์ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค๋ค
๐ Priority : ์บ ์ ์ฐ์ ์์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋์์๋ก ๋จผ์ ๋ณด์ฌ์ค๋ค. 2D์ Order in layer์ ๊ฐ์ ๊ฐ๋
์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ๋ฐ๋ผ์ ํ Scene์ ์ฌ๋ฌ ๊ฐ์ ์นด๋ฉ๋ผ๋ฅผ ๋ฐฐ์นํด๋๊ณ ์ฐ์ ์์๋ฅผ ๋ฐ๊พธ์ ๋ทฐ๋ฅผ ๋ฐ๊พผ๋ค. (์๊ฐ ๋๊น ์์ด ์์ฐ์ค๋ฌ์ด ์ด๋ ์ ๊ณต)
๐ Follow : ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๊ฐ ๋์์ ์ง์ ํ๋ค. ์ง์ง ์นด๋ฉ๋ผ๊ฐ ๋ฌผ๋ฆฌ์ ์ด๋์ ํ๋ ์ค์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค
๐ LookAt : ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๋ณผ ๋์์ ์ง์ ํ๋ค. ์นด๋ฉ๋ผ์ ๋ฌผ๋ฆฌ์ ์ด๋์์ด ์ง์ ํ ๋์๋ง์ ๋น์ถ๋ค.
๐ Lens Vertical FOV : ์นด๋ฉ๋ผ์ ํ๊ฐ์ ๊ฒฐ์ ํ๋ค. FOV๋ Field Of View์ ์ฝ์์ด๋ค.
๐ Body : Follow๋ก ์ค์ ๋ ๋์์ ๋ํ ์์ธ ์กฐ๊ฑด ์ค์ ์ด๋ค.
Damping
์ด๋, ์นด๋ฉ๋ผ ํ์ ์ ์์ฐ์ค๋ฝ๊ณ ์ํ๋ ๊ฐ๋์ ๋ง์ถฐ์ง ๋ ์ค๋ฅด๋ฅต ๋ฐ๋๋ ๊ฐ๋๋ฅผ ์กฐ์ ํด์ฃผ๋ ์ฅ์น๐ Aim : LookAt์ผ๋ก ์ค์ ๋ ๋์์ ๋ํ ์์ธ ์กฐ๊ฑด ์ค์ ์ด๋ค. ์ด๋ ๊ณ ์ ๋ ์์น์์ ํ๊ฒ์ ๋ฐ๋ผ๋ณผ ์คํฌ๋ฆฐ์ ๋ํ ์กฐ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. ๋ฐ์์ ์๋ก ๋ฐ๋ผ๋ณด๋ ๊ฐ๋๋ฅผ ์กฐ์ ํ๋ ์ค์ ์ผ๋ก๋ง ํ์๋ ๋ง์ด ์ฌ์ฉํ์๋ค.
๋ด๊ฐ ์ฌ์ฉํ ์๋ค๋จธ์ ์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ๋ค.
Impulse๋ ์ถฉ๊ฒฉ์ด๋ผ๋ ๋จ์ด๋ก ์ด๋ ์ถฉ๊ฒฉ์ ๋ฃ๋ ์ปดํฌ๋ํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ถฉ๊ฒฉ์ ์ด๋ป๊ฒ ๋ฐ์ํ๋๊ฐ? ์๋์ Cinemachine Collision Impluse Source๊ฐ ๋ฐ์์ํจ๋ค. ์์ค๊ฐ ๋ฐ์์ํจ ์ถฉ๊ฒฉ์ ์นด๋ฉ๋ผ์ ๋ถ์ Impulse Listenr์ ๊ฐ์งํ์ฌ ์นด๋ฉ๋ผ ์์ดํน์ ์ค์ํ๋ค. ๐ซจ
์ด๋ค ์ถฉ๊ฒฉ์ ์ค์ง ์ปค์คํ ํ๋ ์ปดํฌ๋ํธ์ด๋ค. ๋ฌผ๋ก ์ด ์์ค๋ Listener๊ฐ ์์ผ๋ฉด ๋ฌด์ฉ์ง๋ฌผ์ด๋ค. ํญ์ ์์ค์ ๋ฆฌ์ค๋๋ ์ง๊ฟ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์์ฑํด์ผํ๋ค.
์ถฉ๊ฒฉ ์์ค์๋ ์๋ค๋จธ์ ์ถฉ๋ ์ํ์ค ์์ค์ ์๋ค๋จธ์ ์ํ์ค ์์ค๊ฐ ์กด์ฌํ๋๋ฐ collision์ ์ฌ์ฉํ ์ด์ ๋ ์ด๋ฒคํธ์ ๋ํ ๋ฐ์์ด ์๋๋ผ ์ถฉ๋ ๋ฐ ํธ๋ฆฌ๊ฑฐ ๊ตฌ์ญ์ ๋ํ ์๋ต์ผ๋ก ์ํ์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด ํด๋น ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค. ๋ฐ๋ผ์ ์์ค๊ฐ ๋ถ์ฐฉ๋ ์ค๋ธ์ ํธ์๋ ๐ฉ Collider๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผํ๋ค.
์ฝ๋ผ์ด๋์ ์ธ์๋ ์ค๋ธ์ ํธ๊ฐ ๋ฌด์์ธ์ง ์ ์ ํ๋ ๊ฒ์
TriggerObjectFilter
์์ ์งํํ๋ค. ํ์ฌ ๋๋ CaveStone์ด๋ผ๋ Layer๊ฐ ์ค์ ๋ ์ค๋ธ์ ํธ๊ฐ Source component๊ฐ ์๋ ์ค๋ธ์ ํธ์ Trigger Area์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ์ถฉ๋์ ์งํ์ํค๋๋ก ๊ตฌ์ฑํ๋ค. ์ฐธ๊ณ ๋ก ์ถฉ๋์ํค๊ธฐ ์ํด์๋ Layer์ค์ ๋ฟ๋ง ์๋๋ผ ๐ฉ๐ปโ๐ rigidbody component๋ ์กด์ฌํด์ผ trigger area์์ ๋ฐ์ํ๋ฏ๋ก ์ด๊ฒ๋ ๊ผญ ๋ฃ์ด์ฃผ์.
๐ค ์ ์ฒด์ ์ธ ์์ฝ์ ์ด๋ ๊ฒ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณด์๋ค... ๋์์ด ๋ ์ง๋ใ
๐ ์ฌ๊ธฐ์๋ถํฐ๋ ์ถฉ๋์ ์ด๋ป๊ฒ ์ค ๊ฒ์ธ๊ฐ์ ๋ํ Noise Setting
์ ์ด์ผ๊ธฐํด๋ณด๊ฒ ๋ค. ์ผ๋จ ํ์๋ ์์ธํ ์์ง๋ ๋ชปํ๊ธฐ์... ๊ฐ๋ณ๊ฒ ๋ด์ฃผ๊ณ ๋์ด๊ฐ์ฃผ๊ธธ ๋ฐ๋ใท....ใ
ใ
์ผ๋จ Source component์์ Time envelop์ ์ค์ ํด์ฃผ๋๋ฐ ์ด๋ ์์ ์งํ์ ๋ํ ์ค์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์์ธํ ์๋ด๋ ์ด ๋งํฌ๋ฅผ ์ฐธ์กฐํ๋ค! ์ด๋ ๊ฒ ์ค์ ํด์ค ๋ค, RawSignal์ ๋ค์ด๊ฐ NoiseSetting.asset์ ์์ฑํ ๋ค ํ์ผ์ ๋ค์ด๊ฐ์ x,y,z์ถ์ผ๋ก์ ์ถฉ๊ฒฉ์ง๋์ ๋๋ค ์ค์ ์ ํ ์์๋ค! ๋ฌผ๋ก ์ ๋ํฐ์์ ์๋์ผ๋ก ์ ๊ณตํ๋ preset ํ์ผ๋ ์๋ค.
ํด๋น ๊ธฐ๋ฅ์ trigger๋ก ์ค์ ํด๋์ Area์ ์ค์ ํด๋์ object๊ฐ ๋ค์ด๊ฐ๋ฉด ์ค์ ํด๋์ Action์ ์งํ์์ผ์ฃผ๋ Component์ด๋ค.
trigger area์ ๋ค์ด๊ฐ์ ๋(Enter)์ ๋๊ฐ์ ๋(Exit)๋ก ๋๋ ์ค ์ ์๊ณ ์ฌ๊ธฐ์๋ Trigger Object Filter๊ฐ ์์ด์ ํน์ Layer, tag์ ๋ํ Object ์ ํ์ด ๊ฐ๋ฅํ๋ค.
Action์ custom, priority Boost, Activate, Deactiavte, Enable, Disable, Play, Stop ์ผ๋ก ๋ง์ถฐ ์ค์ ํด์ค์์๊ณ custom์ ์ฃผ๋ก ์ฌ์ฉํ ๋๋ ํจ์๋ฅผ ์ฐ๊ฒฐ์์ผ ํด๋น ์์น์ ํ๋ ์ด์ด๊ฐ ๋ค์ด์ค๋ฉด ๋ง๋ ์ด๋ฒคํธ๋ฅผ ์คํ์์ผ์คฌ๋ค. ๋นํ์ฑํ๋ ์ค๋ธ์ ํธ๋ฅผ ํ์ฑ์ํค๊ธฐ ์ํด์๋ Activate. ๋นํ์ฑํ์ํค๊ธฐ ์ํด์๋ Deactivate.
๐จ ์ฃผ์ :
DontDestoryOnLoad
์ ๋ค์ด๊ฐ๊ฑฐ๋์ฑ๊ธํค
์ผ๋ก ์ด์ ์ฌ์์ ์์ฑ๋์ด ๋ค์ ์ด๊ธฐํ๋์ง ๋ชปํ๋ ๊ฒ์ ์คํ ์ด์ ์ ์ค๋ธ์ ํธ๋ฅผ ์ฐ๊ฒฐํด์ค๋ค๊ณ ํด๋ missing์ฒ๋ฆฌ๊ฐ ๋ Skip First๊ฐ ์นด์ดํ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ์ด๊ธฐํ๋ฅผ ํด์ค ๋ฐฉ๋ฒ์ผ๋ก ์งํํด์ผ ์ํ๋๋๋ก ์งํ์ด ๋๋ค.
** ํ์๋ ์๋ก์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ Init์ ์ฌ์งํํด์คฌ๋ค ๐โโฌ
๐ ์ค์ ๋ path์ ๋ง์ถฐ cart์ ์์ง์ด๋ ๊ธฐ๋ฅ์ด๋ค. ๋ณดํต ํน์ ์ค๋ธ์ ํธ์ ์ปดํฌ๋ํธ๋ก ์ถ๊ฐํด์ ๊ทธ ์ค๋ธ์ ํธ๊ฐ ํด๋น path๋ก ์์ง์ด๊ฒ ํ ๋ ์ฌ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด์์ผ๋ฉด ์ฌ์ด ์์ํ์๋ง์ ์ค๋ธ์ ํธ๊ฐ path์ ๋ง๊ฒ ์์ง์ด๋ฏ๋ก ์ํ๋ ์์ ๋ถํฐ ์ค๋ธ์ ํธ๋ฅผ ์์ง์ด๊ณ ์ถ๋ค๋ฉด ๋นํ์ฑํ์์ผ๋จ๋ค๊ฐ ์กฐ๊ฑด์ ๋ง๊ฒ ํ์ฑํ ์์ผ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉด ์ข์๊ฑฐ๊ฐ๋ค.
๐ค๏ธ Dolly Cart๊ฐ ๋ค๋ ๊ฒฝ๋ก๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์์์ด๋ค. dolly cart์ ๊ฐ์ด ์์ฑ๋๋ค.
๐ข ์ฌ๋ฌ wayPoint๋ฅผ ๋ฐฐ์นํ๋ ์์ผ๋ก path๋ฅผ ์ ์ํ๋ค. ๊ฐ point์ position(์์น)๊ณผ Tangent(๊ตด๊ณก)์ ์ ํด ์ํ๋ ๋ฃจํธ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ด์ ์ ์ฌํ ์ปดํฌ๋ํธ๋ Cinemachine Smooth Path์ด๋ค. ๊ทธ๋ฅ path์์ tangent๊ฐ ๋น ์ง ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฑฐ๊ฐ๋ค.
๐ Cinemachine Scripting document ๋ฐ๋ก๊ฐ๊ธฐ
using Cinemachine;
camB = GetComponent<CinemachineVirtualCameraBase>(); // ์ฐ์ ์์, follow, lookAt ์ค์ ๊ฐ๋ฅ
cam = GetComponent<CinemachineVirtualCamera>(); // ๊ฐ์ ์นด๋ฉ๋ผ ๊ฐ์ ธ์ค๊ธฐ
cam.GetCinemachineComponent<CinemachineTransposer>(); // ๊ฐ์ ์นด๋ฉ๋ผ์ Follow์ ๋ํ ์์ ์ ๊ทผ ๊ฐ๋ฅ
cam.GetCinemachineComponent<CinemachineComposer>(); // ๊ฐ์ ์นด๋ฉ๋ผ์ LookAt์ ๋ํ ์์ ์ ๊ทผ ๊ฐ๋ฅ
dolly = GetComponent<CinemachineDollyCart>();
// ํ์ฑํ, ์์ง์ด๊ณ ์๋ ํ์ฌ ์์น, path์ ๋ํ ์ ๋ณด, ์๋ ์ ๊ทผ ๊ฐ๋ฅ
์ด๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ์๋ค๋จธ์ ์๋ ์กด์ฌํ๋ค. ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์์ ์ฌ์ฉ๋ ๊ฒ๋ง ์ ๋ค๋ณด๋ ์ฌ๊ธฐ์๋ ๊ธฐ๋ฅ์๊ฐ๊ฐ ๋ง์ง๋ ์์ง๋ง ๊ผญ ๋ํ๋จผํธ๋ ์ฝ์ด๋ณด๊ณ ์ฝ๋๋ก๋ ๋ง์ด ์ ๊ทผํด๋ณด๋ ๊ฒ์ด ์ฌ์ฉํ๋๋ฐ ๋ถํธํจ์ ์ค์ฌ์ค๊ฑฐ๊ฐ๋ค.
์นด๋ฉ๋ผ ๊ฐ๋
์ด ๋๋ฏํ ๋๋์ ์ฃผ๋ ์์ฃผ ๋ฉ์ง ๊ธฐ๋ฅ์ด์์ด์ ์ด์ ๋ ๊ทธ๋ฅ ๋ฉ์ธ์นด๋ฉ๋ผ์๋ ๋ง์ง๋ง์ธ์ฌ๋ฅผ ๋ถ๋ฅผ๊ฑฐ๊ฐ๋ค ๐
ยฉ๏ธ ํด๋น ๊ธ์ Moonchild
๋ฅผ ์ ์ํ๋ ๊ณผ์ ์์ ์ป์ ๊ฒฝํ๋ด์ ๋ฐํ์ผ๋ก ์์ฑ๋ ๊ธ์
๋๋ค.
์ ์๋ ๊ฒ์์ ํ๋ ์ด ์์์ ์ด ๋งํฌ๋ฅผ ํด๋ฆญํด์ฃผ์๋ฉด ์์์ผ๋ก ์ด๋ํฉ๋๋ค.
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋คโบ๏ธ