Unity5로 '가장 빨리 만나는 유니티 AR/VR' 2장 가상현실 개발하기 따라하기.

* 좌우 카메라 만들고 화면 분할하기:
빈 게임 오브젝트 생성, 'VRcamera'라 명명.
자식으로 카메라 두개 생성, 각각 'left', 'right'라 명명.
x/y/z 위치를 각각 left: -0.3/1/-5 right: 0.3/1/-5로 설정.
Viewport Rect X/Y/W/H를 left: 0/0/0.5/1 right: 0.5/0/0.5/1로 설정.

총알 프리팹들이 생성되어 화면쪽으로 다가오는 스크립트 작성 중
transform.childCount, transform.getChild()에서 막혀 진행이 안되고 있는 중.
objBullet.transform.parent = transform; 로 새로 생성되는 프리팹들을 자식으로 만들어줘서 문제 해결. 총알이 앞쪽 방향이 아닌 뒷쪽 방향을 보이며 날아오는 것을 제외하곤 제대로 작동한다.

17/7/17 월

17/7/20 목 추가.
Google VR SDK for Unity 설치와 Android 랜더링을 위한 삽질.

Google VR SDK for Unity를 다운받아 설치하려고 보니 Unity 5.6 이상의 버전이 필요하다기에 일단 접고 유니티 새로 설치 시작.

새로 Unity 2017.1.03f3 버전으로 안드로이드 빌드만 추가하여 업데이트 설치.
5.6.2 버전(2017/6/21)까지 나온 뒤 2017.1.0 버전(2017/7/10)으로 버전 넘버링 체계가 변한 듯.
실행을 하니 로그인과 액티베이션을 새로 해야했다.

WebGL 빌드 기능이 빠져서 새로 다운(156M나 된다) 받아 설치. 설치용량은 600여 메가.
WebGL로 Rendering 테스트. 제대로 실행이 되기는 하는데 Node.JS 연결도 허용해 줘야 했고 용량이 351M, 전체 프로젝트 폴더의 용량은 741M나 된다. 너무 무겁다.

안드로이드로 랜더링 해보기 위해 Android SDK, JDK 폴더 위치 찾는 중,
Android SDK는 사용자/user/AppData/Local/Android/sdk에 있었는데(용량 4.65G) JDK는 찾지 못했고 보니 NDK도 설정해야 한다.
웹서핑으로 http://prosto.tistory.com/183 페이지에 나온 걸 보고 JDK-8u141-windows-x64, Android-NDK-r10e도 다운로드 받아 Unity 메뉴 중 Edit-Preferences로 뜨는 창의 External Tools에서 SDK, JDK, NDK의 위치를 설정해주다. JDK가 700M가량, NDK가 3.14G나 된다. 하나하나 안 무거운게 없다. 기껏 다 설정해주고 랜더링해보니 Android SDK path가 정확하지 않단다.
사용자/user/AppData/Local/Android/sdk에 있던 파일들을 (G:)/ProgInstalled/Android/sdk로 복사하고 Android Studio의 ProjectStructure-SDK Location에서도 위치를 변경해 주다. 위치를 변경했는데도 여전히 안된다는 표시가 뜬다. 안드로이드 스튜디오 2.3.3으로 업데이트. sdk 등도 업데이트. 시간 무지 오래 걸린다.

https://developers.google.com/vr/unity/ 에서 Google VR SDK for Unity 다운받아 임포트. 유니티의 버전업을 한지라 임포트는 제대로 된다. 한데 버전이 달라져서인지 책에 나오는 GvrViewerMain 프리팹이 없다. 대신 GvrEditorEmulator 프리팹을 넣고 Camera를 속성으로 넣어 줬지만 가상현실화면은 나오지 않는다.

sdk, jdk, ndk 모두 설정해주고 Android Studio, sdk 모두 업데이트 해줬음에도 여전히 안드로이드 랜더링은 되지 않는다.

BulletMaker.cs=========================================
//Hierarche-BulletMaker에 적용.
//1초 지날때마다 최대수 넘지 않을 경우 총알 새로 생성하기.
//총알 앞쪽으로 날아오게 처리. 카메라 뒷쪽으로 사라지면 전방으로 다시 이동.

using UnityEngine;
using System.Collections;

public class BulletMaker : MonoBehaviour {
    
     public GameObject bulletPref;
     public int maxBulletCount = 5;
     public int bulletsCount = 0;
     private float spawnTime = 0.0f;

     void Start(){
          //핸드폰으로 볼때 화면 절전모드가 되거나 꺼지지 않게 처리.
#if UNITY_ANDROID
          Screen.sleepTimeout = SleepTimeout.NeverSleep;
#elif UNITY_IOS
          iPhoneSettings.screenCanDarken = false;
#endif
     }

     void Update(){
          spawnTime += Time.deltaTime;
          //1초 지날때마다 최대수 넘지 않을 경우 총알 새로 생성, 자식으로 추가.
          if (spawnTime > 1.0f && maxBulletCount >= bulletsCount) {
               spawnTime = 0.0f;
               GameObject objBullet = GameObject.Instantiate(bulletPref, 
			   	transform.position, transform.rotation) as GameObject;
               objBullet.transform.localPosition = new Vector3(
			   	Random.Range(-2.0f, 2.0f), Random.Range(0.5f, 3.0f), 30.0f);
               objBullet.transform.parent = transform;
               bulletsCount++;
          }
          //총알 앞쪽으로 날아오게 처리. 카메라 뒷쪽으로 사라지면 전방으로 재이동.
          for (int i = 0; i < transform.childCount; i++) {
               Transform childBullet = transform.GetChild (i);
               childBullet.Translate (new Vector3(0, 0, Random.Range(-1.0f, -0.8f)));
               if(childBullet.localPosition.z < -5.0f){
                    childBullet.transform.localPosition = new Vector3(
				Random.Range(-2.0f, 2.0f), Random.Range(0.5f, 3.0f), 30.0f);
               }
          }
     }
}