Documenta

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