Skip to content

2021-metaverse-developer-contest/VPSSDKUnity

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋งฅ์ŠคํŠธ VPS SDK ์‚ฌ์šฉ

VPS ์‚ฌ์šฉ

Assets\MaxstAR\VPS\VPSStudio\Path\NavigationController.cs(5,13): error CS0234: The type or namespace name โ€˜EditorCoroutinesโ€™ does not exist in the namespace โ€˜Unityโ€™ ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๋Š” Window->PackageManager->Editor Coroutines์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

image-20210716114207495

Project Setting

  • Unity Project Setting์—์„œ Android๋Š” Graphics API๋ฅผ OpenGLES3 ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Multithreaded Rendering์€ unCheck ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

image-20210807113030390


VPS ํ•„์ˆ˜ ํŒŒ์ผ ์„ค์น˜

VPSData_(xxx).zip๋ฅผ Project Folder ์™€ ๋™์ผํ•œ ํด๋”์— ํ’‰๋‹ˆ๋‹ค. Unity(Project Name)/../VPSData/VPSSimulationData ์ด๋Ÿฐ์‹์˜ ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

image-20210716132839590


์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • Asset/Scene/Scenes/MaxstScene.unity์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • Hierarchy์—์„œ VPSStudio๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • VPS Map์—์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ•  ๋งต์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • VPS Simulation Data์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.(๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜์‹œ๋ฉด ๋‹ค๋ฅธ ์‹œ๋ฎฌ๋ ˆ์ดํŒ…๋œ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.)
  • Load VPS Map์„ ํด๋ฆญํ•ด์„œ ํ•ด๋‹น ๋งต์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • VPS ๋งต์ด ์ƒ์„ฑ ๋˜๊ณ  ์นด๋ฉ”๋ผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • image-20210906221917101

์ €์ž‘ ๋ฐฉ๋ฒ•

  • Hierarchy์— Trackable ํ•˜์œ„์— ์žฅ์†Œ์˜ ๋ฉ”์‰ฌ ์ปจํ…์ธ ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์žฅ์†Œ์— ๋งž๋Š” Trackable ํ•˜์œ„์— ์ปจํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ์•ผ ์ œ๋Œ€๋กœ ์ธ์‹์ด ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.(๊ฐ ์žฅ์†Œ์˜ ์ด๋ฆ„์€ ๋ฉ”์‰ฌ์™€ Trackable ์†์„ฑ์— ์žˆ์Šต๋‹ˆ๋‹ค.)
  • ๊ฐ๊ฐ์˜ Trackable ํ•˜์œ„ GameObject์˜ Position์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์žฌ๋ฐฐ์น˜ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค,
  • ์žฌ๋ฐฐ์น˜๋œ ์ปจํ…์ธ ๋ฅผ Play๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ ๋˜๋ฉด์„œ ์ปจํ…์ธ ๊ฐ€ ์‹ค์ œ ํ™”๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ• ๋˜๋Š”์ง€ ๋ณด์—ฌ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์ธ์‹ ์œ„์น˜์— ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ Trackable์ด Active๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

image-20210716103523242


ReferenceCamera ์ด์šฉ ๋ฐฉ๋ฒ•.

VPSStudio์—์„œ ํ•ด๋‹น VPS Map์„ ์„ ํƒํ•˜๊ณ  Load VPS Map์„ ํด๋ฆญํ•˜๋ฉด ๋งต์˜ ํ•™์Šต ์‹œ์ ์˜ ์นด๋ฉ”๋ผ๊ฐ€ VPSStudioํ•˜์œ„์— ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.

image-20210906222106021

ํ•˜์œ„์— ์ƒ์„ฑ๋œ ์นด๋ฉ”๋ผ ๊ทธ๋ฃน์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ Game View์—์„œ ์นด๋ฉ”๋ผ๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•˜์œ„์˜ ReferenceCamera๋ฅผ ์„ ํƒํ•˜๋ฉด Game View์— ํ•™์Šต ์‹œ์ ์— ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ์ปจํ…์ธ ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ ๋˜๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image-20210906222134395

image-20210906222211011

ํ•ด๋‹น ์œ„์น˜์˜ Trackable ํ•˜์œ„์— ์ปจํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์œ„์น˜๋ฅผ ์ด๋™ ์‹œํ‚ค๋ฉด์„œ ์‹ค์ œ ๋ฐฐ์น˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.


