Arrays Unity预制数组实例化和销毁

Arrays Unity预制数组实例化和销毁,arrays,unity3d,instantiation,destroy,gameobject,Arrays,Unity3d,Instantiation,Destroy,Gameobject,我在我的Unity项目中遇到了一个很小的问题,但找不到合适的帮助或方法。我被困在一个点上,我有一个预制的游戏对象数组,我试图实例化索引1游戏对象,当它被破坏时,实例化下一个索引。下面是我是怎么做的。我有两个脚本:一个用于实例化,另一个用于销毁它。 脚本1: public class GameObjectsArray : MonoBehaviour { public static GameObjectsArray Instance { get; set; } public Gam

我在我的Unity项目中遇到了一个很小的问题,但找不到合适的帮助或方法。我被困在一个点上,我有一个预制的游戏对象数组,我试图实例化索引1游戏对象,当它被破坏时,实例化下一个索引。下面是我是怎么做的。我有两个脚本:一个用于实例化,另一个用于销毁它。 脚本1:

public class GameObjectsArray : MonoBehaviour {

    public static GameObjectsArray Instance { get; set; }
    public GameObject[] Objects;
    public int i=0;

    // Use this for initialization
    void Start()
    {
        InstiatingMethod();
        //Instantiate(Objects[i]);

    }
    public void InstiatingMethod()
    {
        Instantiate(Objects[i]);
    }
}
脚本2:

public class CheckDestroy : MonoBehaviour {

    //public GameObject[] Objects;
    //int i;

    // Use this for initialization
    void Start () {

        Debug.Log("executed");

        //Objects = GameObject.FindGameObjectsWithTag("Player");

        //OnMouseDown();

        //Instantiate(Objects[i], transform.position, transform.rotation);

    }

    // Update is called once per frame
    void Update () {

        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                BoxCollider boxCollider = hit.collider as BoxCollider;

                if (boxCollider != null)
                {
                    GameObjectsArray.Instance.i++;
                    GameObjectsArray.Instance.InstiatingMethod();

                    Destroy(boxCollider.gameObject);

                }

            }
        }
    }
}

因此,我创建了一个非常快速的项目,以获得良好的响应:

在场景中,我们将有一个空的游戏对象,其中将包含我们的脚本,我称之为“GameManager”,基本上这个脚本将完成所有操作,将您的逻辑放在一个脚本中更符合逻辑

public GameObject[] GameObjects;

private int _targetIndex = -1;
private RaycastHit _hit;

private void Start()
{
    InstantiateNextGameObject();
}

public void InstantiateNextGameObject()
{
    //if the index is pointing at the last game object in the array, init the index to -1
    if (_targetIndex == GameObjects.Length - 1)
        _targetIndex = -1;

    Instantiate(GameObjects[++_targetIndex]);
}

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Mouse0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out _hit))
        {
            BoxCollider boxCollider = _hit.collider as BoxCollider;

            if (boxCollider != null)
            {
                InstantiateNextGameObject();
                Destroy(boxCollider.gameObject);
            }
        }
    }
}
  • 我们将有一个游戏对象数组,下面是targetIndex,它将从-1开始

  • 函数instancenextgameobject()将简单地递增targetIndex,然后从数组中实例化一个游戏对象(++targetIndex第一次为0,第二次为1等)。我们还必须检查targetIndex是否到达数组的末尾,将其放回-1

  • 然后基本上就是你在更新中所做的,当你点击一个游戏对象,实例化下一个并销毁当前的

最后,你会得到这样的结果:

如果你什么都不懂,请随时问我:)


快乐编码

你介意把答案中的代码而不是图片吗?链接会随着时间的推移而消失。@Eliasar当然!更新了答案。谢谢兄弟,你救了我。它像奶酪一样起作用:)啊,有点