【问题标题】:Problems with Instantiating Next and Previous Prefab in Array (Unity 3D)在数组中实例化下一个和上一个预制件的问题(Unity 3D)
【发布时间】:2019-10-11 17:58:01
【问题描述】:

我正在开发一个简单的虚拟游览应用程序,我将相机放置在球体中,用 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--; 一样简单,但我无法让它工作。非常感谢任何帮助。

pic of virtual tour in editor

【问题讨论】:

    标签: arrays unity3d reverse instantiation destroy


    【解决方案1】:

    只需使用

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

    【讨论】:

    • 谢谢。奇怪的是,我遇到了一个问题,我似乎通过单击一个箭头同时触发了两个脚本。我用引用适当标签的脚本标记了每个箭头,但它仍然同时执行。这是光线投射问题吗?我在原始帖子中添加了一张图片,以便您查看我的布局。
    • 是的。我刚刚调试了我的光线投射,由于某种原因,它同时触发了两个箭头,无论我点击哪个箭头。
    • 在您的代码中,您不会区分您所击中的对象......也许而不是Update,您应该将您的代码放入OnMouseDown 例如。 OnMouseDown 仅在鼠标实际位于的对象上调用
    • 啊,没看到你的帖子。我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多