[Unity] ๐ŸŽฅ Cinemachine

ๆจ‚ยท2023๋…„ 9์›” 13์ผ
1

Unity

๋ชฉ๋ก ๋ณด๊ธฐ
1/11
post-thumbnail

์œ ๋‹ˆํ‹ฐ์—๋Š” ์ข‹์€ ํŒจํ‚ค์ง€๋“ค์„ ์ง€์›ํ•˜๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ์‹œ๋„ค๋จธ์‹  ์† ๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ฒฝํ—˜ํ•˜๊ฒŒ ๋œ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์ ์–ด๋ณผ๊นŒ ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์‹œ๋„ค๋จธ์‹ ์€ ๋”ฐ๋กœ document๊ฐ€ ์กด์žฌํ•ด์„œ ๊ธฐ์ˆ  ์ ‘๊ทผ์˜ ๋ฒฝ์ด ๊ฝค๋‚˜ ๋†’๊ฒŒ ๋Š๊ปด์ง€์ง€๋Š” ์•Š์•˜๋‹ค.
๐Ÿ”— Cinemachine Document ๋ฐ”๋กœ๊ฐ€๊ธฐ


0. How To Install โš™๏ธ

์œ ๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๊ณ  Package Manager์— ๋“ค์–ด๊ฐ„๋‹ค. Cinemachine์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  Installํ•ด์ฃผ๋ฉด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

1. Cinemachineโ“

์‹œ๋„ค๋จธ์‹  ๋ธŒ๋ ˆ์ธ (Cinemachine Brain) ์ด๋ผ๊ณ  ํ•˜๋ฉฐ,

Scene ์•ˆ์— ์žˆ๋Š” ์‹œ๋„ค๋จธ์‹ ์˜ ๋ชจ๋“  ๊ฐ€์ƒ ์นด๋ฉ”๋ผ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ. ์œ ๋‹ˆํ‹ฐ ์นด๋ฉ”๋ผ์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค.
์‹œ๋„ค๋จธ์‹  ๋ธŒ๋ ˆ์ธ์€ ์‹ค์งˆ์ ์œผ๋กœ ๊ฒŒ์ž„ ํ™”๋ฉด์ƒ์— ๋น„์ถ”์–ด์ค„ ๊ฐ€์ƒ ์นด๋ฉ”๋ผ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์„ค์ •ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์—‘ํ‹ฐ๋ธŒ ๋˜๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ์นด๋ฉ”๋ผ๋ฅผ ๋น„์ถ”์–ด์ค€๋‹ค.

  • ์‹œ๋„ค๋จธ์‹ ์˜ ์ข…๋ฅ˜
  1. Virtual Camera (๊ฐ€์ƒ ์นด๋ฉ”๋ผ)
    : ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์นด๋ฉ”๋ผ๋กœ, ์ž์œ ๋กญ๊ฒŒ ์กฐ์ •ํ•˜์—ฌ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. FreeLook Camera
    : ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์›ํ˜•์˜ ๋ง์„ ์ƒ์„ฑํ•˜์—ฌ ๊ทธ ๊ตฌ๊ฐ„์•ˆ์—์„œ ํƒ€๊นƒ์„ ๊ด€์ฐฐํ•˜๋Š” ์นด๋ฉ”๋ผ. ํƒœ์–‘๊ณ„์˜ ๊ณต์ „์„ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.
  3. Blend List Camera
    : ํ• ๋‹น๋œ ๊ฐ€์ƒ ์นด๋ฉ”๋ผ๋“ค์„ ์ •ํ•ด์ง„ ๋ธ”๋žœ๋“œ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ์นด๋ฉ”๋ผ
  4. State-Driven Camera
    : ํƒ€๊นƒ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ƒํƒœ๋ณ„๋กœ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์นด๋ฉ”๋ผ
  5. ClearShot Camera
    : ํ”Œ๋ ˆ์ด์–ด์˜ ์ถฉ๋Œ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ ์ƒํƒœ์— ๋”ฐ๋ผ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์นด๋ฉ”๋ผ
  6. Dolly Camera
    : ํŠธ๋ž™์„ ๊น”๊ณ  ๊ทธ ํŠธ๋ž™์„ ๋”ฐ๋ผ ์›€์ง์ด๋Š” ์นด๋ฉ”๋ผ. Dolly Track๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.
  7. Target Group Camera
    : ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ธ ์นด๋ฉ”๋ผ๋“ค์„ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•ด ํ•œ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ์นด๋ฉ”๋ผ
  8. Mixing Camera
    Child Camera Weight๊ฐ’์— ๋”ฐ๋ผ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ•ด์ฃผ๋Š” ์นด๋ฉ”๋ผ.

