Mixed Reality Utility Kit - 2024-Adoor/practice GitHub Wiki

https://developer.oculus.com/documentation/unity/unity-mr-utility-kit-overview

Scene API ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋” ํŽธํ•˜๊ฒŒ ์“ฐ๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์•„์ง์€ ๋ฌด์Šจ ์˜๋„๋กœ ๋ถ„๋ฆฌํ•ด๋†“์€์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

MRUK ํ”„๋ฆฌํŒน์— ์žˆ๋Š” Scene Loaded Event - Scene API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ณดํ†ต ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋ฏ€๋กœ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์— ์ด ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณธ ํ‚คํŠธ์˜ ๋‹ค๋ฅธ ํ”„๋ฆฌํŒน์—์„œ๋Š” ๊ฐ€๋” MRUKStart๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ ๋˜ํ•œ ๊ณต๊ฐ„์ด ๋‹ค ์ƒ๊ธธ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค. ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ๋งŒ์•ฝ ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™”์— ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๊ฐ ํ”„๋ฆฌํŒน์— ์žˆ์–ด ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋Š” MRUKStart์— ์˜์กดํ•˜์ง€ ๋ง๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋‚ด์šฉ์„ MRUK ํ”„๋ฆฌํŒน์— ์žˆ๋Š” Scene Loaded Event๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

Note

MRUK ํ”„๋ฆฌํŒน์˜ Room Prefabs์—๋Š” ์—์…‹์— ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฐ€์ƒ ๋ฃธ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ง์ ‘ ์ž์‹ ๋งŒ์˜ ๋ฃธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ „์‹œ ๊ณต๊ฐ„์ด ์–ด๋А์ •๋„ ํ™•์ •๋˜๋ฉด, ๋ฃธ ํ”„๋ฆฌํŒน์„ ๋งŒ๋“  ๋’ค์— Room Index๋ฅผ ๊ทธ๊ฑธ๋กœ ์„ค์ •ํ•ด์„œ ์‹ค์ œ ์ „์‹œ ๊ณต๊ฐ„๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Overview

๐Ÿ”— ์ด ๋ถ€๋ถ„์€ Features๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

MR ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ‚คํŠธ๋Š” ๊ณต๊ฐ„ ์ธ์‹ ์•ฑ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ํ•„์š”ํ•œ ์ผ๋ฐ˜์  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Scene API ์œ„์— ํ’๋ถ€ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ๋„๊ตฌ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์„ธ๊ณ„์— ๋Œ€ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ์•ฑ์„ ๋…ํŠนํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์š”์†Œ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

์”ฌ ์ฟผ๋ฆฌ

  • ๋นŒํŠธ์ธ ๋ฌผ๋ฆฌ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ ˆ์ด์บ์ŠคํŠธ ์ฟผ๋ฆฌํ•˜๊ธฐ.
  • ๋ฐ”๋‹ฅ, ๋ฒฝ, ํ‘œ๋ฉด์—์„œ ์œ ํšจํ•œ ์Šคํฐ ์œ„์น˜ ์ฐพ๊ธฐ.
  • ๋ ˆ์ด์บ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ์˜ ํ‘œ๋ฉด ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ.
  • ์–ด๋–ค ์œ„์น˜๊ฐ€ ๋ฐฉ ์•ˆ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ.
  • ๋ฐฉ์˜ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ๊ฐ€์ ธ์˜ค๊ธฐ.
  • ์•ต์ปค ๊ฐ„์˜ ๋ถ€๋ชจ/์ž์‹ ๊ด€๊ณ„ ๊ฐ€์ ธ์˜ค๊ธฐ(์˜ˆ: ์„œ๋กœ์˜ ์œ„์— ์Œ“์ธ ๋ณผ๋ฅจ ๋˜๋Š” ๋ฒฝ์— ๋ถ€์ฐฉ๋œ ์•ก์ž).

๊ทธ๋ž˜ํ”ฝ ๋„์šฐ๋ฏธ

  • ํ…์Šค์ฒ˜๋ฅผ ๋ชจ๋ธ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ๋ณ€ํ˜•๋˜์ง€ ์•Š๋„๋ก ์ด์Œ๋งค ์—†์ด ๋ž˜ํ•‘ํ•˜์—ฌ ๋ฒฝ์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ˜ผํ•ฉ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์Šคํ‚จ ๋ฐ”๊ฟ” ์ž…ํžˆ๊ธฐ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์ œ ๋ฌผ์ฒด์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐฉํ–ฅ, ํฌ๊ธฐ, ๋น„์œจ์˜ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ๋ฌผ์ฒด๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์ƒ์˜ ์˜ค๋ธŒ์ ํŠธ์™€ ๊ฐ€๊ตฌ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐ์น˜ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ตฌํ˜„๋œ ๋ฐฉ ๋ฐ”์šด๋”๋ฆฌ.