Occlusion ๊ธฐ๋Šฅ

  • Occlusion ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด, Hierarchy์—์„œ SceneManager์— Occlusion Objects์— ์ปจํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Occlusion Objects ์ปจํ…์ธ ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋ชจ๋‘ ํˆฌ๋ช… ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” Material๋กœ ๋ณ€๊ฒฝ ๋ฉ๋‹ˆ๋‹ค.
  • Occlusion ๊ธฐ๋Šฅ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์œผ์‹œ๋ฉด, SceneManager์— IsOcclusion์„ uncheckํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ Occlusion์„ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜์˜ Mesh๊ฐ€ ๋ณด์—ฌ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋„ค๋น„๊ฒŒ์ด์…˜ ๊ธฐ๋Šฅ

  • ๋„ค๋น„๊ฒŒ์ด์…˜์€ SceneManager GameObject์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™”์‚ดํ‘œ์˜ ๊ฑฐ๋ฆฌ, ํ™”์‚ดํ‘œ๊ฐ€ ๋ณด์ด๋Š” ๊ฑฐ๋ฆฌ, ํ™”์‚ดํ‘œ์˜ ๊ธฐ๋ณธ ๋†’์ด, ํ™”์‚ดํ‘œ์˜ prefab์ด ์†์„ฑ์ž…๋‹ˆ๋‹ค. ํ™”์‚ดํ‘œ prefab์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

image-20210807112902560

  • NavigationController์˜ MakePath ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ฒฝ๋กœ๊ฐ€ ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.
MakePath(string start_location, Vector3 start_position, string end_location, Vector3 end_position, VPSTrackable[] trackables, string serverName = "")
  • start_location : ํ˜„์žฌ Trackable์˜ ์œ„์น˜ ์ž…๋‹ˆ๋‹ค.
  • start_position : ํ˜„์žฌ Trackable์˜ ์œ„์น˜์˜ 3์ฐจ์› ์ขŒํ‘œ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ARCamera์˜ position ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • end_location : ๋ชฉ์ ์ง€์˜ Trackable์˜ ์œ„์น˜ ์ž…๋‹ˆ๋‹ค. ์ฝ”์—‘์Šค์—์„œ๋Š” 1์ธต, ์ง€ํ•˜1์ธต, ์ง€ํ•˜ 2์ธต, ์‹ค์™ธ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • end_position : ๋ชฉ์ ์ง€์˜ 3์ฐจ์› ์ขŒํ‘œ ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ชฉ์ ์ง€์˜ ์œ„์น˜์™€ ์ขŒํ‘œ๊ฐ€ ๋งž์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • serverName : ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์ฐพ๊ธฐ์œ„ํ•œ ์„œ๋ฒ„๋ฅผ ์ง€์ •ํ•ด์•ผํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

  • MacOS์—์„œ ์ž‘์—…ํ•˜์‹ค๊ฒฝ์šฐ ํ˜„์žฌ Unity์—์„œ Nortarization์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•„ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ช…๋ น์œผ๋กœ GateKeeper๋ฅผ ํ•ด์ œ ํ•˜์…”์•ผํ•ฉ๋‹ˆ๋‹ค.
cd Assets/MaxstAR/Plugins

xattr -cr MaxstAR.bundle

sudo spctl โ€”master-disable
  • Android์—์„œ๋Š” ์นด๋ฉ”๋ผ์™€ ์œ„์น˜ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. AndroidManifest.xml๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. Android OS 8(์˜ค๋ ˆ์˜ค) ์ด์ƒ์ด๋ฉด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ํผ๋ฏธ์…˜์„ ์–ป์œผ์…”์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ๋กœ ๊ถŒํ•œ์„ ์–ป์Šต๋‹ˆ๋‹ค.
AndroidRuntimePermissions.Permission[] result = AndroidRuntimePermissions.RequestPermissions("android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.CAMERA", "android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION");
  • https๋ฌธ์ œ๋กœ AndroidManifest.xml์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
