Проблемы с созданием следующего и предыдущего префаба в массиве (Unity 3D) - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над простым приложением виртуального тура, в котором я помещаю камеру в сферу, сопоставляю сферу с фотографией 360 и нажимаю на объекты стрелок (спрайты), чтобы перемещаться вперед и назад. Мой скрипт ниже создает следующую сферу в массиве (сопоставленную со следующей 360-й фотографией), уничтожая текущую сферу, имитируя движение вперед в приложении. Кажется, все работает хорошо.

public void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit))
        {
            if (hit.collider != null)
            {
                Destroy(currentObject); 
                currentIndex++;
                currentIndex = currentIndex >= Spheres.Length ? 0 : currentIndex;
                currentObject = Instantiate(Spheres[currentIndex]);
            }
        }
    }
}

У меня вопрос: как изменить порядок следования массива, чтобы я мог щелкнуть стрелку «назад», чтобы создать экземпляр предыдущего префаба в массиве.

Я думал, что это просто, как currentIndex--;, но я не могу заставить его работать. Любая помощь приветствуется.

фотография виртуального тура в редакторе

1 Ответ

2 голосов
/ 11 октября 2019

Просто инвертируйте переход, используя

currentIndex--; 
if(currentIndex < 0) currentIndex = Spheres.Length - 1;

Вы также хотите сделать то же самое для ++ пути:

currentIndex++; 
if(currentIndex > Spheres.Length - 1) currentIndex = 0;

обратите внимание на - 1! Ваш индекс никогда не должен достигать Spehres.Length, так как индексы основаны на 0. Таким образом, последний элемент в массиве всегда имеет index = array.Length - 1.


Немного более простой способ для переноса в позитивном ключе был бы просто

currentIndex = (currentIndex + 1) % Spheres.Length;
...