Blogging for sharing, sekedar berbagi ilmu dan pengalaman

Membuat Button Touch Screen di Unity Berbasis GUITexture (bagi-bagi asset gratis)

September 26, 2013 Posted by Ahmad Saifuddin Azhar , 54 comments
Gambar button play


Setiap aplikasi hampir selali membutuhkan button, hingga seakan hampir tidak ada aplikasi yang tidak memiliki button, kecuali aplikasi yang berbasis command line. Begitu juga dengan game, rasanya keberadaan button menjadi kebutuhan vital dari hampir seluruh game. Pada console-console tertentu button sudah di handle dan terintegrasi dengan joystick pada masing-masing console. Namun bagaimana dengan perangkat mobile yang berbasis touch screen? Ya.. Kita tahu bahwa perangkat ini hampir tidak memiliki button secara fisik, sehingga kita perlu membuat button virtual sendiri yang dapat mendeteksi input berupa sentuhan jari user.

Pada artikel kali ini saya akan bagi-bagi asset Unity berupa button touch screen yang saya buat beberapa hari yang lalu untuk keperluan project yang sedang saya kerjakan. Button ini dapat digunakan pada Unity Free dan berjalan pada perangkat touch screen seperti android, iphone, dsb. Asset button ini juga sudah mensuport multi touch atau sentuhan lebih dari satu jari user, sehingga cocok digunakan pada game-game yang membutuhkan gerak cepat dan multi touch. Button ini berbasis GUITexture sehingga lebih mudah dalam pengaturannya jika dibandingkan dengan gui.Button. Asset button ini dapat di download disini.

Berikut adalah tutorial singkat bagaimana menggunakan asset ini, untuk tutorial selengkapnya sudah saya sertakan dalam paket asset. Berikut adalah step by step cara penggunaan button :

Untuk membuat button lakukan drag & drop prefab Touch Screen Button ke dalam scene. 
 
Drag and drop prefab Touch Screen Button

Dan hasilnya adalah seperti pada gambar di bawah :

Tampilan default  Button
 
Kemudian lakukan pengaturan letak button. Pengaturan button sama dengan pengaturan GUITexture pada umumnya. Baca : Dokumentasi Unity GUITexture

Pengaturan letak button seperti pengaturan GUITexture biasa

Lakukan juga pengaturan texture. Berikan texture default button dan texture ketika button disentuh

Drag & drop texture button

 
Lakukan scripting. Untuk mendapatkan status button suatu kelas harus mengimplementasikan interface IButtonListener
Contoh :
public class MainMenu : MonoBehaviour, IButtonListener {
  //some code here
}

Lakukan inisialisasi button dan lakukan register listener melalui method RegisterListener dengan parameter IbuttonListener yang merupakan interface untuk mendengarkan button.

Contoh :
private Button buttonPlay
void Start () {
  buttonPlay = this.transform.FindChild("Button Play").GetComponent<Button>();
  buttonPlay.RegisterListener(this);
}

Status button akan dikirimkan pada method OnButtonStateChange yang merupakan method implementasi dari interface IButtonListener. Method ini memiliki dua parameter, changedButton adalah button yang mengalami perubahan fase, buttonPhaseId adalah fase yang terjadi pada button

Contoh :

public void OnButtonStateChange(Button changedButton, int buttonPhaseId) {
 if (changedButton == buttonPlay) {
    if (buttonPhaseId == Button.PhaseId.ButtonTouchBegan) {
   //do something here
   }else if (buttonPhaseId == Button.PhaseId.ButtonTouchEnded) {
   //do something here
   }
  }
}

Keterangan PhaseId :
ButtonTouchBegan
Sentuhan ke button dimulai, hanya terjadi 1x dalam 1 sentuhan yaitu pada awal sentuhan

ButtonTouchEnded
Sentuhan ke button diakhiri, hanya terjadi 1x dalam 1 sentuhan yaitu pada akhir sentuhan

ButtonTouchCanceled
Sentuhan ke button dibatalkan, terjadi ketika jari bergeser keluar area button

ButtonTouchStationary
Terjadi ketika sentuhan ditahan, terjadi berulangkali dalam 1 fase sentuhan tergantung lama sentuhan dan update rate

ButtonTouchMoved
Terjadi ketika sentuhan ditahan dan jari bergeser di area button, terjadi berulangkali dalam 1 fase sentuhan tergantung lama sentuhan dan update rate

