Upload
dimas-saputra
View
212
Download
0
Embed Size (px)
DESCRIPTION
test
Citation preview
7/18/2019 a
1/4
using UnityEngine;using System.Collections;using System.Collections.Generic; //Untuk ngeakses Listpublic class pooling : MonoBehaviour {
[System.Serializable]public class PooledObject{
public GameObject GO;public GameObject CopiedGO;//Variable ini berguna sebagai Tempor
ary variable.//Soalnya kalo misalkan variable GO diisi sama Prefabs, maka yan
g kesimpen di ObjectPool itu adalah prefabs,//BUkan Copy-annyapublic List ObjectPool = new List (); //
ini Array buat nyimpen Object yang mau di "pooling"
//fungsi ini berguna buat ngeaktifin and nge-nonaktifin object//fungsi ini yang bakal di eksekusi sama kita. 3 Variable diatas
cuman buat inspector aja. Jadi kita bisa ngeliat//Object mana yang lagi di poolingpublic GameObject ActiveObject(GameObject go, Vector3 pos,Quater
nion rot){
//Sebelumnya kita harus mastiin kalo Input di fungsi ini
sama seperti GO //Kenapa gak langsung aja ?//soalnya kalo GO itu diisi sama prefabs, artinya kita b
akal ngerubah prefabs//And Kalo udah ngerubah Prefabs, kita gak bisa nge-set
ulang lagi.//Semoga ngerti :v//Kalo 'GO' sama kayak goif (go == GO) {
//Kalo udah sama kita buat copy-an dari GO//sebelumnya pastiin dulu kalo CopiedGO gak koso
ngif(CopiedGO != null)
{ //Artinya disini asumsi kita kalo CopiedGO itu udah berisi sesuatu kan
//Ok sekarang kita proses CopiedGO//Sekarang kita check apakah Array Objec
tPool udah ada isiniya atau belum (jaga-jaga aja sih)if(ObjectPool.Count > 0){
//Kalo Udah ada isinya kita looping array
for(int i=0; i
7/18/2019 a
2/4
ri lagi object yang sedang gak aktif kan?//Nah caranya ki
ta check ke semua object dengan menyamakan posisi 'i' dengan banyaknya object yang ada di Array
if(i==ObjectPool.Count-1)
{//Kalo m
isalkan 'i' udah sampe posisi array terakhir artinya object di array tersebut aktif semua kan?
//Nah kita masukkin lagi object yang baru ke Array tersebut
CopiedGO= (GameObject)Instantiate(go,pos,rot);
ObjectPool.Add(CopiedGO);
//Dan terakhir kita keluar dari fungsi ini dengan hasilnya adalah
return CopiedGO;
}}//Kalo Lagi gak aktif ma
ka kita aktifin
else{//Sebelumnya kit
a set dulu posisi sama rotasi object yang dimaksud//Supaya sesuai
dengan variable input yang kita masukkanObjectPool[i].tr
ansform.position = pos;ObjectPool[i].tr
ansform.rotation = rot;//baru kita Akti
fkan objectnyaObjectPool[i].Se
tActive(true); //setelah itu kita Stop proses semua ini dengan 'menghasilkan' object
return ObjectPool[i];
}}
}//Kalo gak ada, yah kita isi lagielse{
ObjectPool.Add(CopiedGO);}
}//Kalo Kosong artinya kita isi sama copy-an dari
GOelse{
CopiedGO = (GameObject)Instantiate(go,pos,rot);
//trus kita masukkin ke array 'ObjectPool'
ObjectPool.Add(CopiedGO);
7/18/2019 a
3/4
}}//Kalo Proses di atas nggak ngehasilin (return) apa-apa,
kita 'fallback' ke CopiedGO//Walaupun CopiedGO ini Null, yah itulah yang bakal di h
asilin fungsi inireturn CopiedGO;
}}
public List ObjectPool = new List();public static pooling accessPoint;
void Start(){
accessPoint = this;}
//Nah sekarang untuk mempermudah eksekusi,,, kita bikin lagi fungsi barupublic GameObject InstantiateObject(GameObject GO, Vector3 position, Qua
ternion rotation){
//disini tugas kita adalah mengeksekusi 'ActiveObject' di tiap item di ObjectPool kan
//jadi sebelumnya kita harus patiin dulu kalo Array tersebut ada isinyaif (ObjectPool.Count > 0) {
//Sekarang kalo ObjectPool Ada isinya gimana?
//Artinya kita tinggal eksekusi'ActiveObject' yang ada di tiap 'PooledObject' di array
//Oh yah sebelumnya bikin dulu Temporary variable gan buat nyimpen Object hasil dari proses 'ActiveObject'
GameObject temp = null;//Nah baru kita masuk kedalam ar
ray
for (int i=0; i
7/18/2019 a
4/4
PO.GO = GO;
ObjectPool.Add (PO);
//Kemudian kita hasilin sesuatu dari proses ini
//Sebelumya kita eksekusi dulu 'ActiveObject' di class 'PooleObject'
GameObject newObj = PO.ActiveObject (GO, position, rotation);
//Nah disini kita bisa kasih sesuatu ke object baru tersebut
//seperti 'AddComponent' atau yang lainya
//contoh kali ini kita mau object baru ini jadi child dari GameManager
newObj.transform.parent = transform;
//Dan akhirnya kita keluar dari fungsi ini
return newObj;
}
}
}return temp;
}//Kalo Gak ada isinya kita bikin lagi 'PoolObject' yang baruelse {
PooledObject PO = new PooledObject ();
PO.GO = GO;ObjectPool.Add (PO);
//Kemudian kita hasilin sesuatu
dari proses ini //Sebelumya kita eksekusi dulu 'ActiveObject' di class 'PooleObject'
GameObject newObj = PO.ActiveObject (GO, position, rotation);
//Nah disini kita bisa kasih sesuatu ke object baru tersebut
//seperti 'AddComponent' atau yang lainya
//contoh kali ini kita mau object baru ini jadi child dari GameManager
newObj.transform.parent = transform;
//Dan akhirnya kita keluar darifungsi ini
return newObj;}
}}
//BERES DEHHH :D// tinggal di cobain deh :D