Monthly Archives: June 2011

Skenario:
Anda sedang memainkan game, kontrol game dilakukan dengan mouse dan keyboard, kemudian di tengah-tengah permainan anda memunculkan menu. Untuk memilih menu digunakan mouse, tentu cukup mengganggu jika mouse digerakkan dan tampilan game masih tetap ikut bergerak. Tampilan game dapat dibekukan sementara selama tampilan menu masih ada di layar. Dalam Unity3d, hal ini dapat dilakukan dengan cara disable component MouseLook yang dimiliki oleh Camera atau Character Controller (First Person Controller dan Third Person Controller).

Solusi:
Perlu diketahui bahwa Component Mouse Look ada di Component > Camera-Control > Mouse Look. Jika diperhatikan, setiap Character Controller di scene memiliki Mouse Look sebagai Component (dapat dilihat di panel Inspector).
Saya mendapatkan solusi ini dari UnityAnswer. Untuk freeze tampilan game, berikan nilai false untuk component Mouse Look dengan kode dibawah ini:

GameObject.Find("First Person Controller").GetComponent("MouseLook").enabled=false;
GameObject.Find("Main Camera").GetComponent("MouseLook").enabled=false;

Untuk kembali mengaktifkan  tampilan game (Unfreeze), beri nilai true untuk component Mouse Look dengan kode dibawah ini:
 

GameObject.Find("First Person Controller").GetComponent("MouseLook").enabled = true;
GameObject.Find("Main Camera").GetComponent("MouseLook").enabled = true;



Tulisan ini merupakan terjemahan bebas dari tutorial membangun FPS yang disediakan oleh unity3d.com. Tutorial asli dalam versi bahasa Inggris dapat ditemukan di unity3d.com. Resource yang saya gunakan juga dapat didownload di unity3d.com/support/resources/tutorials/fpstutorial.html.

