Document: Description of RtsCamera - Tiny-Metro/Poly-Metro GitHub Wiki

ARtscamera::ARtsCamera

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

์ด ์ƒ์„ฑ์ž๋Š” ARtsCamera ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒ์„ฑ์ž์—์„œ๋Š” ์นด๋ฉ”๋ผ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • CustomCollisionComponent: ๊ตฌ์ฒด ์ถฉ๋Œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์นด๋ฉ”๋ผ์˜ ์ถฉ๋Œ ์ฒดํฌ์™€ ์›€์ง์ž„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ CustomCollisionComponent๋Š” USphereComponent ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, "RtsCamera_CollisionComponent0"์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์นด๋ฉ”๋ผ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ถฉ๋Œํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ถฉ๋Œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ตฌ ํ˜•ํƒœ์ด๊ณ  ๊ทธ ๋ฐ˜๊ฒฝ์€ 100 ์œ ๋‹›์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ์Šต๋‹ค.
  • MovementComponent: ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์นด๋ฉ”๋ผ์˜ ์›€์ง์ž„์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. UFloatingPawnMovement ํƒ€์ž…์˜ Movement Component๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์€ "RtsCameran_MovementComponen0" ์ž…๋‹ˆ๋‹ค.
  • RootComponent: ์นด๋ฉ”๋ผ์˜ ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ CustomCollisionComponent ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::SetupPlayerInputComponent

์ด ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ์— ๋งˆ์šฐ์Šค ํœ  ์ž…๋ ฅ๊ณผ ํšŒ์ „ ๋ชจ๋“œ ๊ด€๋ จ ์•ก์…˜์„ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ์— ์ž…๋ ฅ ๋ฐ”์ธ๋”ฉ์„ ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. InputComponent ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ›์•„์˜จ ํ›„, ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ์ถ•๊ณผ ์•ก์…˜์„ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งˆ์šฐ์Šค ํœ  ์ž…๋ ฅ, ์นด๋ฉ”๋ผ ํšŒ์ „ ๋ชจ๋“œ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™” ์•ก์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • BindAxis๋กœ ๋งˆ์šฐ์Šค ํœ ์„ ์คŒ์ธ ํ•จ์ˆ˜์— ๋ฐ”์ธ๋”ฉ ํ•˜์˜€๊ณ 
  • BindAction์œผ๋กœ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ•จ์ˆ˜ EngageRotation์œผ๋กœ ํšŒ์ „๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ฒŒ ํ•˜์˜€๊ณ  ๋–ผ์—ˆ์„ DisEngageRotation์œผ๋กœ ํšŒ์ „๋ชจ๋“œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ARtscamera::Tick

  • playerController ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, GetController() ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์นด๋ฉ”๋ผ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • GetMousePosition()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์šฐ์Šค์˜ ํ˜„์žฌ ์œ„์น˜(mouseLocation)๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • rotationMode ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, ๋งˆ์šฐ์Šค ์›€์ง์ž„์— ๋”ฐ๋ผ ํšŒ์ „์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • DeltaMouse ๋ณ€์ˆ˜๋Š” ๋งˆ์šฐ์Šค ์›€์ง์ž„์˜ ๋ณ€ํ™”๋Ÿ‰์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, mouseScreenLocationGrab ๊ณผ mouseLocation ์˜ ์ฐจ์ด๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
    • RotationSpeed ์™€ DeltaSeconds ๊ฐ’์„ ๊ณฑํ•˜์—ฌ ํšŒ์ „ ์†๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    • ํšŒ์ „ ๊ฐ๋„๋ฅผ NewRotation ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ SetActorRotation() ํ•จ์ˆ˜๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • mouseScreenLocationGrab ์„ ํ˜„์žฌ mouseLocation ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • rotationMode ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, ๋งˆ์šฐ์Šค ์œ„์น˜์— ๋”ฐ๋ผ ํŒฌ(Pan) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ํ™”๋ฉด ๊ฐ€์žฅ์ž๋ฆฌ์— ๋งˆ์šฐ์Šค๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ ํŒจ๋‹ํ•ฉ๋‹ˆ๋‹ค.
    • ScreenEdgePanZonePercent ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹์ด ๋ฐœ์ƒํ•  ์ง€์ ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ํŒจ๋‹ ํ•จ์ˆ˜๋“ค(PanLeft(), PanRight(), PanForward(), PanBackward())์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::BeginPlay

