▣ 변수 설명
objectPrefab: 생성할 오브젝트의 프리팹을 Inspector에서 연결할 수 있는 변수입니다.
poolSize: 오브젝트 풀의 크기를 설정합니다. 한 번에 최대 몇 개의 오브젝트를 풀에 저장할지 결정합니다.
spawnXPosition: 오브젝트가 생성될 X 좌표를 설정하는 값입니다. 예를 들어 오른쪽에서 생성되도록 X 좌표를 설정할 수 있습니다.
minYPosition / maxYPosition: 오브젝트가 생성될 때 Y 좌표의 범위를 설정하는 값입니다. Y 좌표는 이 범위 내에서 랜덤 하게 결정됩니다.
leftBound: 오브젝트가 왼쪽으로 이동할 때 화면의 왼쪽 끝에 닿는 X 좌표입니다. 이 좌표를 넘어가면 오브젝트는 비활성화됩니다.
spawnInterval: 오브젝트가 생성되는 주기입니다. 이 값이 클수록 오브젝트가 생성되는 시간이 길어집니다.
moveSpeed: 오브젝트가 왼쪽으로 이동하는 속도입니다. 이 값이 클수록 오브젝트는 더 빨리 이동합니다.
timer: 오브젝트가 일정한 시간 간격으로 생성되도록 시간을 체크하는 변수입니다.
objectPool: 오브젝트 풀을 관리하는 List<GameObject>로, 미리 생성한 오브젝트들이 여기에 저장됩니다.
▣ 주요 함수 설명
Start()
게임이 시작될 때 호출됩니다.
오브젝트 풀을 초기화하고, poolSize만큼의 오브젝트를 미리 생성하여 비활성화된 상태로 오브젝트 풀에 저장합니다.
Update()
매 프레임마다 호출됩니다.
spawnInterval 주기마다 오브젝트를 풀에서 가져와 활성화하고, 활성화된 오브젝트가 화면의 왼쪽 끝에 도달하면 다시 비활성화하여 풀에 반환합니다.
SpawnObjectFromPool()
오브젝트 풀에서 비활성화된 오브젝트를 찾아서 다시 사용합니다.
오브젝트가 활성화될 때 Y 좌표는 minYPosition과 maxYPosition 사이의 랜덤 한 값으로 설정됩니다.
오브젝트가 활성화되면 오른쪽에서 출발하여 왼쪽으로 이동을 시작합니다.
ManageActiveObjects()
활성화된 오브젝트들을 순회하면서 각 오브젝트를 왼쪽으로 이동시킵니다.
Translate(Vector3.left * moveSpeed * Time.deltaTime)를 사용하여 일정 속도로 오브젝트를 왼쪽으로 이동시킵니다.
오브젝트가 leftBound 값보다 왼쪽으로 이동하면, 그 오브젝트를 비활성화하고 다시 풀에 반환합니다.
DeactivateObject(GameObject obj)
오브젝트가 화면의 왼쪽 끝에 도달했을 때, 해당 오브젝트를 비활성화하고 다시 오브젝트 풀에 반환합니다.
핵심 로직
오브젝트 풀링(Object Pooling): 오브젝트를 계속해서 생성하고 파괴하는 대신, 미리 오브젝트를 생성하고 필요할 때마다 재사용하여 성능을 최적화하는 기법입니다.
오브젝트 이동: 생성된 오브젝트는 Translate 메서드를 사용하여 일정한 속도로 왼쪽으로 이동합니다. 이는 매 프레임마다 호출되는 Update 함수 내에서 처리됩니다.
오브젝트 비활성화: 오브젝트가 화면의 왼쪽 끝에 도달하면 SetActive(false)로 오브젝트를 비활성화하고, 다시 풀에서 사용할 수 있도록 관리합니다.
'[ Unity ] > - 유니티 실습' 카테고리의 다른 글
유니티 Single RayCast, Multi RayCast (1) | 2024.09.14 |
---|---|
유니티 Animator, Animation, Blend Tree (1) | 2024.09.14 |
유니티 2D Collider (0) | 2024.09.13 |
유니티 2D 배경 스크롤링 (1) | 2024.09.12 |
유니티 코루틴 (3) | 2024.09.12 |
댓글