统一:将克隆放在数组上并添加后退按钮以销毁最后一个克隆直到第一个

unity : put clones on array and add back button that destory the last clone till the first

我对团结还很陌生,我正在尝试做我的第一场比赛。我想把克隆对象放在数组上,然后添加一个后退按钮来销毁最后一个克隆,我试图制作数组,但它只让我克隆 1 个对象,然后我什么也做不了,谢谢你的帮助。 我有这个代码:

public class TouchSpwan : MonoBehaviour

public GameObject prefab;
public GameObject clone;
public Rigidbody rot;
public Camera mainCamera;
public FixedTouchField touchField;
public float gridsize;

void Update()
{
        if (Input.GetMouseButtonDown(0))
         {
                
             Vector3 touchPos = mainCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 9.8f));
             touchPos.x = Mathf.Floor(touchPos.x / gridsize);
             touchPos.z = Mathf.Floor(touchPos.z / gridsize);
             Vector3 result = new Vector3((float)touchPos.x * gridsize,touchPos.y, (float)touchPos.z * gridsize);
             if (touchField.Pressed == true)
             {
                    clone = Instantiate(prefab, result, prefab.transform.rotation);
                    clone.transform.parent = gameObject.transform;
            }
    }
}

首先,您的 GameObject 克隆不必是 public class 成员。而不是

clone = Instantiate(prefab, result, prefab.transform.rotation);
clone.transform.parent = gameObject.transform;

你可以说:

 GameObject clone = Instantiate(prefab, result, prefab.transform.rotation);
 clone.transform.parent = gameObject.transform;

并删除顶部的声明:

public GameObject clone;

检查鼠标左键是否被按下后,你会额外检查一些 touchField.Pressed,不太清楚为什么,但如果你删除它,你可以在一个地方产生尽可能多的克隆对象鼠标指针随心所欲

当涉及到将这些对象存储在数组中时,您只需声明一个游戏对象数组并在实例化后添加每个克隆。您确实需要为克隆设置某种最大限制。

  1. 声明 arr:private GameObject[] clonesArray;
  2. 初始化它:clonesArray = new GameObject[maxNumberOfClones];

完成后,您可以在实例化后将每个克隆添加到数组中:

GameObject clone = Instantiate(prefab, result, prefab.transform.rotation);
clone.transform.parent = gameObject.transform;
clonesArray[currentIndex] = clone;
currentIndex++;

您需要跟踪 currentIndex,从 0 开始,然后在将克隆添加到数组后递增它。然后要销毁克隆,您需要从数组访问它并使用 Destroy()。不要忘记减少索引计数器。

Destroy(clonesArray[currentIndex]);
currentIndex--;

希望对您有所帮助 :D