As per the Google Cardboard docs, Вам необходимо иметь элементы GUI в 3D-пространстве перед камерой, чтобы они были воспроизведены в каждом глазу.
Я поделюсь своим решением, как я это сделал. Обратите внимание, что то, что я сделал, имеет один экземпляр Prefab Cardboard Player, когда моя игра начинается и сохраняется на всех моих уровнях через DontDestoryOnLoad(), вместо того, чтобы иметь отдельный экземпляр на каждом уровне. Это позволяет переносить настройки на каждый загруженный уровень и исчезать и исчезать на экране.
Я сделал экранный фейдер, создав холст World Space Canvas, который является родителем для объекта «Голова» картонного префикса, поэтому он следует за взглядом и помещает изображение Black Sprite, которое покрывает весь холст, который блокирует просмотр игроков, когда черный Спрайт виден.
Этот скрипт, прикрепленный к моему Player Prefab, позволяет мне сначала исчезнуть на экране (вызвать FadeOut()), загрузить новый уровень (установить LevelToLoad на индекс уровня, который вы хотите загрузить), затем Fade на экране после загружается новый уровень.
По умолчанию используется путь Async уровней загрузки, чтобы позволить погрузочных Bars, но вы можете установить UseAsync ложь загружать уровни через Application.LoadLevel()
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class LoadOperations: MonoBehaviour {
public Image myImage;
// Use this for initialization
public bool UseAsync;
private AsyncOperation async = null;
public int LevelToLoad;
public float FadeoutTime;
public float fadeSpeed = 1.5f;
private bool fadeout;
private bool fadein;
public void FadeOut(){
fadein= false;
fadeout = true;
Debug.Log("Fading Out");
}
public void FadeIn(){
fadeout = false;
fadein = true;
Debug.Log("Fading In");
}
void Update(){
if(async != null){
Debug.Log(async.progress);
//When the Async is finished, the level is done loading, fade in the screen
if(async.progress >= 1.0){
async = null;
FadeIn();
}
}
//Fade Out the screen to black
if(fadeout){
myImage.color = Color.Lerp(myImage.color, Color.black, fadeSpeed * Time.deltaTime);
//Once the Black image is visible enough, Start loading the next level
if(myImage.color.a >= 0.999){
StartCoroutine("LoadALevel");
fadeout = false;
}
}
if(fadein){
myImage.color = Color.Lerp(myImage.color, new Color(0,0,0,0), fadeSpeed * Time.deltaTime);
if(myImage.color.a <= 0.01){
fadein = false;
}
}
}
public void LoadLevel(int index){
if(UseAsync){
LevelToLoad= index;
}else{
Application.LoadLevel(index);
}
}
public IEnumerator LoadALevel() {
async = Application.LoadLevelAsync(LevelToLoad);
yield return async;
}
}