Google VR SDK란?
구글에서 만든 오픈소스 VR SDK이다. 현재는 개발이 중단되었다.
VR SDK란 가상현실(VR) 화면을 볼 수 있도록, 카드보드용 화면을 만들어 주는 SDK이다.
Google VR SDK에서 제공하는 GvrEditorEmulator 프리펩을 사용하면 Alt키와 마우스를 사용하여 시야를 돌릴 수 있다.
우주선이 회전하기 위한 방법 (회전하기 위한 함수 등..)
public GameObject SpaceShip; // 우주선 게임 오브젝트
private Transform sl; // 우주선의 위치값을 받을 오브젝트
void Update(){
sl = SpaceShip.transform.localrotation;
SpaceShip.transform.localrotation = Quaternion.Lerp(sl, Quaternion.Eular(sl.x, sl.y, 45), Time.deltaTime);
}
우주선이 소행성과 충돌했을 시 처리해야 할 작업 (함수 등)
본 수업의 경우, 우주선이 소행성과 충돌했을 때 우주선은 통과되고, 소행성은 이펙트와 함께 파괴된다.
따라서 소행성 스크립트에서 OnTriggerEnter 메소드를 사용하여 어떠한 물체가 닿았을 경우 소행성의 MeshRenderer를 끄고 이펙트 오브젝트를 활성화하여 파괴되는 이펙트를 보여준 후, 소행성 오브젝트를 파괴한다.
360도 영상이란?
Immersive Video(몰입형 비디오) 또는 Spherical Video(구형 비디오)라고도 불린다.
전방향 카메라나 여러개의 카메라를 통해 모든 방향으로 동시에 촬영된 영상이다.
스티칭 작업이란?
여러개의 영상을 이어 붙이는 작업이다.
스티칭 작업이 제대로 이루어지지 않을 경우 영상 왜곡이 생겨 몰입감이 감소할 수 있다.
리그형태의 카메라란?
360도 영상 촬영 및 제작 업계에서 이용하는 촬영 도구로써 여러대의 범용카메라를 특수 리그에 장착한 것이다.
카메라의 수가 많을 수록 화질이 좋아질 수 있지만, 스티칭 작업이 힘들어진다.
(※ 스티칭 작업이 자동으로 이루어지지 않기 때문)
스크린도어 효과란?
보통 디스플레이를 가까이서 보면 보이는 픽셀을 나누는 수평, 수직 선이 보이는 현상으로, 평면 영상을 360도로 늘릴 때 발생하는 이미지 왜곡 현상이다.
영상의 해상도가 높아지면 해결할 수 있다.
셰이더란?
최종적으로 화면에 출력하는 픽셀의 위치와 색상을 계산하는 함수
[unlit-sphereinside.shader 라는 커스텀 셰이더 쓰는 이유]
VR을 사용하여 360도 여행 영상을 만들 때, 카메라를 구체 오브젝트 안에 넣고 렌더링을 하는데, 기본 built-in 셰이더를 통해 렌더링을 하면 구체 밖에 렌더링을 하게 된다. 따라서 구체 밖의 내용을 구체 안으로 바꿔주는 unlit-sphereinside.shader 셰이더 파일을 사용한다.
게이지 UI 만드는 방법
1. 캔버스의 자식으로 Image UI를 생성 후, Background로 이름을 바꿔준다.
2. Background 오브젝트의 Source Image에 원하는 게이지 배경 스프라이트를 넣는다.
3. Background 오브젝트의 자식으로 Image UI를 생성 후, Reticle로 이름을 바꿔준다.
4. Reticle 오브젝트의 Source Image에 원하는 게이지 스프라이트를 넣는다.
5. Reticle 오브젝트의 Image Type을 Filled로 바꿔준다.
6. Fill Amount의 값을 0으로 둔다.
7. 게이지가 변해야할 상황에 Fill Amount를 지속적으로 증감시킴으로써 게이지를 완성한다.
게이지 코드
public Image reticle;
float timeElapsed;
void raycasting()
{
RaycastHit hit;
Vector3 forward = transform.TransformDirection(Vector3.forward * 1000);
if(Physics.Raycast(transform.position, forward, out hit))
{
timeElapsed = Time.deltaTime + timeElapsed;
reticle.fillAmount = timeElapsed / 3;
if(timeElapsed >= 3)
{
hit.transform.GetComponent<Button>().onClick.Invoke();
}
}
else
{
timeElapsed = timeElapsed - Time.deltaTime;
reticle.fillAmount = timeElapsed / 3;
if(timeElapsed <= 0) timeElapsed = 0;
}
}
가상현실에서 Google VR Reticle을 활용해서 인터렉션 하는 방법
Google VR SDK에서 제공해주는 RayCasting을 사용하여 구현한다.
1. GoogleVR>Prefabs>Cardboard>GvrReticlePointer 프리팹을 플레이어 오브젝트의 자식 오브젝트로 둔다.
2. GoogleVR>Prefabs>EventSystem>GvrEventSystem 프리팹을 Hierarchy창에 둔다.
3. 플레이어 오브젝트에 GvrPointerPhysicsRaycaster 컴포넌트를 추가한다.
4. 인터렉션 작업을 할 오브젝트에 EventTrigger 컴포넌트를 추가한다.
5. 아래 스크립트 작성 후 인터렉션 작업을 할 오브젝트에 적용
public Renderer UIRenderer;
public void Start()
{
UIRenderer = GetComponent<Renderer>();
}
public void pointEnter()
{
UIRenderer.material.color = Color.red;
}
public void pointExit()
{
UIRenderer.material.color = Color.blue;
}
6. EventTrigger의 Point Enter에 pointEnter함수, Point Exit에 pointExit함수와 연결
AR이란?
사용자가 눈으로 보는 현실세계에 가상 물체를 겹쳐보이는 기술
ARCore: 구글에서 만든 AR 지원 라이브러리
ARKit: 애플에서 만든 AR 지원 라이브러리
ARFoundation: 유니티에서 만든 ARCore+ARKit를 지원하기 위한 라이브러리
ARFoundation이 제공하는 기술
- World tracking
- Plane detection(평면 감지)
- Point clouds(다양한 센서로 수집된 거리값이 포함된 point들의 모음)
- Light estimation(빛 세기 추정 기능)
- Face tracking
- Image tracking
Vuforia를 이용한 이미지인식 방법
1. Vuforia 사이트에서 유니티용 Vuforia Package를 다운로드하여 유니티에 Import
2. 사이트에서 Develop>License Manager>이름>Get Development Key => Vuforia 활성화 키를 생성
3. Hierarchy 창에서 우클릭 후 Vuforia Engine>AR Camera를 추가
4. AR Camera를 선택하면 나오는 App License Key에 생성했던 Vuforia 활성화 키를 복붙
5. 사이트에서 Develop>Target Manager>이름>Add Database> => 데이터베이스 생성
6. 데이터베이스에서 Add Target을 눌러 다운받은 이미지 넣기
7. 데이터베이스를 Unity Package 형식으로 다운로드 후, 유니티에 Import
8. Hierarchy 창에서 우클릭 후 Vuforia Engine>Image Target 추가
9. Image Target의 Type, Database, Target을 지정
10. Image Target안에 오브젝트를 배치
XR Interaction Toolkit이란?
- 유니티 공식 플러그인
- HMD, Controller의 위치 및 방향과 연동이 가능
- 게임 오브젝트와 컨트롤러의 직접적인 상호 작용이 가능
- 게임 오브젝트와 컨트롤러와의 광선을 이용한 간접적인 상호 작용이 가능
- 상호작용시 시각적인 피드백이 가능
- 유니티 UI와의 인터렉션이 가능
- 오디오 및 햅틱 피드백이 가능
- 유니티 이벤트 시스템과 연동 가능
- AR Foundation과 연동 가능
'학교 수업 > 게임프로그래밍' 카테고리의 다른 글
게임 프로그래밍(2) 중간고사 정리 (0) | 2022.10.19 |
---|---|
게임프로그래밍 기말고사 정리 (0) | 2022.06.08 |
게임 프로그래밍(1) 중간 정리 (0) | 2022.04.26 |
게임프로그래밍 2주차 (0) | 2022.03.16 |