#arrays #unity3d #clone
Вопрос:
я очень новичок в unity и пытаюсь сделать свою первую игру. я хочу поместить объекты-клоны в массив, а затем добавить кнопку «Назад», которая уничтожит последний сделанный клон, я пытался создать массив, но это позволило мне клонировать только 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;
}
}
}
Ответ №1:
Во-первых, ваш клон игрового объекта не обязательно должен быть членом публичного класса. Вместо
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;
После того, как вы проверите, была ли нажата левая кнопка мыши, вы выполните дополнительную проверку на наличие некоторого сенсорного поля.Нажата, не совсем понимаю почему, но если вы ее удалите, вы сможете создавать столько объектов-клонов в том месте, где находится указатель мыши, сколько захотите.
Когда дело доходит до хранения этих объектов в массиве, вы можете просто объявить массив игровых объектов и добавить каждый клон после создания экземпляра. Вам действительно нужно иметь какой — то максимальный лимит для клонов.
- объявите 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 ;
Вам нужно отслеживать текущий индекс, начинать с 0, а затем увеличивать его после добавления клона в массив. Затем, чтобы уничтожить клон, вам нужно получить доступ к нему из массива и использовать функцию Destroy(). Не забудьте уменьшить счетчик индексов.
Destroy(clonesArray[currentIndex]);
currentIndex--;
Я надеюсь, что это поможет
Комментарии:
1. я попробую это сейчас , большое вам спасибо, сенсорное поле.нажато, чтобы оно могло клонировать объекты только в том случае, если я коснусь панели посередине, потому что мне это нужно только посередине .
2. Тогда будьте осторожны с сенсорным полем.нажата. Убедитесь, что вы правильно установили значение true/false. Это очень распространенная ошибка при работе с логическими значениями, когда кто-то устанавливает значение true, а затем забывает снова установить значение false.
3. работающий сумасшедший хороший человек, большое тебе спасибо ! хорошего вам дня !
4. Нет проблем, чувак, рад, что смог помочь
![]()