/* Unity - Introduction to Object Pooling */
public static ObjectPool SharedInstance;
public List pooledObjects;
public GameObject objectToPool;
public int amountToPool;
void Awake()
{
SharedInstance = this;
}
void Start()
{
pooledObjects = new List(); // pool ์์ฑ
GameObject tmp;
for(int i = 0; i < amountToPool; i++) // amountToPool๋งํผ object ์์ฑ
{
tmp = Instantiate(objectToPool);
tmp.SetActive(false);
pooledObjects.Add(tmp);
}
}
public GameObject GetPooledObject() // object๋ฅผ pool์์ ๊บผ๋ด์ค๋ ํจ์
{
for(int i = 0; i < amountToPool; i++) // List ์๋ถ๋ถ๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฒ์
{
if(!pooledObjects[i].activeInHierarchy) // ๋งจ ์์ ์๋ ์ค๋ธ์ ํธ๋ถํฐ ๋ฐํ
{
return pooledObjects[i];
}
}
return null;
}
/* ์ค๋ช
์์ pool์ ๋ค์ ๋ฃ์ ๋ SetActive(false); ๋ฅผ ํตํด deactive ํ๋ค๊ณ ์ฐ์ฌ์์ */
/* List๋ฅผ ๊ฒ์ํด์ ๊บผ๋ด์ค๋ ๋ฐฉ์๋ณด๋จ Stack์ ์ด์ฉํ ๊ตฌํ๋ฐฉ์์ด ๋ ํจ์จ์ ์ผ ๋ฏ? */
ObjectPool objectPool = new ObjectPool(CreateObject,
OnGetFromPool, OnReleaseToPool, OnDestroyPooledObject,
collectionCheck, defaultCapacity, maxSize);
// ์ค๋ธ์ ํธ ์์ฑ, ์ด๊ธฐํ, ํ์ฑํ, ์ ๊ฑฐ, ์์ธ์ฒ๋ฆฌ, ๊ธฐ๋ณธํฌ๊ธฐ, ์ต๋ํฌ๊ธฐ ์ง์
/* GameManager๋ฅผ ํ์ฉํ ๋ฐฐํฐ๋ฆฌ ๋ฐ ํญ์ฃฝ UI ๊ตฌํ */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
/* ๋ฐฐํฐ๋ฆฌ ๋ถ๋ถ ๋ณ์ */
public static bool onoff; // true : ์ผ์ง / false : ๊บผ์ง
public GameObject Target; // ์์ ๋ฑ ๋ถ๋น ์ค๋ธ์ ํธ
public static bool click; // ?
private Image battery;
public Sprite[] sprites;
public int MaxTime = 120;
public static float time = 0;
/* ํญ์ฃฝ UI ๋ณ์ */
int fireworkCount;
public GameObject[] Fireworks = new GameObject[3];
void Start()
{
SetBattery();
}
// Update is called once per frame
void Update()
{
UpdateBattery();
UpdateFirework();
}
void SetBattery()
{
time = MaxTime;
battery = GetComponent();
onoff = false;
Target.SetActive(false);
}
void UpdateBattery()
{
/* ๋ฐฐํฐ๋ฆฌ ๋น์จ์ ๋ฐ๋ฅธ UI ๋ณ๊ฒฝ */
if (time >= MaxTime * 0.8)
battery.sprite = sprites[0];
else if (time >= MaxTime * 0.6)
battery.sprite = sprites[1];
else if (time >= MaxTime * 0.4)
battery.sprite = sprites[2];
else if (time >= MaxTime * 0.2)
battery.sprite = sprites[3];
else if (time > 0)
battery.sprite = sprites[4];
else
battery.sprite = sprites[5];
/* ์์ ๋ฑ ๋ฐฐํฐ๋ฆฌ ์๋ชจ */
if (onoff && time > 0)
time -= Time.deltaTime;
else if (time < 0) // ๋ฐฐํฐ๋ฆฌ ์์ผ๋ฉด ๊บผ์ง๋๋ก
{
time = 0;
}
if (Input.GetKeyDown(KeyCode.F) || click) // ์์ ๋ฑ on/off ๋ณ๊ฒฝ ํ์ธ
{
onoff = !onoff;
Target.SetActive(onoff);
click = false;
}
}
void UpdateFirework()
{
fireworkCount = Player.firework_Count;
if (fireworkCount > 0)
{
Fireworks[0].gameObject.SetActive(true);
Fireworks[1].gameObject.SetActive(false);
if (fireworkCount > 1)
{
Fireworks[1].gameObject.SetActive(true);
Fireworks[2].gameObject.SetActive(false);
}
if (fireworkCount > 2)
Fireworks[2].gameObject.SetActive(true);
}
else
{
Fireworks[0].gameObject.SetActive(false);
Fireworks[1].gameObject.SetActive(false);
Fireworks[2].gameObject.SetActive(false);
}
}
}