android:usesCleartextTraffic=โ€œtrueโ€ 
  • iOS์—์„œ๋„ ๋˜ํ•œ ์œ„์น˜์™€ ์นด๋ฉ”๋ผ ๊ถŒํ•œ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

    Info.plist์— Privacy - Location์— ๊ด€๋ จ๋œ ๊ถŒํ•œ์„ ๋ชจ๋‘ ์–ป์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.(Location ๊ถŒํ•œ์„ ์–ป์ง€ ๋ชปํ•˜๋ฉด GPS ์ขŒํ‘œ๋ฅผ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.)

  • ์ธ์‹์—๋Š” ์ธํ„ฐ๋„ท์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. SDK๊ฐ€ ๋นŒ๋“œ๋œ ํฐ์— ์ธํ„ฐ๋„ท์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.


VPS์‹œ์ž‘

VPS SDK๋Š” ์นด๋ฉ”๋ผ์™€ TrackerManager์˜ ์‹œ์ž‘์ด ์žˆ์–ด์•ผ ์ž‘๋™์ด ๋ฉ๋‹ˆ๋‹ค.

if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.WindowsEditor)
{
    string simulatePath = vPSStudioController.vpsSimulatePath;
    if (Directory.Exists(simulatePath))
    {
        CameraDevice.GetInstance().Start(simulatePath);
        MaxstAR.SetScreenOrientation((int)ScreenOrientation.Portrait);
    }
}
else
{
    if (CameraDevice.GetInstance().IsFusionSupported(CameraDevice.FusionType.ARCamera))
    {
        CameraDevice.GetInstance().Start();
    }
    else
    {
        TrackerManager.GetInstance().RequestARCoreApk();
    }
}

TrackerManager.GetInstance().StartTracker();
}

์นด๋ฉ”๋ผ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CameraDevice.GetInstance().Start();

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์นด๋ฉ”๋ผ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์นด๋ฉ”๋ผ๋Š” VPSCollector๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ Path๋กœ ์ „๋‹ฌํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CameraDevice.GetInstance().Start(simulatePath);

VPS์˜ ์—”์ง„์„ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

TrackerManager.GetInstance().StartTracker();

VPS ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 

VPS์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฌผ์€ Update ํ•จ์ˆ˜์—์„œ ๊ฐฑ์‹ ์ด ๋ฉ๋‹ˆ๋‹ค. openGL thread๋ฅผ ์ด์šฉํ•˜๋ ค๋Š” ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

TrackerManager.GetInstance().UpdateFrame();

UpdateFrame ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์นด๋ฉ”๋ผ์˜ ํฌ์ง€์…˜๊ณผ VPS์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ARFrame์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

ARFrame

ARFrame ํด๋ž˜์Šค๋Š” VPS์˜ ์ธ์‹์œผ๋กœ ์ธํ•ด ์–ป์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • GetTrackedImage() ๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ์–ป์–ด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • GetARLocationRecognitionState() ๋ฅผ ํ†ตํ•ด์„œ ์ธ์‹ ์ƒํƒœ๋ฅผ ์–ป์–ด๋ƒ…๋‹ˆ๋‹ค.
  • GetARTrackingState() ๋ฅผ ํ†ตํ•ด์„œ ARCore, ARKit์˜ ํŠธ๋ž˜ํ‚น ์ƒํƒœ ์—ฌ๋ถ€๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  • GetARTrackingFailureReason() ๋ฅผ ํ†ตํ•ด์„œ ARCore, ARKit์ด ์ž‘๋™ ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GetTransform() ๋ฅผ ํ†ตํ•ด์„œ ์ธ์‹์ด ์™„๋ฃŒ๋œ ์นด๋ฉ”๋ผ์˜ ์œ„์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GetARLocalizerLocation()๋ฅผ ํ†ตํ•ด์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์˜์ƒ์ด๋‚˜, ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€๋กœ ์–ป์–ด์ง„ ์ธ์‹ ์œ„์น˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ธ์‹๊ณผ Trackable