๊ฐœ๋ฐœ ๋„๊ตฌ

  • ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ต์ปค๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜์—ฌ ์œ„์น˜, ๋ฐฉํ–ฅ, ๋ ˆ์ด๋ธ” ๋“ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” 30๊ฐœ์˜ ํ…Œ์ŠคํŠธ์šฉ ๋ฐฉ ํ”„๋ฆฌํŒน ์„ ํƒ์ง€.

Features

๐Ÿ”— ์ด ๋ถ€๋ถ„์€ Features๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

MR ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ‚คํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ์—”์ง€๋‹ˆ์–ด๋ง, ๋˜๋Š” Unity Inspector ๋‚ด ํ”„๋ฆฌํŒน ๋„๊ตฌ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐ์ •.

์ฝ”๋“œ

์—”์ง€๋‹ˆ์–ด๋งํ•  ๋•Œ ์ฃผ๋กœ MRUK, MRUKRoom, MRUKAnchor ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. MRUK๋Š” ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค์ด๋ฏ€๋กœ ์žฅ๋ฉด์— MRUK ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ ๋‹น ํ•˜๋‚˜์˜ MRUKRoom ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์ด ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ž์‹์—๋Š” MRUKAnchor ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” OVRSceneManager๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ OVRSceneRoom ๋ฐ OVRSceneAnchor์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ณต์‹ ๋ฌธ์„œ์— ์žˆ๋Š” ๋ช…์„ธ ๋ฒˆ์—ญ์ž…๋‹ˆ๋‹ค.

MRUK

  • LoadSceneFromDevice(): ํ€˜์ŠคํŠธ ๋””๋ฐ”์ด์Šค์—์„œ ์”ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • LoadSceneFromPrefab(): ์ œ๊ณต๋œ ํ”„๋ฆฌํŒน ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” ๋‹น์‹ ์˜ ์”ฌ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ClearScene(): ์”ฌ ๋ฐ์ดํ„ฐ ์ง€์šฐ๊ธฐ
  • GetRooms(): ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ฐฉ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • GetCurrentRoom(): ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์œ„์น˜ํ•œ ๋ฐฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