BeginPlay ํ•จ์ˆ˜์—์„œ๋Š” ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ, ํ”Œ๋ ˆ์ด์–ด ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์ดˆ๊ธฐ ์œ„์น˜์™€ ํšŒ์ „ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • playerController: ํ˜„์žฌ ์นด๋ฉ”๋ผ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์™€ playerController ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • CustomCollisionComponent ์˜ ์œ„์น˜์™€ ํšŒ์ „์„ ์ดˆ๊ธฐ ๊ฐ’์ธ initLocation ๊ณผ initRotation ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • CustomCollisionComponent ๋ผ๋Š” ์Šคํ”ผ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ์›”๋“œ ์œ„์น˜๋ฅผ initLocation ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘๋  ๋•Œ ์นด๋ฉ”๋ผ์˜ ์œ„์น˜๋ฅผ initLocation ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ
  • CustomCollisionComponent ์˜ ์›”๋“œ ํšŒ์ „์„ initRotation ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ์˜ ํšŒ์ „์„ initRotation ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • playerController ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ํ™”๋ฉด์˜ ๋„ˆ๋น„์™€ ๋†’์ด์ธ screenWidth ์™€ screenHeight ๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค. playerController ์˜ ๋ทฐํฌํŠธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ ธ์™€ screenWidth ์™€ screenHeight ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์นด๋ฉ”๋ผ์˜ ํ™”๋ฉด ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ARtscamera::ChangePitch

์ด ํ•จ์ˆ˜๋Š” ์นด๋ฉ”๋ผ์˜ ํ”ผ์น˜(์ƒํ•˜ ํšŒ์ „)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • magnitude ๊ฐ’์— ๋”ฐ๋ผ ํ”ผ์น˜๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๋œ magnitude ๊ฐ’์ด ์–‘์ˆ˜๋ฉด ์œ„์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ, ์Œ์ˆ˜๋ฉด ์•„๋ž˜์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํ”ผ์น˜๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์ „ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•˜๋ฉฐ, playerController ๊ฐ€ ์œ ํšจํ•˜๊ณ  ์„ค์ •๋œ ์ตœ๋Œ€ ๋ฐ ์ตœ์†Œ ํ”ผ์น˜ ๊ฐ’์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ, AddControllerPitchInput() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ”ผ์น˜ ์ž…๋ ฅ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. magnitude ์™€ PitchChangeRate, GetWorld()->GetDeltaSeconds() ๊ฐ’์„ ์กฐํ•ฉํ•˜์—ฌ ํ”ผ์น˜ ๋ณ€ํ™”์˜ ํฌ๊ธฐ ๋ฐ ์†๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::ChangeYaw

ChangeYaw ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋ฐ˜์‘ํ•˜์—ฌ ์นด๋ฉ”๋ผ์˜ ์š”(yaw, ์ขŒ์šฐ ํšŒ์ „)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • magnitude ๊ฐ’์— ๋”ฐ๋ผ ์ขŒ์šฐ ํšŒ์ „์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๋œ magnitude ๊ฐ’์ด ์–‘์ˆ˜๋ฉด ์šฐ์ธก ๋ฐฉํ–ฅ์œผ๋กœ, ์Œ์ˆ˜๋ฉด ์ขŒ์ธก ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์ „ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•˜๋ฉฐ, playerController ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋งŒ ํšŒ์ „์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ, AddControllerYawInput() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์š” ์ž…๋ ฅ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. magnitude ์™€ YawRate, GetWorld()->GetDeltaSeconds() ๊ฐ’์„ ์กฐํ•ฉํ•˜์—ฌ ์š” ๋ณ€ํ™”์˜ ํฌ๊ธฐ ๋ฐ ์†๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::Orbit

