在阵列中实例化下一个和上一个预制件的问题(Unity 3D)

Problems with Instantiating Next and Previous Prefab in Array (Unity 3D)

我正在开发一个简单的虚拟旅游应用程序,我将相机放在一个球体中,用 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]);
            }
        }
    }
}

我的问题是如何反转数组的顺序,以便我可以单击 "back" 箭头来实例化数组中的前一个预制件。

我认为这很简单 currentIndex--; 但我无法让它工作。非常感谢任何帮助。

pic of virtual tour in editor

只需使用

反转环绕
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;