Я создаю приложение для Google-картона, приложение, как изображение на 360 градусов. Я создал сферу, и я сделал 62 материала с различным 360-градусным изображением. Я создал 2 кнопки, следующий и предыдущий, когда я фокусируюсь на следующей кнопке, меняя ее на следующий материал, как я хочу. но когда я фокусируюсь на предыдущей кнопке, это меняется на последний материал, который я не хочу. Я хочу только предыдущий материал.Измените материал сферы на Focus для VR 360 Degree Image App в Unity3d
Вот мой код. Смотрите и расскажите мне, что я делаю неправильно. Благодарю.
using UnityEngine;
using System.Collections;
public class next : MonoBehaviour {
public CardboardHead head;
public Material[] myMaterials = new Material[60];
int maxMaterials;
int arrayPos = 0;
public GameObject Sphere;
public int timeToCompleteLoading = 3;
bool wait = false;
void Start()
{
head = Camera.main.GetComponent<StereoController>().Head;
maxMaterials = myMaterials.Length-1;
}
public void ToggleVRMode()
{
Cardboard.SDK.VRModeEnabled = !Cardboard.SDK.VRModeEnabled;
}
IEnumerator RadialProgress(float time)
{
wait = true;
yield return new WaitForSeconds(time);
float rate = 1/time;
float i = 0;
while (i < 1)
{
i += Time.deltaTime * rate;
gameObject.renderer.material.SetFloat("_Progress", i);
}
wait = false;
}
void updateMaterials(){
if (collider.gameObject.tag == "next") {
if (arrayPos == maxMaterials){
arrayPos = 0;
}else{
arrayPos++;
Sphere.renderer.material = myMaterials [arrayPos];
}
}
if (collider.gameObject.tag == "previous") {
if (arrayPos == 0){
arrayPos = maxMaterials;
}else{
arrayPos--;
Sphere.renderer.material = myMaterials [arrayPos];
}
}
}
void Update()
{
RaycastHit hit;
Collider collider = GetComponent<Collider>();
if (collider) {
bool isLookAt = collider.Raycast (head.Gaze, out hit, Mathf.Infinity);
if (isLookAt == true) {
if(wait == false){
StartCoroutine (RadialProgress (timeToCompleteLoading));
updateMaterials();
}
}
}
}
}
При первом запуске он будет прыгать до последнего, но если вы сначала посмотрите на следующий, а затем на предыдущий, он должен перейти к предыдущему. Но вы имеете в виду, что когда вы смотрите на следующее, а затем на предыдущее, оно прыгает до последнего? – Everts
По другой проблеме код в то время как сопрограмма не будет делать то, что вы ожидаете. Вам нужно вернуть значение null из цикла while, чтобы он возвращал управление программе. В этой ситуации он будет делать все движение в одном кадре. – Everts
В первом запуске, когда я фокусируюсь на предыдущем, он меняется на последний [61], как и должно быть. потому что исходная позиция равна [0], но когда я фокусируюсь на следующем ее переходе на [1]. он должен перейти к [0], но при первом запуске, когда я сосредоточусь на следующем его рабочем штрафе. например [0], [1], [2] ...... так далее после того, как я сосредоточусь на предыдущем, прыгает на [60]. @fafase –