2. ์นด๋ฉ”๋ผ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด์ž! ๐ŸŽฅ

์šฐ์„  ์œ ๋‹ˆํ‹ฐ 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๋กœ ์„ค์ •๋œ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ƒ์„ธ ์กฐ๊ฑด ์„ค์ •์ด๋‹ค.

  • Binding Mode : ํƒ€๊ฒŸ์„ ์–ด๋–ป๊ฒŒ ๋”ฐ๋ผ ์žก์„๊ฑด์ง€์— ๋Œ€ํ•œ ์„ค์ •์ด๋‹ค. ์„ค์ • ๋Œ€์ƒ์ด ์ขŒ์šฐ๋กœ ์›€์ง์ž„์— ๋”ฐ๋ผ ์นด๋ฉ”๋ผ๋„ 180๋„ ํšŒ์ „ํ• ์ˆ˜ ์žˆ๊ณ  ํšŒ์ „์€ ํ•˜์ง€ ์•Š๊ณ  ์ขŒ์šฐ๋กœ๋งŒ ์ด๋™ํ• ์ˆ˜ ์žˆ๋Š” ์„ค์ • ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.
  • Follow OffSet : ์ง€์ • ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ง„ ์ขŒํ‘œ์—์„œ ์นด๋ฉ”๋ผ๊ฐ€ ์œ„์น˜ํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
  • Damping ์ด๋ž€, ์นด๋ฉ”๋ผ ํšŒ์ „ ์‹œ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์›ํ•˜๋Š” ๊ฐ๋„์— ๋งž์ถฐ์งˆ ๋•Œ ์Šค๋ฅด๋ฅต ๋ฐ”๋€Œ๋Š” ๊ฐ๋„๋ฅผ ์กฐ์ •ํ•ด์ฃผ๋Š” ์žฅ์น˜

๐Ÿ“Œ Aim : LookAt์œผ๋กœ ์„ค์ •๋œ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ƒ์„ธ ์กฐ๊ฑด ์„ค์ •์ด๋‹ค. ์ด๋Š” ๊ณ ์ •๋œ ์œ„์น˜์—์„œ ํƒ€๊ฒŸ์„ ๋ฐ”๋ผ๋ณผ ์Šคํฌ๋ฆฐ์— ๋Œ€ํ•œ ์กฐ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋ฐ‘์—์„œ ์œ„๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๊ฐ๋„๋ฅผ ์กฐ์ •ํ•˜๋Š” ์„ค์ •์œผ๋กœ๋งŒ ํ•„์ž๋Š” ๋งŽ์ด ์‚ฌ์šฉํ•˜์˜€๋‹ค.

3. Cinemachine Component ๐Ÿ‘€

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์‹œ๋„ค๋จธ์‹  ์ปดํฌ๋„ŒํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1) Cinemachine Impluse Listener

Impulse๋Š” ์ถฉ๊ฒฉ์ด๋ผ๋Š” ๋‹จ์–ด๋กœ ์ด๋Š” ์ถฉ๊ฒฉ์„ ๋“ฃ๋Š” ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ถฉ๊ฒฉ์€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? ์•„๋ž˜์˜ Cinemachine Collision Impluse Source๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์†Œ์Šค๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์ถฉ๊ฒฉ์„ ์นด๋ฉ”๋ผ์— ๋ถ™์€ Impulse Listenr์™€ ๊ฐ์ง€ํ•˜์—ฌ ์นด๋ฉ”๋ผ ์‰์ดํ‚น์„ ์‹ค์‹œํ•œ๋‹ค. ๐Ÿซจ

2) Cinemachine Collision Impluse Source

