Unity-#10.OnEnable, 오브젝트 풀링

CHO WanGi·2024년 4월 10일

Unity

목록 보기
10/13

OnEnable

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 을 랜덤하게 생성하여 사용자에게 랜덤한 발판을 생성하는 것 처럼 보이게 하는 것.

Time.time

유니티 라이브러리에 내장되어 있음.
게임 시작 후 시간이 몇초 지났는지 출력하는 변수
즉 현재 시점으로 취급 가능

profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글