awake, start 같은 유니티 이벤트 메서드 중 하나
컴포넌트가 활성화 될 때마다 매번 다시 실행되는 메서드
(Start는 처음 한번만 실행, OnEnable은 활성화 될때마다 실행)
따라서 이 OnEnable을 끄고 켜면 이를 반복 실행할 수 있음.
private void OnEnable() {
// 발판을 리셋하는 처리
stepped = false;
for(int i = 0; i < obstacles.Length; i++)
{
if(Random.Range(0,3) == 0)
{
obstacles[i].SetActive(true);
}
else
{
obstacles[i].SetActive(false);
}
}
}
풀에 필요한 만큼 오브젝트를 미리 쌓아두고 꺼내서 사용하고, 넣어두고
나중에 또 필요하면 다시 재활용하는 방식
Instantiate, Destroy 같은 실시간 처리 방식은 성능을 많이 요구하기 때문에
게임 도중에 끊김현상 발생 가능.
이를 오브젝트 풀링으로 방지 가능
void Update() {
// 순서를 돌아가며 주기적으로 발판을 배치
if (GameManager.instance.isGameover)
{
return;
}
if(Time.time >= lastSpawnTime + timeBetSpawn)
{
lastSpawnTime = Time.time;
// 랜덤한 시간만큼 발판 생성
timeBetSpawn = Random.Range(timeBetSpawnMin, timeBetSpawnMax);
// 높이 역시 랜덤하게
float yPos = Random.Range(yMin, yMax);
### // 해당 발판 옵젝을 리셋 -> OnEnable 실행
platforms[currentIndex].SetActive(false);
platforms[currentIndex].SetActive(true);
platforms[currentIndex].transform.position = new Vector2(xPos, yPos);
currentIndex++;
if(currentIndex >= count)
{
currentIndex = 0;
}
}
}
사용자에게 보이지 않는 곳에 발판 3개를 쌓아두고, 발판 1, 발판 2, 발판 3 을 랜덤하게 생성하여 사용자에게 랜덤한 발판을 생성하는 것 처럼 보이게 하는 것.
유니티 라이브러리에 내장되어 있음.
게임 시작 후 시간이 몇초 지났는지 출력하는 변수
즉 현재 시점으로 취급 가능