统一:将克隆放在数组上并添加后退按钮以销毁最后一个克隆直到第一个
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,不太清楚为什么,但如果你删除它,你可以在一个地方产生尽可能多的克隆对象鼠标指针随心所欲
当涉及到将这些对象存储在数组中时,您只需声明一个游戏对象数组并在实例化后添加每个克隆。您确实需要为克隆设置某种最大限制。
- 声明 arr:
private GameObject[] clonesArray;
- 初始化它:
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
我对团结还很陌生,我正在尝试做我的第一场比赛。我想把克隆对象放在数组上,然后添加一个后退按钮来销毁最后一个克隆,我试图制作数组,但它只让我克隆 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,不太清楚为什么,但如果你删除它,你可以在一个地方产生尽可能多的克隆对象鼠标指针随心所欲
当涉及到将这些对象存储在数组中时,您只需声明一个游戏对象数组并在实例化后添加每个克隆。您确实需要为克隆设置某种最大限制。
- 声明 arr:
private GameObject[] clonesArray;
- 初始化它:
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