728x90
오브젝트 풀링 구현 오브젝트 풀링의 구현에는 많은 방법이 있으니 찾아보고 본인이 사용하기 편한 방법을 사용하면 될 것 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectManager : MonoBehaviour
{
public GameObject car1Prefab;
public GameObject car2Prefab;
public GameObject car3Prefab;
public GameObject car4Prefab;
public GameObject car5Prefab;
public GameObject car6Prefab;
public GameObject car7Prefab;
public GameObject car8Prefab;
public GameObject car9Prefab;
GameObject[] car1;
GameObject[] car2;
GameObject[] car3;
GameObject[] car4;
GameObject[] car5;
GameObject[] car6;
GameObject[] car7;
GameObject[] car8;
GameObject[] car9;
GameObject[] targetPool;
void Start()
{
car1 = new GameObject[3];
car2 = new GameObject[3];
car3 = new GameObject[3];
car4 = new GameObject[3];
car5 = new GameObject[3];
car6 = new GameObject[3];
car7 = new GameObject[3];
car8 = new GameObject[3];
car9 = new GameObject[3];
Generate();
}
|
오브젝트 풀링을 사용하고 싶은 오브젝트의 Prefab을 저장하고 Start 함수에서 공간을 확보해준다.
- carXPrefab - 프리팹으로 저장된 오브젝트를 저장해주는 변수이다.
- carX - carXPrefab에 있는 오브젝트를 배열로써 저장해주는 변수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
void Generate()
{
for (int i = 0; i < car1.Length; i++)
{
car1[i] = Instantiate(car1Prefab);
car1[i].SetActive(false);
}
for (int i = 0; i < car2.Length; i++)
{
car2[i] = Instantiate(car2Prefab);
car2[i].SetActive(false);
}
for (int i = 0; i < car3.Length; i++)
{
car3[i] = Instantiate(car3Prefab);
car3[i].SetActive(false);
}
for (int i = 0; i < car4.Length; i++)
{
car4[i] = Instantiate(car4Prefab);
car4[i].SetActive(false);
}
for (int i = 0; i < car5.Length; i++)
{
car5[i] = Instantiate(car5Prefab);
car5[i].SetActive(false);
}
for (int i = 0; i < car6.Length; i++)
{
car6[i] = Instantiate(car6Prefab);
car6[i].SetActive(false);
}
for (int i = 0; i < car7.Length; i++)
{
car7[i] = Instantiate(car7Prefab);
car7[i].SetActive(false);
}
for (int i = 0; i < car8.Length; i++)
{
car8[i] = Instantiate(car8Prefab);
car8[i].SetActive(false);
}
for (int i = 0; i < car9.Length; i++)
{
car9[i] = Instantiate(car9Prefab);
car9[i].SetActive(false);
}
}
|
Generate 함수를 통해서 미리 선언해놓은 배열의 크기만큼 프리팹들을 넣어준다. 오브젝트 풀을 만드는 과정이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
public GameObject MakeObject(string type)
{
switch (type)
{
case "car1":
targetPool = car1;
break;
case "car2":
targetPool = car2;
break;
case "car3":
targetPool = car3;
break;
case "car4":
targetPool = car4;
break;
case "car5":
targetPool = car5;
break;
case "car6":
targetPool = car6;
break;
case "car7":
targetPool = car7;
break;
case "car8":
targetPool = car8;
break;
case "car9":
targetPool = car9;
break;
}
for (int i = 0; i < targetPool.Length; i++)
{
if (!targetPool[i].activeSelf)
{
targetPool[i].SetActive(true);
return targetPool[i];
}
}
return null;
}
}
|
이제 필요할 때마다 오브젝트를 쓰기 위하여 MakeObject 함수를 만들어서 인자로 받은 type에 따른 오브젝트를 생성시켜준다.
728x90
'Project > 우다다다 고영희' 카테고리의 다른 글
[우다다다 고영희] Unity: 자동차 오브젝트 움직이기 (0) | 2020.05.26 |
---|---|
[우다다다 고영희] Unity: UI 화면 구성하기 (0) | 2020.05.25 |
[우다다다 고영희] Unity: 무한 배경 만들기 (0) | 2020.05.22 |
[우다다다 고영희] Unity: 플레이어 움직이기 (0) | 2020.05.21 |
[우다다다 고영희] Aseprite: 스프라이트 만들기 (0) | 2020.05.20 |