-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
안녕하세요 랜덤오브젝트 생성기에서 질문있습니다.
24.03.21 13:16 작성 조회수 56
0
16:04 에 prop prefabs에 저는 사이즈가 안나오는데 왜그럴까요..?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnGenerator : MonoBehaviour
{
public GameObject[] propPrefabs;
private BoxCollider area;
public int count = 100;
private List<GameObject> props = new List<GameObject>();
void Start()
{
area = GetComponent<BoxCollider>();
for (int i = 0; i < count; i++)
{
Spawn();
}
area.enabled = false;
}
private void Spawn()
{
int selection = Random.Range(0, propPrefabs.Length);
GameObject selectedPrefab = propPrefabs[selection];
Vector3 spawnPos = GetRandomPosition();
GameObject instance = Instantiate(selectedPrefab, spawnPos, Quaternion.identity);
props.Add(instance);
}
private Vector3 GetRandomPosition()
{
Vector3 basePosition = transform.position;
Vector3 size = area.size;
float posX = basePosition.x + Random.Range(-size.x/2f, size.x/2f);
float posY = basePosition.y + Random.Range(-size.y/2f, size.y/2f);
float posZ = basePosition.z + Random.Range(-size.z/2f, size.z/2f);
Vector3 spawnPos = new Vector3(posX,posY,posZ);
return spawnPos;
}
// Update is called once per frame
void Update()
{
}
}
답변을 작성해보세요.
0
인프런 AI 인턴
2024.03.23
안녕하세요, 인프런 AI 인턴입니다.
질문해주신 “prop prefabs에 사이즈가 안 나오는 문제”는 주로 Unity의 Inspector 창에서 배열이나 리스트 항목을 정의했으나, 아직 해당 배열이나 리스트에 아무런 요소도 추가되지 않았을 때 발생합니다. 코드를 보면 public GameObject[] propPrefabs;
로 propPrefabs
라는 GameObject 타입의 배열을 선언하였으나, Unity 에디터에서 이 배열에 실제로 아이템을 할당하지 않았기 때문에 사이즈가 나타나지 않는 것입니다.
Unity 에디터에서 해결하려면, 다음 단계를 따라하시면 됩니다:
- Unity 에디터의 Inspector 창에서 SpawnGenerator 스크립트 컴포넌트가 있는 GameObject를 선택합니다.
- “Prop Prefabs” 배열 옆에 있는 사이즈 필드에 원하는 숫자를 입력합니다. 이 숫자는 배열에 추가하고 싶은 prefabs의 수입니다.
- 입력한 숫자만큼의 슬롯이 “Prop Prefabs” 아래에 생성됩니다.
- 각 슬롯에 드래그 앤 드롭으로 원하는 prefab을 할당합니다.
이 과정을 통해 “Prop Prefabs” 필드에 할당된 prefab의 갯수 만큼 사이즈가 조정되며, 이제 스크립트에서 이 배열을 정상적으로 사용할 수 있습니다.
추가적으로, 스크립트에서 동적으로 배열의 크기를 조정하고 싶으시다면 코드 내에서 직접 생성하고 할당하는 방법도 있습니다. 하지만 Unity의 Inspector를 통해 할당하는 것이 더 직관적이고 간단하므로, 가능하다면 에디터를 활용하는 방법을 권장합니다.
답변 1