Button touch screen ini saya bagikan secara gratis tanpa pungutan royalti sedikitpun dan dapat Sobat gunakan untuk mengembangkan project berbayar sekalipun. Namun meskipun gratis tetap patuhi rule yang saya berikan ya, diantaranya untuk tidak menghapus credit author, dan dilarang keras untuk menjual kembali asset yang saya bagikan secara gratis ini.


Mungkin sekian dulu apa yang saya sampaikan, kurang lebihnya saya mohon maaf. Terima kasih sudah mampir dan jangan lupa di follow ya blog ini di twitter @duniadigit. Ok.. cukup sekian, tetap semangat, dan terus berkarya ^^


54 comments:

  1. saya mau tanya asset button kok gak bisa dibuka saya pake windows, apa assetnya untuk mac os?

    ReplyDelete
  2. Loh bisa kok harusnya... Assetnya saya buat pake Unity 4.1.3f3, jadi untuk membukanya harus pake unity dengan versi yang sama atau di atasnya. Asset ini bukan buat mac OS, tapi buat perangkat2 touch screen kayak android. Gatau klo di iOS bisa jalan ato nggak saya jg blm nyoba.. Kalo masi error silahkan di capture pesan errornya dan di share disini... :)

    ReplyDelete
  3. This comment has been removed by a blog administrator.

    ReplyDelete
    Replies
    1. Wah gatau gan... Segitu panjangnya scriptnya... Gabisa bayangin saya gan... :D

      Delete
  4. Bagi ilmu tutorial tentang AR Vuforia animasi dong gan...

    ReplyDelete
  5. bang, kalo bikin action di AR, misal ada mark gambar gt ya di buku gitu,,, trus ada pilihan 2 tombol, 1 icon rotate kanan, 1 icon rotate kiri... nah masing-masing tombol kalau ditutup pake tangan gt trus jadi rotate juga objek di ARcameranya gt.. gmna ya ? :)

    ReplyDelete
    Replies
    1. Jujur saya gak paham nih, terutama bagian "masing-masing tombol kalau ditutup pake tangan gt trus jadi rotate juga objek di ARcameranya". Kenapa kamera ARnya harus diputar? Seharusnya kamera AR gak usah diputar, biar objeknya yang mutar.

      Delete
    2. Mas bro, itu tutorialnya ada gak?
      Yang objeknya mutar2 diatas marker dengan otomatis,,
      trus kalo di objeknya di klik, lgsg pindah ke objek yg lain (lebih dari 1 objek)..

      Cek chat di hangouts google+ dong, hehe

      Delete
    3. Silahkan googling Transform.Rotate() buat muter2 objek. Kalo masalah select object biasanya pake Ray, silahkan di googling aja :)

      Delete
  6. Bang numpang tanya...
    Untuk script:
    buttonPlay = this.transform.FindChild("Button Play").GetComponent< Button >();
    Kok ke deteksi NullReference yaa..???
    mohon pencerahannya :(

    ReplyDelete
    Replies
    1. Itu yang null buatan agan sendiri apa sample scene saya?
      Kalo sample scene saya nanti saya cek lagi. Yang jelas fungsi Find Child itu mencari object dalam child. Kemungkinan object yang bernama 'Button Play' tidak ada sehingga menghasilkan null reference. Silahkan tanya lagi kalo masi bingung :)

      Delete
  7. Sample Scene punya abang,,
    nhah sepertinya begitu, cara nambah button play gimana bang..???gui texture kah?

    ReplyDelete
    Replies
    1. Lho iya ta sample scene saya error? Coba nanti saya cek lagi..

      Delete
  8. Bang biasanya kalau cari tutorial unity di situs apa???
    lagi butuh banget nih... :(

    ReplyDelete
    Replies
    1. Ini saya list beberapa tutorial yang mungkin membantu. Silahkan diikuti salah satu :)
      http://duniadigit.blogspot.com/2013/08/kumpulan-link-tutorial-seputar-game.html

      Delete
  9. gimana bang udah bisa sample scene nya?

    ReplyDelete
    Replies
    1. Loh itu yang sample scene udah saya coba lancar di HP saya. Saya malah bingung apa yang mesti di rubah :D

      Delete
  10. Ok tak coba e lagi,,
    Terus kalau mau buat tampilan yang bisa menyesuaikan layar dengan semua HP gimana bang?

    ReplyDelete
    Replies
    1. Ini saya pernah buat responsive GUITexture. Ini download script ini https://drive.google.com/file/d/0B9GfKJ2Jm2P7UFFreGZwSF9hVDA/edit?usp=sharing
      Tinggal masukin input resolusi layar pas develop game berapa. Habis itu tinggal di jalanin di mana aja bisa ngikut.. :)

      Delete
  11. ini script yang saya pakai bang... :(

    using UnityEngine;
    using System.Collections;

    public class MainMenu : MonoBehaviour, IButtonListener {

    private Button buttonPlay;
    private GUIText buttonStatus;

    // Use this for initialization
    void Start () {
    buttonPlay = this.transform.FindChild("Button Play").GetComponent>Button>();
    buttonStatus = this.transform.FindChild("Button Status").guiText;

    buttonPlay.RegisterListener (this);
    }

    public void OnButtonStateChange (Button changedButton, int buttonPhasedId){
    if (changedButton == buttonPlay){
    if (buttonPhasedId == Button.PhaseId.ButtonTouchBegan){
    buttonStatus.text = changedButton.name + " : " + "mulai sentuhan";
    Debug.Log (changedButton.name +" : "+"mulai sentuhan");
    } else if (buttonPhasedId == Button.PhaseId.ButtonTouchEnded){
    buttonStatus.text = changedButton.name +" : "+"akhir sentuhan";
    Debug.Log (changedButton.name +" : "+"akhir sentuhan");
    }
    }
    }
    // Update is called once per frame
    void Update () {

    }
    }

    ReplyDelete
  12. Siph. makasih bang :)
    Yang button touch screen refresh dong bang. biar bisa jalan di unity ane..
    Makasih banyak bang azhar :)

    ReplyDelete
    Replies
    1. Lho itu sudah jalan. Runningnya harus di perangkat touch screen baru jalan. Gak bisa di klik pake mouse. Dari judulnya kan button touch screen :)

      Delete
  13. Bang minta tutorial yang responsive gui dong...
    yang bisa buat semua hape
    Ane nyoba gak bisa nih :(

    ReplyDelete
    Replies
    1. Mohon maaf atas lamanya respon. Tepat tanggal 20 sampai 21 Januari saat agan buat komen ini saya pas lagi maju seminar tugas akhir. Jadi gak sempat bales.. Hahahaha...
      Ini saya baru buat tutorial + asset responsive GUITexture. Bisa agan baca sendiri disini http://duniadigit.blogspot.com/2014/02/membuat-responsive-guitexture-di-unity.html

      Delete
  14. bang ane pengen bikin button di unity, nah gunanya button itu untuk ngegant object. jd 1 marker beberapa object. cara ngerubah objectnya itu dengan cara button. itu gmana ya bang? ane gak ngerti sama sekali bang.
    mohon pencerahan bang buat TA ini. hehehehehehe :)

    ReplyDelete
  15. mas saya mau nanya dong
    saya menaruh coding untuk memanggil suatu scene di bagian //do something here di method OnButtonStateChange
    ketika dicoba, sudah muncul buttonnya namun ketika button nya ditouch tidak ada yg terjadi mas
    itu kenapa ya? ato saya salah menaruk codingnya?

    ReplyDelete
    Replies
    1. udah di registerListener belum?? button.RegisterListener(this). Klo belum ya g akan di panggil OnButtonStateChange

      Delete
  16. sudah ko mas di method start() kan? buttonPlay.RegisterListener(this);

    oiya script yg dijelaskan diatas itu dibuat di file baru kan mas? kemudian dimasukkan kedalam touch screen button yg ada di scene nya kan?

    ReplyDelete
  17. Mohon maaf atas lamanya respon. Yup.. dibuat di file baru, kemudian ditaruh di GUITexture aja.

    ReplyDelete
  18. mas, gimana caranya play animasi setelah menekan tombol'nya ?, saya udah coba pke animation.Play(); & animation.Play("coba") tapi ko ga jalan y animasinya

    ReplyDelete
    Replies
    1. animation.Play("coba") itu biasa di pake di unity lama, sebelum unty 4. Mulai unity 4 disarankan untuk menggunakan animator. Silahkan googling dengan keyword 'animator FSM unity tutorial'. Dengan cara play kurang lebih animator.setBool("run", true). YAng jelas jauh lebih canggih daripada model lama..

      Delete
    2. saya udah coba yg SetBool itu ko ga bisa jalan ya animasinya mas?

      pertama saya deklarasiin --> public Animator anim;
      trus saya GetComponent --> anim = GetComponent();

      nah dibagian //do something here saya setbool --> anim.SetBool("play",true);


      tapi ga jalan pas saya touch button nya mas
      ada yg kurang ato ada yg salah?

      Delete
    3. Itu bener script anim.SetBool("play",true); sudah di eksekusi??
      Kalau sudah pastikan juga desain animatornya bener. Soalnya kalo salah ya gak bisa... Sayangnya saya belum buat tutorial bikin animasi. Hehheheheheehe

      Delete
  19. Makasih tutorialnya mas, sangat membantu. Udah coba dan sukses :)
    Tapi kalo di deviceku muncul noise warna ijo nutupin hampir separuh screen gini kira-kira kenapa ya?
    SS: http://s1371.photobucket.com/user/erastd/media/2014_07_17_211305_zps43a5c34e.png.html

    ReplyDelete
    Replies
    1. Wah.. kurang tau saya... Kalo menurut saya sih itu versi vuforia nya yang g cocok sama unity. Ato mungkin devicenya yang g cocok. Coba di otak atik misal pake vuforia versi yg lebih baru ato gmn. Dicoba juga pake device yang berbeda

      Delete
  20. Mas saya mau tanya, saya awam dengan pemrograman ini, sebelum saya liat tutorial di blognya mas, saya juga pernah membuat buttontouch tapi hasilnya pas saya coba didevice itu buttonya kalo ditouch sekali seperti berulang-ulang juga kalo saya buat button discene berbeda tapi posisi buttonnya sama itu yang berfungsi button yang dihalaman sebelumnya kenapa ya mas? kalo saya liat scrip diatas yang masnya buat ternyata scrip saya ada yang kurang yang ini :
    }else if (buttonPhaseId == Button.PhaseId.ButtonTouchEnded) {
    //do something here
    }

    apa karena saya kurang scrip diatas ini ya mas"


    Scrip yang saya buat seperti ini :
    if (changedButton == buttonUrl) {
    Application.OpenURL("http://www.google.com");}

    ReplyDelete
    Replies
    1. Yup... karena kurang script itu. Karena unity akan mendeteksi sentuhan berulang-ulang, yaitu setiap frame. Maka Anda harus menentukan sendiri fase sentuhan yang dibutuhkan, apakah touch start, touch end, dsb

      Delete
  21. mas supaya gui texturenya ngikutin kamera gmana caranya? saya udah nyoba di child in gui texturenya ke kamera tpi tetep ga bsa

    ReplyDelete
    Replies
    1. Maksudnya ngikutin kamera gimana ya? ini g perlu dijadikan child. Silahkan baca di doc nya unity ttg GUITexture http://docs.unity3d.com/Manual/class-GuiTexture.html

      Delete
  22. Thanks untuk tutorial dan free assetnya, sangat bagus sekali
    Saya tunggu tutorial berikutnya khususnya dalam pembuatan game dengan Unity3D. Top Markotop....ijin download :)

    ReplyDelete
  23. maaf mau tanya, klo membuat multiobjek dngan menggunakan touch screen button gmn ya?

    ReplyDelete
  24. maaf mau tanya. kalau membuat multi objek menggunakan touch screen button gmn ya?

    ReplyDelete
  25. Gan klo buat tombol loncat di android gimana ya?,jika disentuh bisa loncat. Klo dengan key di pc mah saya bisa gan. Cuman script yg buat membaca "pas disentuh" itu saya blom tau. Gimana ya gan tolong di bantu??

    ReplyDelete
  26. mas mau tanya kalo button touch lewat kamera sensor bagaimana. ga main di android. mohon infonya mas

    ReplyDelete
  27. minta tutorial lengkapnya mas untuk button touch tetapi tidak lewat android melainkan lewat kamera sensornya mas. kalo bisa contohin pake kinect xbox

    ReplyDelete
  28. Mas mau tanyan seputar AR ni. Mohon bantuannya ya. Saya buat AR objeknya udah muncul saat disorot kamera tapi objek itu tidak bergerak. Mau saya saat layar HP di sentuh objek yang muncul itu bergerak . Itu gimana ya cara buatnya . Trimaksih

    ReplyDelete
  29. mas kok gak bisa di download ya?

    ReplyDelete
  30. mas ada tutorial untuk play stop pause animasi dan rotate object?

    ReplyDelete
  31. Mas klo mau buat button informasi masi d dalam objek 3d nya gmna mas? Saya buat AR

    ReplyDelete
  32. Mas say mau tanya,saya kan buat AR trus rencana pas objek 3D nya d scan kluar objek 3D trus d dalam objek 3D itu terdapat button informasi bila d tekan itu bagaimana cara nya mas? Tolong bantu mas

    ReplyDelete
  33. gan bisa bagi script rotasi dan zoom aumented reality?

    ReplyDelete