Нет отслеживания головы в демо-сцене
Я скачал SDK и попытался загрузить демонстрационную сцену, но при экспорте APK нет отслеживания головы, какие-либо предложения?
при установке apk, я получаю стерео сцену, и куб вращается, но без отслеживания головы. Я могу включить и выключить искажение, но не нашел, где я могу включить отслеживание головы.
Любая помощь приветствуется.
3 ответа
1.) Создайте новый сценарий C# в Unity3D с этим содержимым:
using UnityEngine;
using System.Collections;
public class VROneRotateAround : MonoBehaviour {
public Transform target;
public float distance = 5f;
public Vector3 offset = Vector3.zero;
public bool useAngleX = true;
public bool useAngleY = true;
public bool useAngleZ = true;
public bool useRealHorizontalAngle = true;
public bool resetViewOnTouch = true;
private Quaternion initialRotation = Quaternion.identity;
private Quaternion currentRotation;
private static Vector3 gyroAngles; // original angles from gyro
private static Vector3 usedAngles; // converted into unity world coordinates
private int userSleepTimeOut; // original device SleepTimeOut setting
private bool gyroAvail = false;
void Start() {
Input.compensateSensors = true;
transform.position = (target.position + offset) - transform.forward * distance;
}
void FixedUpdate() {
if (gyroAvail == false) {
if (Input.gyro.attitude.eulerAngles != Vector3.zero && Time.frameCount > 30) {
gyroAvail = true;
initialRotation = Input.gyro.attitude;
target.gameObject.SendMessage("StartFlight");
}
return; // early out
}
// reset origin on touch or not yet set origin
if(resetViewOnTouch && (Input.touchCount > 0))
initialRotation = Input.gyro.attitude;
// new rotation
currentRotation = Quaternion.Inverse(initialRotation)*Input.gyro.attitude;
gyroAngles = currentRotation.eulerAngles;
//usedAngles = Quaternion.Inverse (currentRotation).eulerAngles;
usedAngles = gyroAngles;
// reset single angle values
if (useAngleX == false)
usedAngles.x = 0f;
if (useAngleY == false)
usedAngles.y = 0f;
if (useAngleZ == false)
usedAngles.z = 0f;
if (useRealHorizontalAngle)
usedAngles.y *= -1;
transform.localRotation = Quaternion.Euler (new Vector3(-usedAngles.x, usedAngles.y, usedAngles.z));
transform.position = (target.position + offset) - transform.forward * distance;
}
public static Vector3 GetUsedAngles() {
return usedAngles;
}
public static Vector3 GetGyroAngles() {
return gyroAngles;
}
public void ResetView() {
initialRotation = Input.gyro.attitude;
}
void OnEnable() {
// sensor on
Input.gyro.enabled = true;
initialRotation = Quaternion.identity;
gyroAvail = false;
// store device sleep timeout setting
userSleepTimeOut = Screen.sleepTimeout;
// disable sleep timeout when app is running
Screen.sleepTimeout = SleepTimeout.NeverSleep;
}
void OnDisable() {
// restore original sleep timeout
Screen.sleepTimeout = userSleepTimeOut;
//sensor off
Input.gyro.enabled = false;
}
}
Откройте демонстрационную сцену и прикрепите этот скрипт к префабу VROneSDK.
В редакторе свойств выберите куб в качестве цели и введите 6 для расстояния.
Создайте приложение и протестируйте его на устройстве или используйте UnityRemote для проверки поведения в редакторе.
SDK, кажется, работает только на поддерживаемом устройстве, вам нужно получить S5, чтобы он заработал. Вы также должны получить плагин Android Pro для Unity. Мы на самом деле запустили distotion, но экран обрезается примерно на 10 пикселей с обеих сторон. Это не может быть правдой.
То же самое здесь: я вижу демонстрационную сцену (вращающийся куб на фоне сетки и три источника света) в левом / правом разделенном экране, но нет отслеживания головы. Никаких предварительных искажений тоже нет. Это на Samsung Galaxy S3 (Android 4.3) с Unity 4.5.3f3.