2024. 1. 18. 17:18ㆍSKKU DT
3D URP 프로젝트 생성해서 XR Interaction Toolkit 설치
OpenXR Plugin 설치
유니티 패키지 import
XR Origin에 다음과 같은 컴포넌트 넣고 구성요소 넣기
추가로 회전 관련 컴포넌트 더 넣기
텔레포트 컴포넌트도 넣기
Teleport Interactor를 Right Controller에 넣기 Interacton Layer Mask가 31번째 레이어 Teleport로 설정되어있어야 한다.
없으면 31번째 Layer에 Teleport 레이어 추가
TeleportArea 빈 오브젝트 생성, Teleportation Area 스크립트 컴포넌트 넣기
Interaction Manager는 런타임에 자동으로 할당된다. 밑에 Interaction Layer Mask를 Teleport로 설정.
Teleport Interactor에 XR Controller 스크립트 컴포넌트 넣고 위에서부터 4개 체크 해제, Select Action, Select Action Value의 Reference는 Teleport Select으로 수정
동시 동작을 막기 위해서(물건 집는 동시에 이동) XR Interaction Group 추가
Action Based Controller Manager 스크립트 컴포넌트 추가
이름 그대로 검색해서 넣기
오른손 조이스틱을 밀고 놨을 때 해당 지점으로 텔레포트하는 것을 볼 수 있다. 따로 밀지 않으면 Snap Turn이 된다.
터널링 효과 주기
Main Camera 밑에 TunnelingVignette 프리팹 넣기
Tunneling Vignette Controller 스크립트 컴포넌트에서, [Preview in Editor] - [Default Parameters] 설정, 위에 슬라이드 바를 포함한 설정 값을 바꾸면 효과가 적용된다.
밑에 [Locomotion Vignette Providers]에서 XR Origin을 끌어다놓고 Snap Turn이나 Teleportation에도 Vignetting이 적용되도록 설정한다.
턴을 할 때 Vignetting이 생기는 것을 볼 수 있다.
Ladder Interactor
Ladder 프리팹을 하나 넣고, XR Origin에 Climb Provider를 넣은 후 XR Origin을 끌어다 놓는다.
잘 적용되었다면 아래처럼 잡을 수 있게 된다.
버튼 눌러서 문 열기
버튼 모델링과 프리팹을 씬에 가져오고 Poke Interactor를 Left Controller와 Right Controller의 자식으로 둔다.
손가락 애니메이션에 point 애니메이션을 적용한다.
검지 손가락 끝에 Capsule Collider 넣기. 왼손, 오른손
Poke Interactor에 [Attach Transform]에 검지 손가락 끝을 넣는다.
버튼은 눌러지지만 아직 문을 열 수는 없다.
PushButtonDoor 스크립트 생성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
public class PushButtonDoor : MonoBehaviour
{
public Animator animator;
public string boolName = "Open";
private void Start()
{
GetComponent<XRSimpleInteractable>().selectEntered.AddListener(x => ToggleDoorOpen());
}
public void ToggleDoorOpen()
{
bool isOpen = animator.GetBool(boolName);
animator.SetBool(boolName, !isOpen);
}
}
버튼 누르면 열리고 다시 누르면 닫힌다. 성공
Double Grip
두 손으로 동시에 잡는 것이 아니라 두 위치 어디에서든 잡을 수 있다.
소화기 패키지 import.
body에 Box Collider 넣기, XR Grab Interactable 넣기
[Select Mode] - [Multiple] 설정, Attach Transform은 두 개 넣을 수 있다. 여기에 Socket Interactor 처럼 원하는 지점을 넣으면 된다. handle과 nozle의 자식으로 빈 오브젝트 생성해서 위치 맞춘다.
잡을 지점 Transform 설정하기
잡을 위치 Transform을 Attach Transform 자리에 넣기
두 손을 동시에 잡을 수는 없고 아까 설정한 두 위치 어느 곳에서든 오브젝트를 잡을 수 있다.
[Use Dynamic Attach]를 활성화해서 잡는 부분 그대로 들어올린다.
[Velocity Tracking] 모드로 든 상태에서 바닥에 부딪히게 할 수 있다.
소화기 분사 파티클 import해서 위치 맞추기
FireEX 스크립트 생성해서 nozle에 넣기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FireEX : MonoBehaviour
{
public ParticleSystem effect;
public void Select()
{
effect.Play();
}
public void Select_exit()
{
effect.Stop();
}
}
nozle에 XR Simple Interactable 스크립트 컴포넌트 넣기, 아래 Interactable Events를 열고 Select Entered를 추가한다.
nozle에 Rigidbody 삭제...
nozle 부위를 잡으면 파티클이 나와야 한다.... 오큘러스와 유니티 연결이 잘 안되었다....
지게차 추가
지게차를 추가하기 위해서 에셋스토어에서 아래의 에셋 다운로드
지게차가 깨져보이므로 [Window] - [Rendering] - [Render Pipeline Converter] 눌러서 창을 연 다음
[Rendering Settings]와 [Material Upgrade] 두 항목을 체크하고 [Initailize And Convert] 눌러서 컨버트 한다.
SitPosition 빈 오브젝트 만들고 운전석 아래쪽에 위치시킨다.
SitPosition도 텔레포트가 가능하게 만들기 위해서 TeleportArea의 Colliders 목록에 넣는다.
AR Vuforia 공간 Scan
Vuforia Area Target Generator를 열고 파일을 열어본다.
[3DT Space] 버튼 눌러서 .3dt 파일 넣는다.
잘 들어왔다면 스캔한 데이터가 보인다.
스캔 폴더의 .unitypackage 파일을 유니티에 import 하면 스캔된 데이터가 보인다.
[GameObjet] - [Vuforia Engine] - [Area Target] - [Area Target]을 Hierarchy에 불러온다. AR Camera도 불러온다.
그러면 Hierarchy 창이 이렇게 된다.
Runtime Mesh를 추가해서 쓸 수 있다.
밑에 Runtime Occlusion Mesh와 Runtime Mesh Collider 체크
패키지 매니저에서 Vuforia Engine AR 설치되어있는지 확인
'SKKU DT' 카테고리의 다른 글
[SKKU DT] 57일차 -Azure Digital Twin 구성, Digital Twin의 활용 예시 (0) | 2024.01.22 |
---|---|
[SKKU DT] 56일차 -유니티 VR 오큘러스 개인 프로젝트 만들기 (0) | 2024.01.19 |
[SKKU DT] 54일차 -유니티 VR 오큘러스 프로젝트 만들기(2) -VR 이동, 물체 상호작용, UI 뜨게 하기 (1) | 2024.01.17 |
[SKKU DT] 53일차 -유니티 VR 오큘러스 프로젝트 만들기 (0) | 2024.01.16 |
[SKKU DT] 52일차 -유니티 AR Vuforia Object Target, Face Mask, Area Target (0) | 2024.01.15 |