MRUKRoom

  • GetRoomAnchors(): ๋ฐฉ์˜ ๋ชจ๋“  MRUKAnchor์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค(๋ฐฉ ์ž์ฒด์˜ ์•ต์ปค๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Œ).
  • GetFloorAnchor(): ๋ฐ”๋‹ฅ MRUKAnchor์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • GetCeilingAnchor(): ์ฒœ์žฅ MRUKAnchor์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • GetGlobalMeshAnchor(): ๊ธ€๋กœ๋ฒŒ ๋ฉ”์‹œ MRUKAnchor์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • GetWallAnchors(): ๋ฐฉ์˜ ๋ชจ๋“  ๋ฒฝ MRUKAnchor์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • GetRoomOutline(): ๋ฐฉ์˜ ์•„๋žซ๋ฉด ๋ชจ์„œ๋ฆฌ ์ ์„ ์‹œ๊ณ„ ๋ฐฉํ–ฅ ์ˆœ์„œ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค(์œ„์—์„œ ์•„๋ž˜๋กœ ๋ณผ ๋•Œ).
  • GetKeyWall(): ๋ฐฉ์—์„œ ๋’ค์— ๋‹ค๋ฅธ ๋ฐฉ ๋ชจ์„œ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฐ€์žฅ ๊ธด ๋ฒฝ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค(ํ—ˆ์šฉ ์˜ค์ฐจ ๋ฒ”์œ„ ๋‚ด).
  • Raycast()/RaycastAll(): ๋ฐฉ์˜ ์•ต์ปค๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ์ถฉ๋Œ ์—†์ด ๋ ˆ์ด์บ์ŠคํŠธ; ์ถฉ๋Œ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Œ์— ์œ ์˜ํ•˜์„ธ์š”.
  • GetBestPoseFromRaycast(): ๋ ˆ์ด์บ์ŠคํŠธ์—์„œ ์ถ”์ฒœ ํฌ์ฆˆ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋กœ AR ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • IsPositionInRoom(): ์œ„์น˜๊ฐ€ ๋ฐฉ ์•„์›ƒ๋ผ์ธ ๋‚ด์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • GetRoomBounds(): ๋งคํฌ๋กœ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์›”๋“œ ์ •๋ ฌ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค
  • GetFacingDirection(): ๋ณผ๋ฅจ์— ๋Œ€ํ•ด, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒฝ๋ฉด์˜ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ Y-forward ๋ฒกํ„ฐ(์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€)๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • IsPositionInSceneVolume(): ์œ„์น˜๊ฐ€ ๋ฐฉ์˜ ์•„๋ฌด ๋ณผ๋ฅจ ๋‚ด์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • TryGetClosestSeatPose(): ๊ด‘์„ ์—์„œ ๋ชจ๋“  ์†ŒํŒŒ ์˜ค๋ธŒ์ ํŠธ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ขŒ์„ ํฌ์ฆˆ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • GetSeatPoses(): ๋ฐฉ์˜ ๋ชจ๋“  ์ขŒ์„ ํฌ์ฆˆ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (๋ฐฉ์— ์†ŒํŒŒ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ 0).
  • TryGetAnchorParent(): ํ”Œ๋žซ ์”ฌ ๊ณ„์ธต๊ตฌ์กฐ(๋ฐฉ๊ณผ ์•ต์ปค)๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๋…ผ๋ฆฌ์ ์ธ ๋ถ€๋ชจ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ด ์–ด๋А ๋ฒฝ์— ๋ถ™์–ด ์žˆ๋Š”์ง€, ๋˜๋Š” ๋ณผ๋ฅจ์ด ๋‹ค๋ฅธ ๋ณผ๋ฅจ์— ์Œ“์—ฌ ์žˆ๋Š”์ง€
  • TryGetAnchorChildren(): ์œ„์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€ ๊ด€๊ณ„์˜ ๊ฒฝ์šฐ
  • `DoesRoomHave(): ๋ฐฉ์— ์‹œ๋งจํ‹ฑ ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํ•œ ์ค„ ์•ก์„ธ์Šค
  • TryGetClosestSurfacePosition(): ์ฃผ๋กœ RoomGuardian ํ”„๋ฆฌํŒน์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์•„๋ฌด ์”ฌ ํ‘œ๋ฉด์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ง€์ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • FindLargestSurface(): ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ‘œ๋ฉด์ ์ด ๊ฐ€์žฅ ํฐ ์•ต์ปค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • GenerateRandomPositionInRoom(): ๋ณผ๋ฅจ ์”ฌ ์˜ค๋ธŒ์ ํŠธ์™€ ํ‘œ๋ฉด์— ๋„ˆ๋ฌด ๊ฐ€๊นŒ์šด ์ ์„ ํ”ผํ•˜๋ฉด์„œ ๋ฐฉ์— ์ž„์˜์˜ ์œ„์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • GenerateRandomPositionOnSurface(): ๋ฐฉ์˜ ์•„๋ฌด ์œ ํšจํ•œ ํ‘œ๋ฉด์— ์œ„์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

MRUKAnchor

  • Raycast(): this ์•ต์ปค์— ๋Œ€ํ•ด ์ถฉ๋Œ ์—†๋Š” ๋ ˆ์ด์บ์ŠคํŠธ
  • IsPositionInBoundary(): ์œ„์น˜๊ฐ€ plane์˜ 2D ๊ฒฝ๊ณ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์˜ค๋ธŒ์ ํŠธ์— plane์ด ์—†๋Š” ๊ฒฝ์šฐ false).
  • GetDistanceToSurface(): ํ•œ ์ ์—์„œ ์ด ์•ต์ปค์˜ ํ‘œ๋ฉด๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • GetClosestSurfacePosition(): ์•ต์ปค์˜ ํ‘œ๋ฉด์—์„œ ์ฃผ์–ด์ง„ ์ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • GetAnchorCenter(): ์œ„์น˜๊ฐ€ ๋ณผ๋ฅจ์˜ ์ƒ๋‹จ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Scene API ๋ณผ๋ฅจ์—์„œ transform.position์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ค‘์‹ฌ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • GetAnchorSize(): ๋ณผ๋ฅจ์„ ์šฐ์„ ์œผ๋กœ ์•ต์ปค์˜ Vector3 ์Šค์ผ€์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์•ต์ปค์—๋Š” 2D ๋ฐ 3D ๋ฐ”์šด๋“œ๊ฐ€ ๋ชจ๋‘ ์žˆ์œผ๋ฏ€๋กœ ํŠน์ •ํ•œ ์Šค์ผ€์ผ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ฐธ๊ณ ํ•˜์„ธ์š”:
    • PlaneRect.Value.size: (Vector2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค: ๋จผ์ € HasPlane์ด ์ฐธ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.)
    • VolumeBounds.Value.size: (Vector3๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค: ๋จผ์ € HasVolume์ด ์ฐธ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.)
  • AnchorLabels: ์ด ์•ต์ปค์— ์–ด๋–ค ์‹œ๋งจํ‹ฑ ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋ ค๋ฉด ์ด๊ฒƒ์„ ์ฟผ๋ฆฌํ•˜์„ธ์š”.
  • GetBoundsFaceCenters() -> Vector3: ๊ฐ ํ‘œ๋ฉด์˜ ์ค‘์‹ฌ์ (ํ‰๋ฉด์ธ ๊ฒฝ์šฐ 1๊ฐœ, ๋ณผ๋ฅจ์ธ ๊ฒฝ์šฐ 6๊ฐœ)์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • IsPositionInVolume(Vector3 worldPosition, bool testVerticalBounds, float distanceBuffer = 0.0f) -> bool: ์œ„์น˜๊ฐ€ ์ด ๋ณผ๋ฅจ ์•ˆ์— ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  • HasLabel(string label) -> bool: ์•ต์ปค์— ํŠน์ • ์‹œ๋งจํ‹ฑ ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • GetLabelsAsEnum() -> SceneLabels: ์ด ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชจ๋“  ์‹œ๋งจํ‹ฑ ๋ผ๋ฒจ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€์—์„œ ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด ๊ณต์‹ ๋ฌธ์„œ์— ์—†๋Š” ํ•จ์ˆ˜๋„ ๋ณด์ด๋‹ˆ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ™•์ธ์„ ํ•œ ๋ฒˆ ๋” ํ•˜๊ธฐ

World locking

์›”๋“œ ์ž ๊ธˆ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์ƒ โ€‹โ€‹์„ธ๊ณ„๋ฅผ ํ˜„์‹ค ์„ธ๊ณ„์™€ ๋” ์‰ฝ๊ฒŒ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ƒ ์ฝ˜ํ…์ธ ๋Š” ์•ต์ปค์— ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ํ•„์š” ์—†์ด ์žฅ๋ฉด์— ์ž„์˜๋กœ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, MRUK๋Š” ํ›„๋“œ ์•„๋ž˜์˜ ์žฅ๋ฉด ์•ต์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์นด๋ฉ”๋ผ๋ฅผ ์‹ค์ œ ์„ธ๊ณ„์™€ ๋™๊ธฐํ™”๋˜๋„๋ก ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์นด๋ฉ”๋ผ ์žฅ๋น„์˜ ์ถ”์  ๊ณต๊ฐ„ ๋ณ€ํ™˜์„ ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ์•ฝ๊ฐ„ ์กฐ์ •ํ•˜์—ฌ ๊ทผ์ฒ˜ ์žฅ๋ฉด ์•ต์ปค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋‚˜ํƒ€๋‚˜๋„๋ก ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด์ „์—๋Š” ํ˜„์‹ค ์„ธ๊ณ„์™€ ๊ฐ€์ƒ ์„ธ๊ณ„์˜ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ๊ฐ€์ƒ ์ฝ˜ํ…์ธ  ์กฐ๊ฐ์ด ์•ต์ปค์— ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์–ด๋–ค ๊ฒƒ๋„ ์ •์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ์›€์ง์ด๋Š” ๊ฒƒ์— ๋Œ€์ฒ˜ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋„คํŠธ์›Œํ‚น, ๋ฌผ๋ฆฌ, ๋ Œ๋”๋ง ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›”๋“œ ์ž ๊ธˆ์ด ํ™œ์„ฑํ™”๋˜๋ฉด ๊ฐ€์ƒ ์ฝ˜ํ…์ธ ๊ฐ€ ์ •์ ์œผ๋กœ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด์— ๊ฐ€๊นŒ์šด ๊ณต๊ฐ„์€ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์ง€๋งŒ ๋” ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ณต๊ฐ„์€ ์‹ค์ œ ์„ธ๊ณ„์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์›”๋“œ ์ž ๊ธˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€๋งŒ MRUK ์ธ์Šคํ„ด์Šค์—์„œ EnableWorldLock์„ false๋กœ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ

Core/Tools ํด๋”์— ์žˆ๋Š” ์ด๋Ÿฌํ•œ ํ”„๋ฆฌํŒน์€ ์žฅ๋ฉด์— ๋“œ๋กญ๋˜๊ณ  Inspector ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์„ ํƒ์ ์œผ๋กœ ์ˆ˜์ •๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ฆฌํŒน ์ค‘ ์ผ๋ถ€๋Š” MRUKStart ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ด๋Š” ๋Œ์–ด์„œ ๋†“๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ์— ์ดˆ๊ธฐํ™” ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ชฉ๋ก(๊ฐ€๊ธ‰์  MRUK ํ”„๋ฆฌํŒน์—์„œ)์œผ๋กœ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์˜ˆ๋Š” ์ž์‹ ์˜ ๊ฒŒ์ž„ ์ฝ”๋“œ์—์„œ EffectMesh์˜ ๋ฉ”์‹œ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, EffectMesh.CreateMesh() ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผ Scene Loaded Event ๋ฆฌ์ŠคํŠธ์—์„œ ์ž์‹ ์˜ ์ฝ”๋“œ ํ•จ์ˆ˜ ์œ„์— ์žˆ๊ฒŒ ํ•˜์—ฌ ๋จผ์ € ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„์ ์œผ๋กœ ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. MRUK ๋ฐ EffectMesh ํ”„๋ฆฌํŒน์„ ์žฅ๋ฉด์œผ๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค. EffectMesh ํ”„๋ฆฌํŒน์—์„œ MRUKStart ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  2. MRUK ํ”„๋ฆฌํŒน์—์„œ Scene Loaded Event ๋ชฉ๋ก์— EffectMesh.CreateMesh() ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ทธ ๋ฐ‘ ๋ฆฌ์ŠคํŠธ์— ์ž์‹ ๋งŒ์˜ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

MRUK

MR ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ‚คํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Scene Loaded Event: ์ด ์ด๋ฒคํŠธ์— ๊ตฌ๋…ํ•ด์„œ ์ž์‹ ์˜ ๊ฒŒ์ž„ ์ฝ”๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์„ธ์š” (โ€œCreating a New Sceneโ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”).
  • Scene Settings
    • Data Source: Scene Anchor๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋žœ์Šคํผ:
      • Device: Space Setup์„ ํ†ตํ•ด Quest ์žฅ์น˜์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(Link์—๋„ ์‚ฌ์šฉ).
      • Prefab: Room Index์™€ Room Prefabs ์ค‘ ํ•˜๋‚˜์— ์˜ํ•ด ์ง€์ •๋œ ์ธ๊ณต ๋ฐฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • DeviceWithPrefabFallback: ๊ธฐ๊ธฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ”„๋ฆฌํŒน ๋ฃธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • Room Index: Room Prefabs ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค(0 ์‹œ์ž‘)์ž…๋‹ˆ๋‹ค. -1์€ ๋žœ๋ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • Room Prefabs: Scene ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•œ ์ธ๊ณต ๋ฐฉ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฉ ํ”„๋ฆฌํŒน์˜ ๊ตฌ์กฐ์™€ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ ์ด๋ฆ„์„ ์ฐธ์กฐํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ ๋ฐฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Load Scene on Startup: ํ™œ์„ฑํ™”๋˜๋ฉด Scene์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋กœ๋“œ๋˜๊ณ  SceneLoadedEvent๋Š” ๋‹ค๋ฅธ ์ž‘์—… ์—†์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. false์ธ ๊ฒฝ์šฐ ์žฅ์น˜๊ฐ€ ์—†๋Š” ํšŒ์˜์‹ค(์˜ˆ: ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ)์—์„œ MRUK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ Scene ์ดˆ๊ธฐํ™” ๋™์ž‘์„ ์ˆ˜๋™์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Seat Width: COUCH ๋ผ๋ฒจ์ด ์žˆ๋Š” Scene ์˜ค๋ธŒ์ ํŠธ์˜ ์ขŒ์„ ํฌ์ฆˆ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์‚ฌ๋žŒ ์ขŒ์„ ํฌ๊ธฐ์˜ ๋„ˆ๋น„/๊นŠ์ด์ž…๋‹ˆ๋‹ค.

EffectMesh

์ด๊ฒƒ์€ ์ง€์ •ํ•œ Scene ์˜ค๋ธŒ์ ํŠธ์—์„œ ํŠน์ˆ˜ ํšจ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์—ฃ์ง€์—๋Š” ์„ ํƒ์  ์…ฐ์ด๋” ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋ฒ„ํ…์Šค ์ปฌ๋Ÿฌ๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‰ฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋‹ค์–‘ํ•œ ๋งคํ•‘ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Mesh Material: ๊ฑด์ถ•๋œ ๋ฉ”์‹œ์— ์ ์šฉํ•  ์žฌ์งˆ์ž…๋‹ˆ๋‹ค. ๋‹ค์ค‘ ๋จธ๋ฆฌํ‹ฐ์–ผ ๋ฃธ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฉ”์‹œ ๋จธํ‹ฐ๋ฆฌ์–ผ์™€ ํ•จ๊ป˜ ๋˜๋‹ค๋ฅธ EffectMesh ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Border Size: ์—ฃ์ง€ ๋ฐ”์šด๋“œ์— ๋Œ€ํ•œ ์ •์ ์„ ๋งŒ๋“ค ๋•Œ, ์ด๋Š” ๊ฐ ์—ฃ์ง€์˜ "๋‘๊ป˜"์ž…๋‹ˆ๋‹ค. ์—ฃ์ง€ ๋ฒ„ํ…์Šค๋Š” ๊ฒ€์€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  BorderSize ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ํฐ์ƒ‰์œผ๋กœ ํฌ๋ฏธํ•ด์ง‘๋‹ˆ๋‹ค. RoomBoxEffects.mat์— ์‚ฌ์šฉ๋œ SceneMeshOutline.shader๋ฅผ ์กฐ์‚ฌํ•˜๋ฉด ์…ฐ์ด๋”์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Frames Offset: ๋ฒฝ์— ์žˆ๋Š” ์ฟผ๋“œ(์˜ˆ: ๋ฌธ, ์ฐฝ๋ฌธ, ์•ก์ž)์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ์ธก๋ฉด ํ‰๋ฉด์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Z-flickering์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FramesOffset์€ ๋ฒฝ์—์„œ ๊ทธ๊ฒƒ๋“ค์„ ์ด โ€‹โ€‹๋ฏธํ„ฐ ๊ฐ’๋งŒํผ ์—ฐ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • Add Colliders: true์ธ ๊ฒฝ์šฐ EffectMesh ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์— ๋Œ€ํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • Cast Shadows: effect mesh ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ทธ๋ฆผ์ž๋ฅผ ํˆฌ์‚ฌํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.
  • Hide Mesh: effect mesh๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค.
  • Texture Coordinate Modes: ์ƒ์„ฑ๋œ ๋ฉ”์‹œ UV์— ํ…์Šค์ฒ˜ ์ขŒํ‘œ๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹, ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ ‘ํ•œ WALL_FACE ๊ฐ์ฒด์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. U๋Š” ๋ฐฉ ๊ฒฝ๊ณ„์˜ ์ˆ˜ํ‰ ์น˜์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  V๋Š” ์ˆ˜์ง ์น˜์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • METRIC: ์ขŒํ‘œ๋Š” 0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ฏธํ„ฐ๋‹น 1๋‹จ์œ„์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • METRIC_SEAMLESS: ์ขŒํ‘œ๋Š” 0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ฏธํ„ฐ๋‹น 1๋‹จ์œ„์”ฉ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์ด์Œ์ƒˆ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ •์ˆ˜๋กœ ๋๋‚˜๋„๋ก ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
    • MAINTAIN_ASPECT_RATIO: ์ข…ํšก๋น„๊ฐ€ ์œ ์ง€๋˜๋„๋ก ์ขŒํ‘œ๊ฐ€ ๋‹ค๋ฅธ ์น˜์ˆ˜์— ๋งž๊ฒŒ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
    • MAINTAIN_ASPECT_RATIO_SEAMLESS: ์ขŒํ‘œ๋Š” ์ข…ํšก๋น„๊ฐ€ ์œ ์ง€๋˜๋„๋ก ๋‹ค๋ฅธ ์น˜์ˆ˜์— ๋งž๊ฒŒ ์กฐ์ •๋˜์ง€๋งŒ ์ด์Œ์ƒˆ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ •์ˆ˜๋กœ ๋๋‚˜๋„๋ก ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
    • STRETCH: Coordinates range from 0 to 1.
  • Labels: EffectMesh์— ํฌํ•จ๋  ์˜๋ฏธ ์ฒด๊ณ„ ๊ฐ์ฒด.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