-1
내가 원하는 것은 inspector에서 생성 할 객체의 수를 변경 한 다음 모든 기존 객체를 먼저 삭제 한 다음 새 객체 수를 만드는 경우입니다. 어떻게 새 개체를 만들기 전에 모든 개체를 삭제할 수 있습니까?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class InstantiateObjects : MonoBehaviour
{
public GameObject prefab;
public Terrain terrain;
public float yOffset = 0.5f;
public int objectsToInstantiate;
public bool parent = true;
private float terrainWidth;
private float terrainLength;
private float xTerrainPos;
private float zTerrainPos;
private int numberOfObjectsToCreate;
private GameObject objInstance;
public void Start()
{
//Get terrain size
terrainWidth = terrain.terrainData.size.x;
terrainLength = terrain.terrainData.size.z;
//Get terrain position
xTerrainPos = terrain.transform.position.x;
zTerrainPos = terrain.transform.position.z;
numberOfObjectsToCreate = objectsToInstantiate;
generateObjectOnTerrain();
}
private void Update()
{
if (numberOfObjectsToCreate != objectsToInstantiate)
{
for (int i = 0; i < objectsToInstantiate; i++)
{
Destroy(objInstance);
}
generateObjectOnTerrain();
}
}
public void generateObjectOnTerrain()
{
for (int i = 0; i < objectsToInstantiate; i++)
{
//Generate random x,z,y position on the terrain
float randX = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth);
float randZ = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength);
float yVal = Terrain.activeTerrain.SampleHeight(new Vector3(randX, 0, randZ));
//Apply Offset if needed
yVal = yVal + yOffset;
//Generate the Prefab on the generated position
objInstance = Instantiate(prefab, new Vector3(randX, yVal, randZ), Quaternion.identity);
objInstance.name = "Teleportation Booth";
if (parent)
objInstance.transform.parent = this.transform;
}
}
}
이
는 Inspector에서 변수를 만들 개체의 수를 설정하는 것입니다 :public int objectsToInstantiate;
이 변수는 개체의 새 번호를 생성 할 경우 변경 사항이 있다면 확인하는 헬퍼해야
검사관에서 변경되었습니다.
private int numberOfObjectsToCreate;
그리고 업데이트 기능의 코드는 변경되지 않습니다. inspector에 새로운 값을 입력하면 아무것도 변하지 않습니다.
개체를 만들 때 Instantiate를 사용해서는 안됩니다. 먼저 개체를 미리 정의한 풀 컨트롤러에서 이전 개체로 대체 할 수 있습니다. 미리 정의 된 개체 수를 가지며 필요한 경우 더 많은 개체가 만들어 지지만 그렇지 않은 경우, 그것만이 사용하지 않는 객체의 속성을 변경합니다. 이것을 사용하면 메모리 누수를 없앨 수 있습니다. (이 문제에서) –
@ArtemLayko 저는 기존의 object 객체를 복제하고 싶다는 것을 잊어 버렸습니다. 그래서 Instantiate를 사용하고 있습니다. 하지만 복제하고 싶거나 새로운 객체를 만들려면 어떻게해야합니까? –
개체 풀 사용 – Bijan