Tutorial Unity - Transform - IMedia9 - Education

Breaking

Tuesday, January 8, 2013

Tutorial Unity - Transform



Halo, semuanya? Apa kabar? Hari ini gue bakal lanjutin lagi tutorial script Unity dengan tema Transform. Tahu transform kan? Mereka itu adalah mobil yang bisa berubah jadi robot. Bener banget. Cerdas lo semuanya! *Wataaaw!*


Nah, di dalam Unity, semua GameObject punya panel transform yang menunjukkan lokasi bin posisi mereka yang bertipe Vector3 atau (X,Y,Z). Dan script dalam Unity bisa ngeakses mereka dengan berbagai cara yang berbeda. Ayo, gue tunjukin!
Pertama-hiji, lo bikin Project baru. Pasti udah pada bisa kan? Next, lo bikin GameObject dengan cara klik menu GameObject -> Create Empty dan kasih nama GameObjectGue.



Terus lo bikin sebuah Cube alias kubus dengan cara klik menu GameObject -> CreateOther -> Cube. Kasih nama CubeGue.



Jangan protes soal namanya! Lo ikutin aja! Kalo protes, gue wataaaw!!



Selanjutnya, lo atur-atur dah tuh MainCamera biar ngeliatnya rada enakan dikit.



Next, lo bikin deh sebuah script C# dengan nama ScriptGue.



Habis itu lo ketikkan script seperti di bawah ini:

1:  using UnityEngine;  
2:  using System.Collections;  
3:  public class ScriptGue : MonoBehaviour {  
4:   // Use this for initialization  
5:   void Start () {  
6:   }  
7:   // Update is called once per frame  
8:   void Update () {  
9:   transform.Rotate(0, 1, 0);  
10:   }  
11:  }  

Kalo udah, lo klik tombol PLAY!



Jalan? Belum. Kok bisa? Naaaah, udah lupa yaaaa? Padahal baru kemarin gue post. Baca dulu postingan gue kemarin soal dasar script di Unity gih! Gimana sih?! Baca dulu: Tutorial Unity - Basic Script Script lo tuh BELUM AKTIP BRO! BELUM AKTIP! Makanya aktipin dulu dong! Drag aja langsung ke CubeGue.



Terus coba lo klik Play. Gimana? Udah keliatan kubusnya muter-muter di sumbu Y?



Keren kan? Naaah, tapi bukan itu tujuan tutorial gue sekarang. Terus apa dong? Coba deh, lo remove script yang udah lo pasang di Cube.



Terus lo coba pasang di GameObjectGue.



Klik Play dan liat apa yang terjadi. Aneh? Tapi nyata kan? Script yang sama, dipasang di GameObject yang berbeda bisa jadi hasilnya juga berbeda. Kenapa? Karena meski pun SEBENERNYA GameObjectGue itu muter2 di sumbu Y, tapi dia nggak punya objek kubus. Jadi lo kalo mau mastiin apakah bener GameObjectGue itu muter, lo kudu make miksroskop!!

Kalo begitu sebuah script hanya tergantung di GameObject tertentu dong? Bisa ya, bisa nggak. Tergantung sebutuh apa sih lo terhadap script tadi. Dalam kasus ini, bisa nggak Script yang dipasang di GameObjectGue tetep bisa memutarkan si CubeGue yang nggak dipasangin Script? Jawabannya: BISA!!

Ada 2 cara untuk melakukan hal itu. Cara pertama adalah lo kudu edit Script lo jadi kayak gini:

1:  using UnityEngine;  
2:  using System.Collections;  
3:  public class ScriptGue : MonoBehaviour {  
4:   GameObject CubeYangMana;  
5:   // Use this for initialization  
6:   void Start () {  
7:   CubeYangMana = GameObject.Find("CubeGue") as GameObject;  
8:   }  
9:   // Update is called once per frame  
10:   void Update () {  
11:   CubeYangMana.transform.Rotate(0, 1, 0);  
12:   }  
13:  }  

Udah gitu, tinggal klik Play aja. Muter kan? Atau cara kedua. Yang lebih gampang. Lo edit deh Script lo jadi kayak gini:

1:  using UnityEngine;  
2:  using System.Collections;  
3:  public class ScriptGue : MonoBehaviour {  
4:   public GameObject CubeYangMana;  
5:   // Use this for initialization  
6:   void Start () {  
7:   }  
8:   // Update is called once per frame  
9:   void Update () {  
10:   CubeYangMana.transform.Rotate(0, 1, 0);  
11:   }  
12:  }  

Prefix PUBLIC dalam script C# akan secara ostosmastis membuat variabel yang lo bikin tampil di Unity editor. Jadi lo tinggal drag aja si CubeGuenya. Atau klik tombol browsenya juga bisa.



Terus, lo klik Play lagi deh. Mantaaaap! Mengetahui di mana Script di pasang, untuk siapa dan manggil apa adalah hal terpenting dalam pemrograman game. Yah, menurut gue sih begitu. Kalau salah ya... berarti bukan gitu, hahaha. Sampai ketemu lagi kapan-kapan.

4 comments:

  1. Gan, tanya, kenapa script saya yang ini padahal prefabsnya banyak tapi yang terdeteksi hanya 1 yg rotate.

    using UnityEngine;
    using System.Collections;
    public class RotationGlobal : MonoBehaviour
    {GameObject Cubetarget;
    void Start (){
    Cubetarget = GameObject.Find("cubes/Cubism");}
    void Update (){
    Cubetarget.transform.Rotate (0, 1, 0);}
    }

    ReplyDelete
  2. Itu karena variabelnya memang cuma satu: GameObject Cubetarget. Jadi cuma ada satu Cubetarget. Begitu dikasih fungsi Find() yang kedetek cuma yang pertama doang. Kalao mau semua kasih array variabelnya, jadi gini: GameObject[] Cubetarget; Terus atur nama prefabnya jangan pada sama, berurutan dan panggil fungsi transform lewat for. Misal:

    void Start(){
    //pura2nya prefab ada 10
    for (i = 0: i<10; i++){
    Cubetarget[i] = GameObject.Find("cube"+i.ToString());
    }
    }

    void Update(){
    for (i = 0: i<10; i++){
    Cubetarget[i].transform.Rotate(0,1,0);
    }
    }

    Kalo scriptnya ada yang salah ya benerin aja sendiri, hehehe. Tapi kurang lebih gitulah

    ReplyDelete
  3. gan mau nanya itu kan buat muter, kalo bergerak horizontal naik turun gmna scriptnya? thnxs

    ReplyDelete
    Replies
    1. wah, kalao bergeraknya horizontal naik turun saya nggak tahu, soalnya itu sama susahnya dengan bikin script vertical ke kiri dan ke kanan

      Delete

Carousel