์–ด๋–ค ์ถฉ๊ฒฉ์„ ์ค„์ง€ ์ปค์Šคํ…€ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๋ฌผ๋ก  ์ด ์†Œ์Šค๋Š” Listener๊ฐ€ ์—†์œผ๋ฉด ๋ฌด์šฉ์ง€๋ฌผ์ด๋‹ค. ํ•ญ์ƒ ์†Œ์Šค์™€ ๋ฆฌ์Šค๋„ˆ๋Š” ์ง๊ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

์ถฉ๊ฒฉ ์†Œ์Šค์—๋Š” ์‹œ๋„ค๋จธ์‹  ์ถฉ๋Œ ์ž„ํŽ„์Šค ์†Œ์Šค์™€ ์‹œ๋„ค๋จธ์‹  ์ž„ํŽ„์Šค ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ collision์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ์•„๋‹ˆ๋ผ ์ถฉ๋Œ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ ๊ตฌ์—ญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ž„ํŽ„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†Œ์Šค๊ฐ€ ๋ถ€์ฐฉ๋œ ์˜ค๋ธŒ์ ํŠธ์—๋Š” ๐ŸŸฉ Collider๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.
Cinemachine Collision Impulse Source Component& NoiseSettingAsset ์ฝœ๋ผ์ด๋”์— ์ธ์‹๋  ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ TriggerObjectFilter์—์„œ ์ง„ํ–‰ํ•œ๋‹ค. ํ˜„์žฌ ๋‚˜๋Š” CaveStone์ด๋ผ๋Š” Layer๊ฐ€ ์„ค์ •๋œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ Source component๊ฐ€ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ Trigger Area์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์ถฉ๋Œ์„ ์ง„ํ–‰์‹œํ‚ค๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ถฉ๋Œ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” Layer์„ค์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿš€ rigidbody component๋„ ์กด์žฌํ•ด์•ผ trigger area์—์„œ ๋ฐ˜์‘ํ•˜๋ฏ€๋กœ ์ด๊ฒƒ๋„ ๊ผญ ๋„ฃ์–ด์ฃผ์ž.

๐Ÿค— ์ „์ฒด์ ์ธ ์š”์•ฝ์€ ์ด๋ ‡๊ฒŒ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด์•˜๋‹ค... ๋„์›€์ด ๋ ์ง€๋Š”ใ…Ž
Overview

๐Ÿ”‰ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๋Š” ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ์ค„ ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ Noise Setting์„ ์ด์•ผ๊ธฐํ•ด๋ณด๊ฒ ๋‹ค. ์ผ๋‹จ ํ•„์ž๋„ ์ž์„ธํžˆ ์•Œ์ง€๋Š” ๋ชปํ•˜๊ธฐ์—... ๊ฐ€๋ณ๊ฒŒ ๋ด์ฃผ๊ณ  ๋„˜์–ด๊ฐ€์ฃผ๊ธธ ๋ฐ”๋ž€ใ„ท....ใ…ใ…Ž
์ผ๋‹จ Source component์—์„œ Time envelop์„ ์„ค์ •ํ•ด์ฃผ๋Š”๋ฐ ์ด๋Š” ์Œ์˜ ์ง„ํ–‰์— ๋Œ€ํ•œ ์„ค์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ž์„ธํ•œ ์•ˆ๋‚ด๋Š” ์ด ๋งํฌ๋ฅผ ์ฐธ์กฐํ–ˆ๋‹ค! ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด์ค€ ๋’ค, RawSignal์— ๋“ค์–ด๊ฐˆ NoiseSetting.asset์„ ์ƒ์„ฑํ•œ ๋’ค ํŒŒ์ผ์— ๋“ค์–ด๊ฐ€์„œ x,y,z์ถ•์œผ๋กœ์˜ ์ถฉ๊ฒฉ์ง„๋™์„ ๋žœ๋ค ์„ค์ •์„ ํ• ์ˆ˜์žˆ๋‹ค! ๋ฌผ๋ก  ์œ ๋‹ˆํ‹ฐ์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋Š” preset ํŒŒ์ผ๋„ ์žˆ๋‹ค.

3) Cinemachine Trigger Action

ํ•ด๋‹น ๊ธฐ๋Šฅ์€ 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์„ ์žฌ์ง„ํ–‰ํ•ด์คฌ๋‹ค ๐Ÿˆโ€โฌ›

4) Cinemachine Dolly Cart