if(arFrame.GetARLocationRecognitionState() == ARLocationRecognitionState.ARLocationRecognitionStateNormal)
{
    Matrix4x4 targetPose = arFrame.GetTransform();

    arCamera.transform.position = MatrixUtils.PositionFromMatrix(targetPose);
    arCamera.transform.rotation = MatrixUtils.QuaternionFromMatrix(targetPose);
    arCamera.transform.localScale = MatrixUtils.ScaleFromMatrix(targetPose);

    string localizerLocation = arFrame.GetARLocalizerLocation();

    if (currentLocalizerLocation != localizerLocation)
    {
        currentLocalizerLocation = localizerLocation;
        foreach (VPSTrackable eachTrackable in vPSTrackablesList)
        {
            bool isLocationInclude = false;
            foreach(string eachLocation in eachTrackable.localizerLocation)
            {
                if(currentLocalizerLocation == eachLocation)
                {
                    isLocationInclude = true;
                    break;
                }
            }
            eachTrackable.gameObject.SetActive(isLocationInclude);
        }
    }
}

์œ„์˜ ์ฝ”๋“œ๋Š” ์ธ์‹์ด ์™„๋ฃŒ๋œ ์‹œ์ ์— ์นด๋ฉ”๋ผ์˜ position๊ณผ rotation์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์‹๋œ ์œ„์น˜๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น VPSTrackable์„ ์„ ํƒํ•˜์—ฌ ๊ด€๋ จ๋œ ์ปจํ…์ธ ๋ฅผ Active์ƒํƒœ๋กœ ๋ณ€๊ฒฝ ํ•ฉ๋‹ˆ๋‹ค.

Navigation

๋„ค๋น„๊ฒŒ์ด์…˜ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

NavigationController navigationController = vPSStudioController.GetComponent<NavigationController>();
if(currentLocalizerLocation != null)
{
    navigationController.MakePath(currentLocalizerLocation, arCamera.transform.position, "indoor_maxst_f2", new Vector3(9.723813f, 0, 10.732927f), vPSTrackablesList.ToArray(),
        ()=> {
            Debug.Log("No Path");
    });
}

VPSStudio์—์„œ NavigationController๋ฅผ ์–ป์–ด๋‚ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

NavigationController๋Š” ํ˜„์žฌ ์œ„์น˜๋ฅผ ํŒ๋‹จ๋œ ์ƒํƒœ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MakePath๋ฅผ ํ†ตํ•ด์„œ ๊ธธ์„ ๋งŒ๋“ค์–ด ๋ƒ…๋‹ˆ๋‹ค. ๊ธธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์„ ๊ฒฝ์šฐ "No Path"๋ผ๋Š” ๋กœ๊ทธ๋ฅผ ์ „๋‹ฌ ํ•ฉ๋‹ˆ๋‹ค.

MakePath ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public void MakePath(string start_location, Vector3 start_position, string end_location, Vector3 end_position, VPSTrackable[] trackables, Action fail, string serverName = "")

๋„ค๋น„๊ฒŒ์ด์…˜์„ ์‹คํ–‰ ํ• ๋•Œ๋Š” ์‹œ์ž‘์œ„์น˜์™€ ๋๋‚˜๋Š” ์œ„์น˜ ์ด๋ฆ„๊ณผ position์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


VPSSDK ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

  1. Camera์˜ Clipping Planes Near์™€ Far๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

AbstractARManager.cs

void OnPreRender()
{
    if (screenWidth != Screen.width || screenHeight != Screen.height)
    {
        screenWidth = Screen.width;
        screenHeight = Screen.height;
        MaxstAR.OnSurfaceChanged(screenWidth, screenHeight);
    }

    if (orientation != Screen.orientation)
    {
        orientation = Screen.orientation;

        if (Application.platform == RuntimePlatform.Android ||
            Application.platform == RuntimePlatform.IPhonePlayer)
        {
            MaxstAR.SetScreenOrientation((int)orientation);
        }
    }

    if (nearClipPlane != arCamera.nearClipPlane || farClipPlane != arCamera.farClipPlane)
    {
        nearClipPlane = arCamera.nearClipPlane;
        farClipPlane = arCamera.farClipPlane;
        CameraDevice.GetInstance().SetClippingPlane(arCamera.nearClipPlane, arCamera.farClipPlane);
    }

    arCamera.projectionMatrix = CameraDevice.GetInstance().GetProjectionMatrix();
}
CameraDevice.GetInstance().SetClippingPlane(arCamera.nearClipPlane, arCamera.farClipPlane);

์„ ํ†ตํ•ด์„œ Near์™€ Far๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 89.1%
  • ShaderLab 10.9%