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.
Dan hasilnya adalah seperti pada
gambar di bawah :
Kemudian lakukan pengaturan letak
button. Pengaturan button sama dengan pengaturan GUITexture pada
umumnya. Baca :
Dokumentasi Unity GUITexture
Lakukan juga pengaturan texture.
Berikan texture default button dan texture ketika button disentuh
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 ^^
Artikel yang mungkin berhubungan :
saya mau tanya asset button kok gak bisa dibuka saya pake windows, apa assetnya untuk mac os?
ReplyDeleteLoh 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... :)
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteWah gatau gan... Segitu panjangnya scriptnya... Gabisa bayangin saya gan... :D
DeleteBagi ilmu tutorial tentang AR Vuforia animasi dong gan...
ReplyDeleteloh totorial AR kan dah adadi blog ini :)
ReplyDeletebang, 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 ? :)
ReplyDeleteJujur 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.
DeleteMas bro, itu tutorialnya ada gak?
DeleteYang 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
Silahkan googling Transform.Rotate() buat muter2 objek. Kalo masalah select object biasanya pake Ray, silahkan di googling aja :)
DeleteBang numpang tanya...
ReplyDeleteUntuk script:
buttonPlay = this.transform.FindChild("Button Play").GetComponent< Button >();
Kok ke deteksi NullReference yaa..???
mohon pencerahannya :(
Itu yang null buatan agan sendiri apa sample scene saya?
DeleteKalo 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 :)
Sample Scene punya abang,,
ReplyDeletenhah sepertinya begitu, cara nambah button play gimana bang..???gui texture kah?
Lho iya ta sample scene saya error? Coba nanti saya cek lagi..
DeleteBang biasanya kalau cari tutorial unity di situs apa???
ReplyDeletelagi butuh banget nih... :(
Ini saya list beberapa tutorial yang mungkin membantu. Silahkan diikuti salah satu :)
Deletehttp://duniadigit.blogspot.com/2013/08/kumpulan-link-tutorial-seputar-game.html
gimana bang udah bisa sample scene nya?
ReplyDeleteLoh itu yang sample scene udah saya coba lancar di HP saya. Saya malah bingung apa yang mesti di rubah :D
DeleteOk tak coba e lagi,,
ReplyDeleteTerus kalau mau buat tampilan yang bisa menyesuaikan layar dengan semua HP gimana bang?
Ini saya pernah buat responsive GUITexture. Ini download script ini https://drive.google.com/file/d/0B9GfKJ2Jm2P7UFFreGZwSF9hVDA/edit?usp=sharing
DeleteTinggal masukin input resolusi layar pas develop game berapa. Habis itu tinggal di jalanin di mana aja bisa ngikut.. :)
ini script yang saya pakai bang... :(
ReplyDeleteusing 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 () {
}
}
Siph. makasih bang :)
ReplyDeleteYang button touch screen refresh dong bang. biar bisa jalan di unity ane..
Makasih banyak bang azhar :)
Lho itu sudah jalan. Runningnya harus di perangkat touch screen baru jalan. Gak bisa di klik pake mouse. Dari judulnya kan button touch screen :)
DeleteBang minta tutorial yang responsive gui dong...
ReplyDeleteyang bisa buat semua hape
Ane nyoba gak bisa nih :(
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...
DeleteIni saya baru buat tutorial + asset responsive GUITexture. Bisa agan baca sendiri disini http://duniadigit.blogspot.com/2014/02/membuat-responsive-guitexture-di-unity.html
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.
ReplyDeletemohon pencerahan bang buat TA ini. hehehehehehe :)
mas saya mau nanya dong
ReplyDeletesaya 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?
udah di registerListener belum?? button.RegisterListener(this). Klo belum ya g akan di panggil OnButtonStateChange
Deletesudah ko mas di method start() kan? buttonPlay.RegisterListener(this);
ReplyDeleteoiya script yg dijelaskan diatas itu dibuat di file baru kan mas? kemudian dimasukkan kedalam touch screen button yg ada di scene nya kan?
Mohon maaf atas lamanya respon. Yup.. dibuat di file baru, kemudian ditaruh di GUITexture aja.
ReplyDeletemas, gimana caranya play animasi setelah menekan tombol'nya ?, saya udah coba pke animation.Play(); & animation.Play("coba") tapi ko ga jalan y animasinya
ReplyDeleteanimation.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..
Deletesaya udah coba yg SetBool itu ko ga bisa jalan ya animasinya mas?
Deletepertama 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?
siip mas,,,makasi infonya
DeleteItu bener script anim.SetBool("play",true); sudah di eksekusi??
DeleteKalau sudah pastikan juga desain animatornya bener. Soalnya kalo salah ya gak bisa... Sayangnya saya belum buat tutorial bikin animasi. Hehheheheheehe
Makasih tutorialnya mas, sangat membantu. Udah coba dan sukses :)
ReplyDeleteTapi 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
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
DeleteMas 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 :
ReplyDelete}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");}
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
Deletemas supaya gui texturenya ngikutin kamera gmana caranya? saya udah nyoba di child in gui texturenya ke kamera tpi tetep ga bsa
ReplyDeleteMaksudnya 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
DeleteThanks untuk tutorial dan free assetnya, sangat bagus sekali
ReplyDeleteSaya tunggu tutorial berikutnya khususnya dalam pembuatan game dengan Unity3D. Top Markotop....ijin download :)
maaf mau tanya, klo membuat multiobjek dngan menggunakan touch screen button gmn ya?
ReplyDeletemaaf mau tanya. kalau membuat multi objek menggunakan touch screen button gmn ya?
ReplyDeleteGan 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??
ReplyDeletemas mau tanya kalo button touch lewat kamera sensor bagaimana. ga main di android. mohon infonya mas
ReplyDeleteminta tutorial lengkapnya mas untuk button touch tetapi tidak lewat android melainkan lewat kamera sensornya mas. kalo bisa contohin pake kinect xbox
ReplyDeleteMas 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
ReplyDeletemas kok gak bisa di download ya?
ReplyDeletemas ada tutorial untuk play stop pause animasi dan rotate object?
ReplyDeleteMas klo mau buat button informasi masi d dalam objek 3d nya gmna mas? Saya buat AR
ReplyDeleteMas
ReplyDeleteMas 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
ReplyDeletegan bisa bagi script rotasi dan zoom aumented reality?
ReplyDelete