Berikut ini langkah-langkah membangun FPS dengan Unity3d:

  1. Download FPS_Tutorial.zip dari alamat diatas, Unzip kemudian buka project di dalamnya menggunakan Unity3d.
  2. Import standard assets milik Unity3d ke dalam project yang telah anda buka tersebut. Standard assets ada di folder Standard Packages yang ada di dalam folder dimana Unity3d terinstall.
  3. Prinsip game FPS adalah mengeksplorasi suatu area kemudian menembak musuh-musuh yang muncul. Jadi untuk membangun game FPS, pertama diperlukan objek area. Dalam tutorial FPSini, Unity3d telah menyediakan objek area yang dapat langsung digunakan.
    Pilih objek mainLevelMesh di panel Projects dengan cara: klik mainLevelMesh (Objects/mainLevelMesh/mainLevelMesh) yang ada di panel Projects.
    Perhatikan di panel Inspector, dibagian FBXImporter, pastikan option “Generate Colliders” aktif (dengan memberi tanda centang).
    Drag objek mainLevelMesh dari panel Projects ke dalam scene. Sekarang anda telah memiliki objek berupa area yang akan digunakan sebagai wilayah eksplorasi FPS anda.
  4. Selanjutnya adalah menambahkan karakter FPS itu sendiri. Karakter FPS yang akan digunakan adalah aset standar yang telah disediakan oleh Unity3d. Klik dan drag aset First Person Controller (jendela project, folder Standard Assets > Prefabs) ke scene. Di scene akan muncul objek berbentuk silinder yang merepresentasikan pemain game. Perhatikan penempatan objek silinder ini terutama nilai y, tempatkan First Person Controller di atas permukaan area game.

    jika penempatan benar maka ketika tampilan Play dijalankan, anda sudah dapat mengekplorasi area dengan menggunakan keyboard dan mouse sebagai alat gerak.

  5. Selanjutnya menambahkan senjata. Menambahkan peluncur granat: Buat game objek kosong, rename sebagai Launcher, tempatkan di tempat yang sama dengan aset FPS di scene dengan cara:
    Klik FPS di panel Hierarchy, letakkan kursor mouse di Scene, tekan tombol “F” di keyboard. Klik Launcher di panel Hierarchy lalu pilih menu Game Object > Move to view. Di scene akan terlihat launcher berpindah tempat ke tempat FPS asset.


    Tetapi ketika game dijalankan, objek launcher belum bergerak mengikuti objek FPS.

    Untuk mengatasi masalah ini, drag objek Launcher ke dalam Main camera yang dimiliki oleh FPS di jendela Hierarchy.


    Klik tombol Play, Ketika menjalankan objek FPS, perhatikan Scene View, objek Luncher akan ikut bergerak bersama objek FPS.
     

  6. Membuat objek granat sederhana: Buat prefab baru, rename sebagai Missile. Kemudian buat objek bola (klik menu GameObject > Create Other > Sphere). Objek bola ini akan ditampilkan di jendela Hierarchy dan Scene View. Drag objek bola ini dari panel Hierarchy ke prefab Missile yang ada di panel project. Hapus objek Sphere di panel Hierarchy.
  7. Membuat kode peluncur granat: Buat dokumen Javascript baru, beri nama MissileLauncher, isikan kode berikut:

    var projectile : Rigidbody;
    var speed = 20;

    function Update()
    {
        if( Input.GetButtonDown( “Fire1” ) )
       
        {
            var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position, transform.rotation );
            instantiatedProjectile.velocity =transform.TransformDirection( Vector3( 0, 0, speed ) );
            Physics.IgnoreCollision( instantiatedProjectile. collider,
                transform.root.collider );
        }
    }

    Attach script ini kedalam objek Launcher yang ada di dalam objek FPS. Untuk memastikan bahwa objek FPS telah memiliki script Missile Launcher, klik objek Launcher di panel Hierarchy, di panel Inspector akan muncul Properti script Missile Launcher. Disini terlihat variabel projectile masih kosong.

  8. Klik prefab Missile di panel Project, klik Components > Physics > Rigidbody
  9. Klik Launcher di panel Hierarcy, drag prefab Missile dari panel Project ke variabel projectile di panel Inspector.

    Jalankan game, klik mouse, sekarang anda dapat menembakkan granat berbentuk bulat.

  10. Menambahkan efek ledakan. Buat javascript baru, beri nama Projectile. Isikan kode berikut:

    var explosion : GameObject;
    function OnCollisionEnter( collision : Collision )
    {

     var contact : ContactPoint = collision.contacts[0];
     var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
     var instantiatedExplosion : GameObject = Instantiate(
     explosion, contact.point, rotation );
     Destroy( gameObject );

    }

    Attach script ini ke prefab Missile. Selanjutnya membuat ledakan, buat prefab baru,beri nama Explosion. Efek ledakan akan menggunakan aset Particle standar dari Unity3d. Drag prefab Explosion dari panel Project Standard Asets > Paticles > Explosion ke panel Hierarchy. Lakukan seting sesuka anda, kemudian drag Explosion dari panel Hierarchy ke prefab Explosion yang tadi telah dibuat.

  11. Klik prefab Missile di panel project, drag prefab Explosion dari panel Project ke variabel Explosion (script Projectile) di panel Inspector.
  12. Buat script baru, rename dengan Explosion, isikan kode:

    var explosionTime = 1.0;
    function Start()
    {
     Destroy( gameObject, explosionTime );
    }

    attach script Explosion ke prefab Explosion. Jalankan game, sekarang setiap klik mouse, granat akan muncul dengan efek ledakan.

  13. Menambahkan suara ledakan. Klik prefab Explosion di panel Project. Klik Component > Audio > Audio Source. Panel Inspector akan menampilkan Audio Source. Klik tanda bulatan kecil di samping kanan kotak Audio Clip. Pilih Rocket Launcher Impact.

    Jalankan game.

    Sumber: unity3d.com/support/resources/tutorials/fpstutorial.html

Ide awal: Ketika game tengah berjalan, saya ingin pengguna dapat menampilkan menu utama dengan cara menekan tombol tertentu di keyboard, misalnya tombol Esc.

Solusi awal:
Dengan beberapa alasan :

  1. Saya ingin menggunakan tampilan menu yang ringan untuk di-load oleh komputer, jadi saya menggunakan fasilitas menu yang disediakan oleh class Javascript dalam unity (GUI.Button)
  2. GUI.Button hanya bisa digunakan melalui fungsi OnGUI
  3. Saya pengguna Unity yang belum berpengalaman

Dengan alasan-alasan diatas  maka awalnya saya memikirkan penggunaan dua buah kamera. Dimana kamera utama berfungsi sebagai character controller sedangkan kamera kedua baru aktif jika pengguna menekan salah satu tombol di keyboard. Nah, menu akan diletakkan di kamera dua ini.
Tetapi setelah beberapa kali mencoba dan hasilnya tidak seperti yang saya harapkan, akhirnya saya mencari ide lain.

Solusi akhir:
Akhirnya saya tidak menggunakan dua kamera untuk menampilkan menu. Hanya memanfaatkan nilai suatu variabel integer yang nilainya akan berubah ketika pengguna menekan salah satu tombol keyboard.

var i:int;

function Start()
{
    i=1;
  }

Ketika fungsi Start berjalan, nilai i adalah 1. Kemudian di fungsi Update, nilai i akan diubah ketika pengguna menekan tombol keyboard, disini saya menggunakan tombol Space (spasi).
 function Update(){

if(Input.GetKeyDown(“space”))
{
   i=2;
}

else if(Input.GetKeyDown(“b”))
{
    i=1;
}

}

Ketika nilai berubah maka fungsi untuk menampilkan menu akan dipanggil.

function OnGUI()
{
    if (i==2)
   {
       displayMyGUI();
    }
}

Tampilan menu dijabarkan di dalam fungsi displayMyGUI() dimana kodenya tidak ditampilkan disini. Selanjutnya kenakan script ini sebagai component dari suatu game object kosong di dalam scene. It’s working fine but script ini masih terlihat agak bertele-tele, masih dapat diperbaiki lagi….Atau mungkin ada ide lain?

Thanks to stufi1983 atas idenya.

Perbedaan Matematika Teknik dan Kalkulus

It’s not a big deal, but…

Ketika melihat susunan kurikulum sebuah jurusan di sekolah tinggi/universitas/akademi/politeknik, kadang kita menemukan mata kuliah Matematika Teknik atau Kalkulus. Pernahkah anda bertanya apa bedanya? Saya pernah penasaran dengan perbedaan antara keduanya. Tapi kemudian terjawab oleh saya sendiri, dengan pemahaman saya sendiri juga (jadi mungkin dapat diragukan).

Jika anda melihat buku acuan kuliah matematika teknik, misalnya karangan KA Stroud, anda akan melihat bahwa seolah-olah semua hal yang berkaitan dengan matematika ada disana. Contohnya materi matriks, limit dan integral, hingga statistik dan probabilitas. Padahal seingat saya ketika saya kuliah di Matematika murni, ketiga materi tersebut ada dalam bidang konsentrasi yang berbeda.

Matematika teknik memang mengajarkan materi-materi praktis matematika. Sedangkan dalam Kalkulus, inti bahasan yang disampaikan adalah mengenai limit dan integral. Materi Kalkulus dimulai dari pengenalan konsep bilangan riil dan himpunan, dengan tujuan akhir untuk mencapai pemahaman di bidang limit dan integral.CMIIW

(Kebingungan ketika membuat matriks kaitan antara kompetensi dan bahan kajian dalam penyusunan kurikulum berbasis kompetensi, padahal saya awam dalam hal tersebut)

Elemen-elemen GUI dalam Unity diatur dalam x dan y (tanpa z). Posisi elemen GUI tersebut memiliki rentang jarak 0 sampai dengan 1 untuk posisi vertikal maupun horisontal.Untuk posisi center di layar monitor maka x=0.5 dan y=0.5.


Dalam memposisikan GUI, gunakan Game View. Ubah dan coba satu-satu aspect yang tersedia.

Tombol menu di Unity 3d engine dapat dibuat dengan beberapa cara yaitu:

  1. Menggunakan  Plugin misalnya EZ-GUI
  2. Menggunakan GUI texture dan mengaplikasikan script untuk tombol sebagai Component dari GUI texture tersebut
  3. Menggunakan class GUI.Button

Dalam tulisan ini saya akan coba menuliskan langkah-langkah pembuatan tombol menu dengan menggunakan GUI texture.
Hal yang perlu disiapkan terlebih dahulu adalah texture atau gambar tombol yang diinginkan. Gambar tombol tersebut dapat dibuat menggunakan software pengolah gambar misalnya Adobe Photoshop.
Format gambar yang akan digunakan sebagai texture dapat berupa .png atau .tiff, tapi berdasarkan pengalaman, format .png kadang-kadang memperlihatkan border putih disekeliling text. Jadi saya memilih menggunakan format .tiff dengan format background gambar transparan.
Setelah texture tersedia, lakukan langkah-langkah berikut:

  1. Import gambar tombol yang sudah anda siapkan sebagai aset dengan cara:

    Klik tombol assets–> import new assets–> pilih file yang akan digunakan –>klik import.

    Dalam contoh ini saya melakukan import sebanyak dua kali karena saya ingin tampilan tombol berubah ketika disorot oleh mouse. Saya menggunakan file menuAwal.tiff dan menuAwal_sorot.tiff. MenuAwal.tiff akan saya gunakan sebagai tampilan tombol pada saat tombol tidak dalam keadaan disorot oleh mouse. Sedangkan menuAwal_sorot.tiff akan digunakan sebagai tampilan tombol ketika tersorot oleh mouse.
    Sesudah klik Import anda perhatikan nama file yang anda import dimunculkan di jendela Project. Sekarang anda sudah mempunyai aset gambar yang akan digunakan sebagai tombol di dalam project anda.

  2. Selanjutnya buat GUI texture menggunakan gambar yang telah anda import dengan cara:

    sorot gambar yang akan digunakan di panel project–> klik gameObject–> create other –> GUI Texture

  3.  GUI texture yang anda buat di scene tersebut belum dapat berfungsi sebagai tombol. Untuk memfungsikan texture sebagai tombol, anda perlu membuat script untuk tombol terlebih dahulu dengan cara

    Klik kanan jendela project –> pilih create –> pilih javascript. Jendela project dan inspector akan memunculkan new behaviour script.

  4. Klik new behaviour script di jendela project, kemudian klik sekali lagi untuk mengubah nama script, ganti dengan nama button.
  5. Edit kode dengan cara klik dua kali script button dari jendela project, masukkan kode:

    var levelToLoad : String;
    var normalTexture : Texture2D;
    var rollOverTexture : Texture2D;
    var beep : AudioClip;

    function OnMouseEnter(){
      guiTexture.texture = rollOverTexture;
    }
    function OnMouseExit(){
      guiTexture.texture = normalTexture;
    }

    function OnMouseUp(){
      audio.PlayOneShot(beep);
      yield new WaitForSeconds(0.35);
      Application.LoadLevel(levelToLoad);
    }

              klik ikon save.

  6. Sorot object GUI texture yang telah dibuat tadi di jendela Hierarchy. Klik Component –> Script –> button. 
  7. Di jendela Inspector akan muncul panel tambahan untuk button script. Di bagian bawah ada default reference (button), berisi variabel-variabel yang telah diisikan di dalam script.
    Level to load –> scene level yang akan ditampilkan ketika tombol di-klik
    normal texture –> teksture pada saat tombol ada dalam kondisi normal
    Roll Over Texture–> teksture pada saat tombol tersorot oleh mouse
    beep –> suara pada saat tombol diklik
    Pada konsisi awal semuanya masih berisi none, karena belum memilih level/tekstur/suara mana yang akan diasosiasikan sebagai variabel-variabel tersebut.
    Untuk memilih, klik ikon bulat kecil yang ada disamping kanan “none” yang ada masing-masing variabel.
  8. Posisikan GUI texture anda. [lihat di cara memposisikan objek-objek GUI]

    Anda juga dapat membuat tombol menggunakan texture dengan cara lain yaitu:

    1. Sesudah melakukan import gambar, buat game object kosong dengan cara:

      klik Game Object –> create empty –> dalam jendela hierachy muncul GameObject baru yang masih kosong. Rename dengan nama misal cobaMenu.

    2. Game Object kosong ini akan digunakan sebagai tombol. Anda perlu mengaplikasikan script tombol ke Game Object kosong tersebut. Gunakan script yang sama dengan diatas dengan cara:

      klik dan seret script button dari jendela project ke cobaMenu di jendela Hierarchy

    3. Klik cobaMenu di jendela Hierarchy, perhatikan di jendela Inspector telah muncul panel tambahan untuk Button(script). Isikan variabel-variabel Level to Load, normal texture, roll over texture dan beep sesuai dengan yang diperlukan.

    4. Atur posisi tombol yang telah anda buat.
    5. Tes dalam tampilan Game View.

      Referensi: Unity Game Development Essentials, Will Goldstone