반응형

구현 목표
- 목적:
지정한 기준 위치(여기서는 원점, (0, 0, 0))로부터 n만큼 떨어진 반경 내에서 몬스터를 랜덤하게 스폰시키는 것. - 예시:
몬스터가 (0, 0, 0)부터 (5, 0, 5) 범위 내에서 랜덤하게 스폰되도록 구현함.
구현 방법
- 랜덤 위치 생성:
- Random.insideUnitSphere 함수를 사용하여 반지름 1의 구 내부의 임의의 점을 얻은 후, 5.0f를 곱해 (0, 0, 0)부터 (5, 0, 5) 범위 내의 위치를 생성합니다.
- y축은 항상 0으로 고정하여, 스폰 위치가 수평 평면에만 위치하도록 합니다


- 특정 범위 조건 적용:
- while 문을 사용하여 생성된 랜덤 위치와 원점(0, 0, 0) 사이의 거리를 계산합니다.
- 만약 거리가 3.0 이하이면, 조건에 맞지 않으므로 다시 랜덤 위치를 결정합니다.

3 값 이내에는 몬스터가 스폰 되지 않은 장면 (징그럽다..)
- 반복적인 스폰 처리:
- 코루틴(SpawnCoroutine)을 이용하여, 한 번에 m_Count만큼 몬스터를 스폰한 후 m_SpawnTime만큼 대기하고, 다시 스폰하는 방식을 사용합니다.
코드 예시
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject monster_prefab;
public int m_Count;
public float m_SpawnTime;
private void Start()
{
StartCoroutine(SpawnCoroutine());
}
IEnumerator SpawnCoroutine()
{
Vector3 pos;
for (int i = 0; i < m_Count; i++)
{
pos = Vector3.zero + Random.insideUnitSphere * 5.0f;
pos.y = 0.0f;
while(Vector3.Distance(pos, Vector3.zero) <= 3.0f)
{
pos = Vector3.zero + Random.insideUnitSphere * 5.0f;
pos.y = 0.0f;
}
var go = Instantiate(monster_prefab,pos,Quaternion.identity);
}
yield return new WaitForSeconds(m_SpawnTime);
StartCoroutine(SpawnCoroutine());
}
}
요약
- 랜덤 위치 생성:
Random.insideUnitSphere와 스케일 조정을 통해 (0, 0, 0) ~ (5, 0, 5) 범위의 위치 생성 - 조건 검사:
while 문으로 생성된 위치가 원점에서 3 이하일 경우, 다시 위치를 결정하여 조건에 부합하는 위치에만 몬스터 스폰 - 반복적 스폰:
코루틴을 사용하여 지정한 주기마다 몬스터를 반복적으로 스폰
이처럼 간단한 로직으로 원하는 범위 내에서 조건에 맞는 랜덤 스폰을 구현할 수 있습니다.
반응형
'유니티 > 구현내용정리' 카테고리의 다른 글
| 유니티 방치형 프로젝트 - 타겟을 향해 날아가는 스킬 구현하기 (0) | 2025.03.12 |
|---|---|
| 유니티 방치형 프로젝트 - 오브젝트 풀 시스템 구축 (1) | 2025.03.11 |
| 유니티 Robots 프로젝트 - 매치메이킹 구현 #1 (2) | 2025.03.04 |
| 어드레서블 - AWS 서버에서 다운로드 해야 할 리소스 파일 확인 하는 방법 (0) | 2025.02.16 |
| 유니티 데이터 드리븐 구조를 사용해서 게임 로직과 데이터를 분리하기 (0) | 2025.01.20 |