๐Ÿ›’ ์„ค์ •๋œ path์— ๋งž์ถฐ cart์— ์›€์ง์ด๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋ณดํ†ต ํŠน์ • ์˜ค๋ธŒ์ ํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”๊ฐ€ํ•ด์„œ ๊ทธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•ด๋‹น path๋กœ ์›€์ง์ด๊ฒŒ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
์ด ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด์žˆ์œผ๋ฉด ์”ฌ์ด ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ์˜ค๋ธŒ์ ํŠธ๊ฐ€ path์— ๋งž๊ฒŒ ์›€์ง์ด๋ฏ€๋กœ ์›ํ•˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์›€์ง์ด๊ณ  ์‹ถ๋‹ค๋ฉด ๋น„ํ™œ์„ฑํ™”์‹œ์ผœ๋†จ๋‹ค๊ฐ€ ์กฐ๊ฑด์— ๋งž๊ฒŒ ํ™œ์„ฑํ™” ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊ฑฐ๊ฐ™๋‹ค.

5) Cinemachine Path

๐Ÿ›ค๏ธ Dolly Cart๊ฐ€ ๋‹ค๋‹ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์š”์†Œ์ด๋‹ค. dolly cart์™€ ๊ฐ™์ด ์ƒ์„ฑ๋œ๋‹ค.
๐ŸŽข ์—ฌ๋Ÿฌ wayPoint๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ์‹์œผ๋กœ path๋ฅผ ์ œ์ž‘ํ•œ๋‹ค. ๊ฐ point์˜ position(์œ„์น˜)๊ณผ Tangent(๊ตด๊ณก)์„ ์ •ํ•ด ์›ํ•˜๋Š” ๋ฃจํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
์ด์™€ ์œ ์‚ฌํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” Cinemachine Smooth Path์ด๋‹ค. ๊ทธ๋ƒฅ path์—์„œ tangent๊ฐ€ ๋น ์ง„ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ ๊ฑฐ๊ฐ™๋‹ค.

4. Cinemachine์„ Code๋กœ ์ ‘๊ทผํ•ด๋ณด์ž โŒจ๏ธ

๐Ÿ”— 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์— ๋Œ€ํ•œ ์ •๋ณด, ์†๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ

5. ์ด๐Ÿค“ํ‰

์ด๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์‹œ๋„ค๋จธ์‹ ์—๋Š” ์กด์žฌํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋œ ๊ฒƒ๋งŒ ์ ๋‹ค๋ณด๋‹ˆ ์—ฌ๊ธฐ์—๋Š” ๊ธฐ๋Šฅ์†Œ๊ฐœ๊ฐ€ ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ ๊ผญ ๋„ํ๋จผํŠธ๋Š” ์ฝ์–ด๋ณด๊ณ  ์ฝ”๋“œ๋กœ๋„ ๋งŽ์ด ์ ‘๊ทผํ•ด๋ณด๋Š” ๊ฒƒ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ถˆํŽธํ•จ์„ ์ค„์—ฌ์ค„๊ฑฐ๊ฐ™๋‹ค.
์นด๋ฉ”๋ผ ๊ฐ๋…์ด ๋œ๋“ฏํ•œ ๋Š๋‚Œ์„ ์ฃผ๋Š” ์•„์ฃผ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ด์—ˆ์–ด์„œ ์ด์ œ๋Š” ๊ทธ๋ƒฅ ๋ฉ”์ธ์นด๋ฉ”๋ผ์™€๋Š” ๋งˆ์ง€๋ง‰์ธ์‚ฌ๋ฅผ ๋ถ€๋ฅผ๊ฑฐ๊ฐ™๋‹ค ๐Ÿ˜‡


ยฉ๏ธ ํ•ด๋‹น ๊ธ€์€ Moonchild๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ์–ป์€ ๊ฒฝํ—˜๋‹ด์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.
์ œ์ž‘๋œ ๊ฒŒ์ž„์˜ ํ”Œ๋ ˆ์ด ์˜์ƒ์€ ์ด ๋งํฌ๋ฅผ ํด๋ฆญํ•ด์ฃผ์‹œ๋ฉด ์˜์ƒ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹คโ˜บ๏ธ

profile
ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์„ ๋‹คํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž๋ž๋‹ˆ๋‹ค (โยดโ—ก`โ)

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด