์ด์ ํฌ์คํธ์ ํ๋ก์ ํธ 'Paint the City'์ ๊ด๋ จํ ์ค๋ช ์ด ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
์๋ ํ์ธ์. ์ ๋ฒ ํฌ์คํธ์ 3D ํ์ธํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์คํ ์์ค๋ฅผ ์ด์ฉํ๋ ๊ณผ์ ์ ๋ณด์ฌ๋๋ ธ๋๋ฐ์.
์ ํฌ ํ๋ก์ ํธ์ VR ํ๋ก๊ทธ๋จ์์ 3D ํ์ธํ ๊ธฐ๋ฅ์ด ์ฃผ๋ ๊ธฐ๋ฅ์ด์ง๋ง, ๊ทธ ์ธ์๋ ๊ตฌํํด์ผ ํ ๋ถ๋ถ๋ค์ด ๋ง์์ต๋๋ค.
๊ทธ ์ค์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก VR ํ๊ฒฝ์์ UI ๋๋ 3D ์ค๋ธ์ ํธ์ ์ํธ์์ฉํ๋ ๋ฒ์ ์ค๋ช ํด๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ํด ์์ ์คํ ์ด์ ์๋ Oculus Integration ํจํค์ง๋ฅผ ์ด์ฉํ์์ต๋๋ค.
๊ฐ๋จํ ๋ฐฐ๊ฒฝ ์ค์ ๊ณผ ์ค๋ธ์ ํธ๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ๋ถํฐ Interactionํ๋ ๋ฐฉ๋ฒ๊น์ง ์์ธํ ์ค๋ช ๋๋ฆฌ๊ณ , ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์ฐ์๋์ง๋ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Unity VR ํ๊ฒฝ ์ธํ ์ ๊ดํ ๋ด์ฉ์ ๋ฐ๋ก ์์ฑํ์ง ์์์ผ๋, ์ธํ ๋์ด์์ง ์๋ค๋ฉด ์ธํ ํ ์์ํด์ฃผ์ธ์.
Oculus Integration ํจํค์ง ์ค์น
์์ ์คํ ์ด์์ Oculus Integration ์์ ์ ์ถ๊ฐํฉ๋๋ค.
https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022
'๋ด ์์ ์ ์ถ๊ฐํ๊ธฐ'๋ฅผ ๋๋ฅด๋ฉด ์์ ์ ์ ๋ํฐ ๊ณ์ ์ ์์ ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๋ก๊ทธ์ธ์ ์ ํ์ จ๋ค๋ฉด ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋ค์์ผ๋ก, ์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ ํ๋ก์ ํธ๋ฅผ ๋ฏธ๋ฆฌ ์ด์ด๋์ จ๋ค๋ฉด, ‘Unity์์ ์ด๊ธฐ’๋ฅผ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ์์ ์ด ์ ์์ต๋๋ค.
๋๋ ์ ๋ํฐ ์๋ํฐ ๋ด์์ [Window - Package Manager - Packages: My Asset]์์๋ import ํ ์ ์์ต๋๋ค.
import ์๋ฃ ํ, [Asset - Oculus] ์์ ์์ ๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
UI Interaction
๋ฐฐ๊ฒฝ ์ค์ ๋ฐ ์ค๋ธ์ ํธ ๋ฐฐ์น
UI Interaction์ ์ํด Main Menu Scene์ ๋ง๋ค์ด ๋ด ์๋ค.
์๋ก์ด Scene์ ์์ฑํ๊ณ ์ด๋ฆ์ 'MainMenu'๋ก ์ค์ ํ ํ, ์ฌ์ ์ด์ด์ฃผ์ธ์.
๊ธฐ์กด์ ๋ฐฐ๊ฒฝ์ ์ด๋ฐ ๋ชจ์ต์ธ๋ฐ, Menu ์ฌ์๋ ์ ํฉํ์ง ์์ ๊ฒ ๊ฐ์ผ๋ ๋ฐ๊พธ๊ฒ ์ต๋๋ค.
[Window - Rendering - Lighting - Environment] ์์ Skybox๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ ์ ํ Material์ ์ฐพ์ ์ ์ฉํ์ต๋๋ค. Oculus ํจํค์ง์ ์๋ Skybox์ธ๋ฐ, ์ํ๋ ๊ฒ์ ๊ณจ๋ผ ์ ์ฉํด์ฃผ์ธ์.
ํ์ด์ด๋ผํค ์ฐฝ์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค๋ฅผ ๋๋ฌ [3D Object - Plane]์ ์ ํํด ๋ฐ๋ฅ์ ๋ง๋ค์ด ์ค๋๋ค.
์ค๋ธ์ ํธ ์ด๋ฆ์ 'Floor'๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
์ค๋ธ์ ํธ์ ์ ์ ํ Material์ ์ค์ ํ ์ ์์ต๋๋ค.
Scene์ 'OVRPlayerController' Prefab์ ์ถ๊ฐํฉ๋๋ค.
OVRPlayerController๋ Oculus ํค๋์ ์ trackingํ๊ณ , ํ๋ ์ด์ด ์ญํ ์ ํฉ๋๋ค.
ํ๋ ์ด์ด๊ฐ ๋ฐ๋ฅ ์์ ์์ ์ ์๋๋ก OVRPlayerController์ Floor์ y๊ฐ์ ์กฐ์ ํด์ผ ํฉ๋๋ค.
UI Canvas ์ค์
OVRPlayerController์ z๊ฐ์ ์กฐ์ ํ์ฌ ์์ฑํ UI์ ์ ๋นํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์งํ๋๋ก ํฉ๋๋ค.
Menu์์ ์ํธ์์ฉ์ ์ํ Canvas๊ฐ ํ์ํฉ๋๋ค.
ํ์ด์ด๋ผํค ์ฐฝ์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค๋ฅผ ๋๋ฌ [UI - Canvas]์ ์ ํํด Canvas๋ฅผ ์ถ๊ฐํ๊ณ , ์ด๋ฆ์ 'Menu Canvas'๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
์ดํ๋ถํฐ๋ VRํ๊ฒฝ์์ UI์ ์ํธ์์ฉํ๊ธฐ ์ํด ๊ผญ ๋ณ๊ฒฝํด์ผ ํ๋ Canvas ์ค์ ๋ค์ ๋๋ค.
[Canvas - Render Mode]๋ฅผ World Space๋ก ๋ณ๊ฒฝํฉ๋๋ค.
Canvas์ Width์ Height๋ฅผ ์์ฑํ ๋ฉ๋ด UI ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ํฉ๋๋ค.
Position๊ณผ Scale์ ์กฐ์ ํ์ฌ Player์ ์ฌ์ด์ฆ์ ๋ง๋๋ก ํฉ๋๋ค.
Graphic Raycaster ์ปดํฌ๋ํธ๋ฅผ ์ญ์ ํ๊ณ , 'OVR Raycaster'์ ์ถ๊ฐํฉ๋๋ค.
[Canvas - Event Camera]์ OVRPlayerController์ 'CenterEyeAnchor'์ ์ถ๊ฐํฉ๋๋ค.
์ด์ Scene์ 'UIHelpers'๋ฅผ ์ถ๊ฐํฉ๋๋ค.
UIHelpers๋ Oculus ํจํค์ง์์ ์ ๊ณตํ๋ Prefab์ผ๋ก, UI Interaction์ ํ์ํ ๊ธฐ๋ฅ์ ๋ด๊ณ ์์ต๋๋ค.
UIHelpers์ EventSystem์ด ์๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ EventSystem์ ์ญ์ ํฉ๋๋ค.
LaserPointer๋ ํ๋ ์ด์ด๊ฐ UI๋ฅผ ๊ฐ๋ฆฌํฌ ๋ ํ์๋๋ ๊ด์ ์ ์ญํ ์ ํฉ๋๋ค.
LineRenderer์ ํ์ฑํํ๊ณ , Material์ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ [Menu Canvas - OVR Raycaster - Pointer]์ LaserPointer๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
๋๋ค๋ฅธ ์ค์ ์ ์ํด 'LaserPointer' Script๋ฅผ ์์ ํฉ๋๋ค.
LaserBeamBehavior ์์ SerializeField๋ฅผ ์ถ๊ฐํ์ฌ, ์ ๋ํฐ ๋ด์์๋ ์ด ์ค์ ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํฉ๋๋ค.
[SerializeField]
private LaserBeamBehavior _laserBeamBehavior;
์คํฌ๋ฆฝํธ ์์ ์ด ์๋ฃ๋๋ฉด, ์ด๋ ๊ฒ Laser Beam Behavior๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
'On When Hit Target'์ผ๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
๊ธฐ์กด ์ค์ ์ด์๋ 'On'์ ๊ด์ ์ด ํญ์ ์ผ์ ธ์๋ ์ํ์ ๋๋ค.
On When Hit Target์ ๊ฒฝ์ฐ, ์ปจํธ๋กค๋ฌ๊ฐ ํ๊ฒ์ ๋ฐ๋ผ๋ณด๊ณ ์์ ๋ ๊ด์ ์ด ํ์ฑํ๋จ์ ์๋ฏธํฉ๋๋ค.
'EventSystem'์์ [OVR Input Module - Joy Pad Click Button]์ ์ํ๋ ๋ฒํผ์ผ๋ก ์ ํํด์ฃผ์ธ์.
์ ๋ 'Secondary Index Trigger'๋ก ์ค์ ํ์๊ณ , ์ค๋ฅธ์ชฝ ์ปจํธ๋กค๋ฌ์ ํธ๋ฆฌ๊ฑฐ ๋ฒํผ์ ์๋ฏธํฉ๋๋ค.
์คํ๋ฌ์ค ์ ๋ ฅ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ ์๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Sphere์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ด Sphere๋ ๊ด์ ์ ๋์ ์๋ ์ ๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
์ปจํธ๋กค๋ฌ ์ค์
'LeftHandAnchor'๊ณผ 'RightHandAnchor'์ 'CustomHandLeft'์ 'CustomHandRight'๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
CustomHandLeft์ CustomHandRight๋ Oculus ํจํค์ง์์ ์ ๊ณตํ๋ ์ ๋ชจ๋ธ Prefab์ ๋๋ค.
์คํ ์ ์ค์ ์์ ์์ง์์ด ๋ฐ์๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
CustomHandLeft์CustomHandRight์ [OVR Grabber - Player]์ OVRPlayerController์ ์ถ๊ฐํด์ฃผ์ธ์.
OVRCameraRig์ [OVR Manager - Tracking Origin Target]์ 'Floor Level'๋ก ์ค์ ํด์ฃผ์ธ์.
OVRPlayerContoller์ OVRPlayerController ์คํฌ๋ฆฝํธ์์ Enable Linear Movement์ Enable Rotation์ ์ฒดํฌ๋ฅผ ํ์ด์ค๋๋ค.
Main Menu ์ฌ์์๋ ํ๋ ์ด์ด๊ฐ ์์ง์ด์ง ๋ชปํ๋๋ก ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Main Menu ์์ฑ
์ด์ ์ธํฐ๋์ ํ ๋ฉ๋ด๋ฅผ ๋ง๋ค ๊ฑด๋ฐ์. ์ฌ์ฉํ๊ณ ์๋ UI ๋์์ธ์ด ์๋ค๋ฉด ๊ทธ๊ฑธ๋ก ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
Menu Canvas์ [์ฐํด๋ฆญ - UI - Image]๋ฅผ ์ ํํ์ฌ UI๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ฉ๋ด์ ๋ฐฐ๊ฒฝ์ด ๋ ์ด๋ฏธ์ง๋ถํฐ ๋ง๋ค๊ธฐ ์ํด, ์ด๋ฆ์ 'Background'๋ก ์ค์ ํด์ฃผ์ธ์.
Width์ Height๋ฅผ ์กฐ์ ํ๊ณ , [Image - Source Image]์ ์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ์ธ์.
[Menu Canvas ์ฐํด๋ฆญ - UI - Button]์ ์ ํํ์ฌ ๋ฉ๋ด์์ ์ฌ์ฉ๋ Button์ ์ถ๊ฐํด๋ด ์๋ค.
TMP Essentials๋ฅผ importํ์ง ์์๋ค๋ฉด, ์ด๋ฐ ์ฐฝ์ด ๋ฐํ ๋ฐ์.
TextMeshPro๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด import ํด์ผํฉ๋๋ค.
์์ Background์ฒ๋ผ Button์ ์ด๋ฆ์ 'Start Btn'์ผ๋ก ์ค์ ํ๊ณ , Width, Height, Source Image๋ฅผ ์ค์ ํด์ฃผ์ธ์.
Text Input์๋ 'START'๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค. Font Size๋ ์กฐ์ ํด์ฃผ์ธ์.
์ ๋ ์๋์ ๊ฐ์ด ์ค์ ํ๊ณ , Scene ์ฐฝ์์๋ ์ด๋ฐ ๋ชจ์ต์ ๋๋ค.
๊ฐ๊ฐ์ ๋ฒํผ์ 'START'์ 'ABOUT'๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Start Btn์ ๋ณต์ ํด์ About Btn์ ๋ง๋ค์ด์ฃผ์ธ์.
์ด์ ๋ก๊ณ ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์์์์ฒ๋ผ [UI - Image]๋ฅผ ์ ํํ๊ณ ์ด๋ฆ์ 'Logo'๋ก ์ค์ ํฉ๋๋ค.
ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
์ด์ ๋ฒํผ ๋์์ ์ํด ์คํฌ๋ฆฝํธ๋ฅผ Menu Canvas์ ์์ฑํฉ๋๋ค.
์คํฌ๋ฆฝํธ ์ด๋ฆ์ 'MenuController'๋ก ์ค์ ํ๊ฒ ์ต๋๋ค.
Start ๋ฒํผ์ ๋๋ฅด๋ฉด Main ์ฌ์ผ๋ก ์ด๋ํ๋ ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
์ฌ ์ ํ์ ์ํด using UnityEngine.SceneManager;๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MenuController : MonoBehaviour
{
public void StartBtn()
{
SceneManager.LoadScene("MainScene");
}
}
์ด์ ๋ค์ Start ๋ฒํผ์ผ๋ก ๋์๊ฐ์, On Click()์์ +๋ฅผ ๋๋ฌ ํญ๋ชฉ์ ์ถ๊ฐํ ๋ค์, Menu Canvas ์ค๋ธ์ ํธ๋ฅผ ์ถ๊ฐํ๊ณ , [MenuController - StartBtn()]์ ์ ํํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด Start ๋ฒํผ์ ๋๋ ์ ๋, ์์์ ์์ฑํ StartBtn() ํจ์๊ฐ ์คํ๋๊ฒ ๋ฉ๋๋ค.
์ด์ About ๋ฒํผ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
Section์ ๋๋๊ธฐ ์ํด Menu Canvas ์๋์ ๋น ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ ์ด๋ฆ์ 'Main Section'๊ณผ 'About Section'์ผ๋ก ์ค์ ํฉ๋๋ค. ([Menu Canvas ์ฐํด๋ฆญ - Create Empty])
์์์ ๋ง๋ค์๋ ๋ก๊ณ ์ ๋ฒํผ๋ค์ Main Section ์๋๋ก ๋ฃ๊ณ , ๋นํ์ฑํ ์ํ๋ก ๋ก๋๋ค.
About Section์ Text๋ฅผ ์ถ๊ฐํ์ฌ ์ด๋ฆ์ 'About Paragraph'๋ก ์ค์ ํฉ๋๋ค.
Text์๋ 'This is about paragraph.'๋ฅผ ์์ฑํฉ๋๋ค.
Width, Height, Position, Font Size๋ฅผ ์กฐ์ ํ๊ณ , ํ ์คํธ ์ ๋ ฌ์ ๊ฐ์ด๋ฐ๋ก ๋ง์ถฅ๋๋ค.
์ด์ ๋์๊ฐ๊ธฐ ๋ฒํผ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
Main Section์ Start Btn์ ๋ณต์ฌํ์ฌ About Section์ ์ถ๊ฐํ๊ณ , ์ด๋ฆ์ 'Back Btn'์ผ๋ก ์์ ํฉ๋๋ค.
Text์ 'BACK'์ ์์ฑํฉ๋๋ค.
On Click()์๋ 'About Section'์ ๋ฃ๊ณ , [GameObject - SetActive(bool)] ๋ก ์ค์ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ๋์๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ About Section์ด ๋นํ์ฑํ ๋ฉ๋๋ค.
์ด์ Main Section์ ํ์ฑํ ํด์ค์ผ ๊ฒ ์ฃ ?
On Click()์ +๋ฒํผ์ ๋๋ฌ ์ถ๊ฐํ ๋ค, 'Main Section'์ ๋ฃ๊ณ , [GameObject - SetActive(bool)]๋ก ์ค์ ํฉ๋๋ค.
์ฒดํฌ ๋ฒํผ์ ๋๋ฌ ํ์ฑํ๋ฅผ ํ์ํฉ๋๋ค.
Main Section์์ About ๋ฒํผ์ ํจ์๋ ์ค์ ํด์ฃผ์ด์ผํฉ๋๋ค.
About Section์ ๋นํ์ฑํ ์ํ๋ก ๋๊ณ , Main Section์ ๋ค์ ํ์ฑํํฉ๋๋ค.
์์์์ ๋ฐ๋๋ก [About Btn - On Click()]์ ์ค์ ํฉ๋๋ค.
ABOUT์ ๋๋ ์ ๋ Main Section์ด ๋นํ์ฑํ๋๊ณ , About Section์ด ํ์ฑํ๋๋๋ก ํฉ๋๋ค.
3D Object Interaction
๋ฐฐ๊ฒฝ ์ค์ ๋ฐ ์ค๋ธ์ ํธ ๋ฐฐ์น
์๋ก์ด Scene์ ์์ฑํ๊ณ ์ด๋ฆ์ 'MainScene'๋ก ์ค์ ํ ํ, ์ฌ์ ์ด์ด์ฃผ์ธ์.
Build Settings์ ์ง๊ธ๊น์ง ๋ง๋ Scene๋ค์ ์ถ๊ฐํด์ฃผ์ด์ผ ์ฌ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
์์์์ฒ๋ผ MainScene์ Floor, OVRPlayerController, UIHelpers๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
MainManu ์ฌ์์ ๊ทธ๋๋ก ๋ณต์ฌํด์๋ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธํฐ๋์ ์ ํ 3D Object๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
Cube, Sphere, Capsule์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์๋ก์ด Material์ ๋ง๋ค์ด ๊ฐ๊ฐ Blue, Green, Red๋ก ์ค์ ํ ํ ์์์ ๋ง๋ Object์ ์ ์ฉํฉ๋๋ค.
์ปจํธ๋กค๋ฌ ์ค์
Main Menu Scene๊ณผ ๋ค๋ฅด๊ฒ ํ๋ ์ด์ด๊ฐ ์์ง์ผ ์ ์๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
OVRPlayerContoller์ OVRPlayerController ์คํฌ๋ฆฝํธ์์ Enable Linear Movement์ Enable Rotation์ ์ฒดํฌ๋ฅผ ํ์ธํด์ฃผ์ธ์.
3D Object์ ์ํธ์์ฉํ ์ ์๋๋ก[OVRPlayerController - OVRCameraRig]์ 'OVRPhysicsRaycaster' ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
[Layer - Add Layer]๋ฅผ ํตํด 'UICollider' ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ๊ณ , [OVR Physics Raycaster - Event Mask]๋ฅผ UICollider๋ก ์ง์ ํฉ๋๋ค.
Event Trigger ์ค์
์์์ ๋ง๋ค์๋ ์ธ ์ค๋ธ์ ํธ์ Interaction์ ํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Cube: ์์ ๋ณํ(Blue → Green)
Sphere: Y์ถ ๋๋๊ทธ
Capsule: Y, Z์ถ ๋๋๊ทธ
์ธ 3D ์ค๋ธ์ ํธ์ Event Trigger ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
Cube์ Event๋ ๊ฐ๋จํฉ๋๋ค.
'Add New Event Type'์ ํด๋ฆญํด 'PointerClick'์ ์ ํํฉ๋๋ค.
Cube ์ค๋ธ์ ํธ๋ฅผ ๋ฃ๊ณ , [MeshRenderer - Material material]์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ๋ง๋ค์๋ Green์ ๋ฃ์ต๋๋ค.
์ด๋ ๊ฒ ์ค์ ํ๋ฉด Pointer๋ก Triggerํ ๋ ์ง์ ํ ์์์ผ๋ก ๋ณ๊ฒฝ๋๊ฒ ๋ฉ๋๋ค.
์ด์ ๋๋๊ทธ ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ํด 'DragUI'๋ผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค.
using UnityEngine;
public class DragUI : MonoBehaviour
{
public Transform pointer;
[Header("Select To Include In Drag")]
public bool x;
public bool y;
public bool z;
public void Drag()
{
float newX = x ? pointer.position.x : transform.position.x;
float newY = y ? pointer.position.y : transform.position.y;
float newZ = z ? pointer.position.z : transform.position.z;
transform.position = new Vector3(newX, newY, newZ);
}
}
Drag() ํจ์๋ ๊ฒ์ ์ค๋ธ์ ํธ์ position์ x, y, z ๊ฐ์ ์๋ก์ด x, y, z๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค.์ฆ, ๋๋๊ทธํ ๋ฐฉํฅ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์ด๋ํ๊ฒ ํฉ๋๋ค.
ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ Sphere๊ณผ Capsule์ ๋ฃ์ด์ค๋๋ค.
Pointer์๋ UIHelpers์ Sphere์ ์ถ๊ฐํฉ๋๋ค. (์ฌ์ ๋ฐฐ์นํ ์ด๋ก์ Sphere๊ณผ ์ฐฉ๊ฐํ์ง ์๋๋ก ํฉ๋๋ค.)
Select To Include In Drag๋, Sphere์ ๊ฒฝ์ฐ Y๋ฅผ, Capsule์ ๊ฒฝ์ฐ Y์ Z๋ฅผ ์ฒดํฌํฉ๋๋ค.
์ด์ [Event Trigger - Add New Event Type - Drag]๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฐ๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ๋ฃ๊ณ , [DragUI - Drag()]๋ฅผ ์ ํํฉ๋๋ค.
์ธ ์ค๋ธ์ ํธ์ Layer๋ฅผ UICollider๋ก ์ง์ ํฉ๋๋ค.
๊ฒฐ๊ณผ
์คํ ์ค๋ฅ์ ๊ด๋ จํ ๋ด์ฉ๋ ์๋์ ์์ฑํด๋๊ฒ ์ต๋๋ค.
1. ์นด๋ฉ๋ผ๊ฐ ์์ง์ด์ง ์๋ ๊ฒฝ์ฐ, Scene์์ Main Camera ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋์ง ํ์ธํด์ฃผ์ธ์.
2. Oculus์ ์ฐ๊ฒฐ์ด ๋์ง ์๋ ๊ฒฝ์ฐ, VR ํ๊ฒฝ ์ธํ ์ ์๋ฃํ๋์ง ํ์ธํด์ฃผ์ธ์.
ํ๋ก์ ํธ ์ ์ฉ
์์ ์ค๋ช ํ ๊ธฐ๋ฅ๋ค์ด ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์ ์ฉ๋์๋์ง ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
City
City List: ํ๋ก๊ทธ๋จ ์์ ์ ๋ฐฉ๋ฌธํ ๋์๋ฅผ ์ ํํฉ๋๋ค.
City: ๋์์์ ์ํ์ ์์ฑํ ์์น๋ฅผ ์ ํํฉ๋๋ค.
Exhibit
์์์ ์์ฑํ ์ํ์ ์ ์ํฉ๋๋ค.
(*๊ฐ๊ฐ ํธ๋ฆฌ๊ฑฐ ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฅ์ VR ๋ฐฑ์๋ ๋ด๋น ํ์์ด ๊ตฌํํ์์ต๋๋ค.)
์ดํ ๊ณํ
1. ์ ๋ ฅ์ ์ํ VR ๊ฐ์ ํค๋ณด๋๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
2. ๊ทธ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ด์ ์ ๋์ด ๊ฐ๋จํ๊ฒ๋ง ๋ง๋ค์๋ UI์ ๋์์ธ์ ๋ณ๊ฒฝํด๋ณผ๊น ํฉ๋๋ค.
์ด์ ์กธ์ ๋ฐํ๊น์ง ์ผ๋ง ๋จ์ง ์์๋ค์.
์ ํฌ ํ๋ก์ ํธ Paint the City์ ๋ง์ ๊ด์ฌ ๋ถํ๋๋ฆฝ๋๋ค. :D
์ฐธ๊ณ
์ด๋ฒ ํฌ์คํธ์ ์ ๋ํฐ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ์ ์ ๋ก๋ํด๋์์ต๋๋ค. ์ฐธ๊ณ ํ ๋์์ ๋งํฌ๋ ๊ฐ์ด ์ฒจ๋ถํฉ๋๋ค.
'๐ Project > Paint the City' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity3D/VR] Tilt Brush, Open brush ์คํ ์์ค๋ฅผ ์ด์ฉํ์ฌ 3D ํ์ธํ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (1) | 2022.11.25 |
---|