Orbit ํ•จ์ˆ˜๋Š” ์นด๋ฉ”๋ผ๊ฐ€ ๋ชฉํ‘œ ์ฃผ์œ„๋ฅผ ํšŒ์ „(Orbit)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • magnitude ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Orbit์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์–‘์ˆ˜์ผ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์™ผ์ชฝ์œผ๋กœ Orbit ๋™์ž‘์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ, AddControllerYawInput() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์š” ์ž…๋ ฅ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. magnitude ์™€ YawRate , GetWorld()->GetDeltaSeconds() ๊ฐ’์„ ์กฐํ•ฉํ•˜์—ฌ Yaw ๋ณ€ํ™”์˜ ํฌ๊ธฐ ๋ฐ ์†๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค
  • ์นด๋ฉ”๋ผ์˜ Yaw ํšŒ์ „๊ฐ’์— ์ž…๋ ฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ magnitude๋Š” ์›์  ์ฃผ์œ„์˜ ํšŒ์ „ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, YawRate์€ Yaw ์ถ•์„ ๋”ฐ๋ฅธ ํšŒ์ „ ์†๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. GetWorld()->GetDeltaSeconds()๋กœ ํ”„๋ ˆ์ž„ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(Delta Time)์„ ๊ฐ€์ ธ์™€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํšŒ์ „์ด ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฐฉํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ Y์ถ• ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋ฅผ ์–ป๊ณ , ์ด ๋ฒกํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Delta Time๊ณผ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์„ ๊ณฑํ•˜์—ฌ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ด๋™์ด ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::PanForward/PanBackward/PanRight/PanLeft

์ด ๋„ค ๊ฐ€์ง€ ํ•จ์ˆ˜๋Š” ์นด๋ฉ”๋ผ๋ฅผ ๊ฐ๊ฐ ์•ž, ๋’ค, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • AddMovementInput() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์นด๋ฉ”๋ผ์˜ ์œ„์น˜๋ฅผ ์›€์ง์ž…๋‹ˆ๋‹ค.
  • ์ด๋™ ๋ฐฉํ–ฅ์€ ์นด๋ฉ”๋ผ์˜ ํ˜„์žฌ ํšŒ์ „์— ๋”ฐ๋ผ ๊ณ„์‚ฐ๋˜๋ฉฐ, FRotationMatrix(GetControlRotation()).GetScaledAxis() ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • PanRate ๊ฐ’์— ๋”ฐ๋ผ ์ด๋™ ์†๋„๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ํšŒ์ „ ๋ชจ๋“œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•˜๋ฉฐ, playerController ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด๋™์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • PanForward: ์นด๋ฉ”๋ผ๋ฅผ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. rotationMode๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  playerController๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. FRotationMatrix(GetControlRotation()).GetScaledAxis(EAxis::X)๋กœ ํ˜„์žฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฐฉํ–ฅ์—์„œ X์ถ• ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋ฅผ ์–ป๊ณ , ์ด ๋ฒกํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ PanRate * GetWorld()->GetDeltaSeconds() ๋งŒํผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • PanBackward: ์นด๋ฉ”๋ผ๋ฅผ ๋’ค๋กœ ์ด๋™์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์œ„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์ด์ง€๋งŒ, ๋งˆ์ง€๋ง‰์— -PanRate * GetWorld()->GetDeltaSeconds()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • PanRight: ์นด๋ฉ”๋ผ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. rotationMode๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  playerController๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. FRotationMatrix(GetControlRotation()).GetScaledAxis(EAxis::Y)๋กœ ํ˜„์žฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฐฉํ–ฅ์—์„œ Y์ถ• ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋ฅผ ์–ป๊ณ , ์ด ๋ฒกํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์นด๋ฉ”๋ผ๋ฅผ PanRate * GetWorld()->GetDeltaSeconds() ๋งŒํผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • PanLeft: ์นด๋ฉ”๋ผ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์œ„์™€ ๋™์ผํ•œ ๋ฐฉ์ด์ง€๋งŒ, ๋งˆ์ง€๋ง‰์— -PanRate * GetWorld()->GetDeltaSeconds()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

ARtscamera::ZoomIn

์ด ํ•จ์ˆ˜๋Š” ์นด๋ฉ”๋ผ์˜ ์คŒ ์ธ/์•„์›ƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค, ๋งˆ์šฐ์Šค ํœ ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • magnitude ๊ฐ’์— ๋”ฐ๋ผ ์นด๋ฉ”๋ผ์˜ Z ์ถ• ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์คŒ ์ธ ๋˜๋Š” ์คŒ ์•„์›ƒ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๋œ magnitude ๊ฐ’์ด ํ”Œ๋Ÿฌ์Šค๋ฉด ์คŒ ์ธ, ๋งˆ์ด๋„ˆ์Šค๋ฉด ์คŒ ์•„์›ƒ์ด ๋ฉ๋‹ˆ.
  • ์คŒ ์†๋„๋Š” ZoomRate ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋ฐ”๋€Œ๋ฉฐ, GetWorld()->GetDeltaSeconds() ๋ฅผ ํ†ตํ•ด ํ”„๋ ˆ์ž„ ๊ฐ„ ์‹œ๊ฐ„ ๋ณ€ํ™”๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
  • ์นด๋ฉ”๋ผ์˜ ์œ„์น˜ ๋ณ€๊ฒฝ์„ AddMovementInput() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ๋Œ€ ๋ฐ ์ตœ์†Œ ์คŒ ๊ฐ’(MinZoom, MaxZoom) ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • ํšŒ์ „ ๋ชจ๋“œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•˜๋ฉฐ, playerController ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋งŒ ์คŒ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ, FRotationMatrix(GetControlRotation()).GetScaledAxis(EAxis::Z) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ˜„์žฌ ๋†’์ด ์ถ• ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„, magnitude, -ZoomRate ๊ฐ’, GetWorld()->GetDeltaSeconds() ๊ฐ’์„ ์กฐํ•ฉํ•˜์—ฌ ์ด๋™ ์ž…๋ ฅ์˜ ํฌ๊ธฐ์™€ ์†๋„๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::EngageRotation()

์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์นด๋ฉ”๋ผ์˜ ํšŒ์ „ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ์นด๋ฉ”๋ผ๋ฅผ ํšŒ์ „ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํšŒ์ „ ๋ชจ๋“œ๋Š” ๋งˆ์šฐ์Šค ์›€์ง์ž„์— ๋”ฐ๋ผ ์นด๋ฉ”๋ผ๊ฐ€ ํšŒ์ „ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ฃผ์š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • playerController ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋งŒ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • rotationMode ๋ณ€์ˆ˜๋ฅผ true ๋กœ ์„ค์ •ํ•˜์—ฌ ํšŒ์ „ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • playerController ์˜ ๋งˆ์šฐ์Šค ์ปค์„œ ํ‘œ์‹œ ์—ฌ๋ถ€์™€ ํด๋ฆญ ์ด๋ฒคํŠธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•˜์—ฌ, ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • InitialRotation ๋ณ€์ˆ˜์— ํ˜„์žฌ ์นด๋ฉ”๋ผ์˜ ํšŒ์ „ ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ํšŒ์ „ ๋ชจ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::DisengageRotation()

EngageRotation๊ณผ ๋ฐ˜๋Œ€๋กœ ์ž‘๋™ํ•˜์—ฌ ์นด๋ฉ”๋ผ์˜ ํšŒ์ „ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ํšŒ์ „ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์นด๋ฉ”๋ผ๋ฅผ ํŒฌ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ฃผ์š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  • rotationMode ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ , playerController ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋งŒ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • rotationMode ๋ณ€์ˆ˜๋ฅผ false ๋กœ ์„ค์ •ํ•˜์—ฌ ํšŒ์ „ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • playerController ์˜ ๋งˆ์šฐ์Šค ์ปค์„œ ํ‘œ์‹œ ์—ฌ๋ถ€์™€ ํด๋ฆญ ์ด๋ฒคํŠธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๋ณต์›ํ•˜์—ฌ ์ •์ƒ ์ƒํƒœ๋กœ ๋Œ์•„์˜ค๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • InitialRotation ์— ์ €์žฅ๋œ ์ดˆ๊ธฐ ํšŒ์ „ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์นด๋ฉ”๋ผ์˜ ํšŒ์ „ ๊ฐ’์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

ARtscamera::Jumpto

ํŠน์ • ์œ„์น˜๋กœ ์ฆ‰์‹œ ์นด๋ฉ”๋ผ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ, ์ด ํ•จ์ˆ˜๋Š” ์ง€์ •ํ•œ ์œ„์น˜๋กœ ์นด๋ฉ”๋ผ๋ฅผ ์ˆœ๊ฐ„์ด๋™์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • FVector NewLocation ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์œ„์น˜๋กœ ์นด๋ฉ”๋ผ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • NewLocation ๋ฒกํ„ฐ์˜ X์™€ Y ์ขŒํ‘œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ , Z ์ขŒํ‘œ๋Š” ํ˜„์žฌ ์นด๋ฉ”๋ผ์˜ Z ์ขŒํ‘œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์นด๋ฉ”๋ผ์˜ ๋†’์ด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  X์™€ Y ์ขŒํ‘œ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์œ„์น˜ ๋ฒกํ„ฐ NewCameraLocation ์„ ์‚ฌ์šฉํ•˜์—ฌ ์นด๋ฉ”๋ผ์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ด ๊ธฐ๋Šฅ์€ ์™ธ๋ถ€์—์„œ๋„ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— UFuction์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.