Cara Membuat Game Ular Tangga Dengan Unity #3 (Tipuan Terakhir)

Bagian terakhir dari pembuatan boardgame-boardgame-man menggunakan Unity ini adalah bagaimana membuat mekanisme player menaiki tangga atau menuruni Ular. Bagi anda yang baru tune in, dimohon untuk terlebih dahulu membaca artikel ini:

Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3 Cara Membuat Game Ular Tangga Dengan Unity #3

Bagaimana Membuat Board Game Di Unity?

Dan untuk artikel Part 1, barangkali ada yang ketinggalan bisa membaca di sini: Boardgame Unity Part 1 sedangkan untuk artikel Part 2 bisa anda baca di sini: Boardgame Unity Part 2

Pada tutorial kali ini saya akan memberikan sebuah tipuan akhir yang bisa digunakan pada game jenis ular tangga. Penasaran?

Oke. Ayo kita lanjutkan!

Sampai akhir kemarin, posisi boardgame kita sudah seperti ini. Para player sudah dapat bergerak sesuai dengan angka pada dadu.

Cara Membuat Game Ular Tangga Dengan Unity #3

Tutorial ini hanya akan membahas pembuatan 1 buah mekanisme yaitu Tangga yang terletak pada kotak Nomor 3 dan akan berakhir pada kotak Nomor 21.

Bagian ini memang rada sulit untuk digeneralisasi, karena setiap board pasti akan berbeda komposisinya.

Nah, langkah pertama adalah membuat sebuah Cube baru yang akan dijadikan acuan Trigger.

boardgame03

Tempatkan Cube tersebut di kotak Nomor 3

boardgame04

Untuk memudahkan pemahaman saya coba ganti dulu nama dari Cube ini menjadi Tangga1-Awal. Ini nama sementara loh ya. Karena tipuan pada tutorial ini adalah justru terletak pada penggunaan nama sebuah GameObject.

boardgame05

Logika dasar dari pergerakan player antara 2 titik itu sebenarnya sama saja yaitu berpindah dari 1 tranform ke transform lain, atau kalau menggunakan cube sebagai perumpaan, yaitu dari Tangga1-Awal ke Tangga1-Akhir

boardgame06

Jadi kalau disederhakan kira-kira bentuk pergerakannnya seperti ini. Anda setuju?

boardgame07

Tapi ada satu hal yang perlu anda perhatikan. Bukanlah BOARDGAME kita ini sudah ada Cubenya? Coba perhatikan artikel2 sebelumnya. Seluruh kotak boardgame kita sudah memiliki cube termasuk posisinya.

Jadi ngapain mesti bikin lagi 2 cube ‘hanya’ untuk perpindahan tambahan antara 1 titik ke titik lain gara-gara ‘tangga’ atau ‘ular’?

boardgame08

Sebenarnya yang kita perlukan hanyalah “Trigger” kapan si player harus naik tangga dan kapan harus turun lewat ular. Dan naik/turunnya itu KEMANA?

Nah, disinilah tipuannya.

Daripada bikin 2 Cube untuk bikin mekanisme seperti ini, buat saja 1 buah Cube yang memiliki nama tujuan akhir dari pergerakan.

Contoh dalam tutorial ini adalah si Cube diberi nama Go=21. Artinya, si player akan dipaksa pergi ke kotak dengan nomor array 21 yang berarti adalah kotak nomor 22.

Sebagai tambahan untuk memudahkan deteksi, si Cube ini juga diberi Tag = Tangga, diberi komponen Rigidboy dan hilangkan Gravitasinya.

boardgame09

Untuk melengkapi tipuan hilangkan centang Mesh Renderer.

boardgame10

Selanjutnya update script Player.cs sebagai berikut:

1:  using UnityEngine;  
2:  using System.Collections;  
3:  public class Player : MonoBehaviour {  
4:       public GameObject RedPlayer;  
5:       public GameObject BluePlayer;  
6:       public GameObject Dadu;  
7:       public GameObject[] Plat;  
8:    public int RedPlayerPos, BluePlayerPos, CounterPos, TargetPos;  
9:    public bool RedPlayerMove, BluePlayerMove, RedPlayerMoveSpecial, BluePlayerMoveSpecial;  
10:    public int RedPlayerGoto, BluePlayerGoto;  
11:    // Use this for initialization  
12:    void Start () {  
13:            RedPlayerPos = 0;  
14:            BluePlayerPos = 0;  
15:            RedPlayerMove = false;  
16:            BluePlayerMove = false;  
17:      RedPlayerMoveSpecial = false;  
18:      BluePlayerMoveSpecial = false;  
19:    }  
20:    // Update is called once per frame  
21:    void Update()  
22:    {  
23:      if (RedPlayerMove)  
24:      {  
25:        RedPlayer.transform.position = Vector3.MoveTowards(RedPlayer.transform.position, Plat[RedPlayerPos].transform.position, 0.1f);  
26:        if (Vector3.Distance(RedPlayer.transform.position, Plat[RedPlayerPos].transform.position) < 0.1f)  
27:        {  
28:          if (CounterPos < TargetPos)  
29:          {  
30:            CounterPos++;  
31:            RedPlayerPos++;  
32:          }  
33:          else  
34:          {  
35:            RedPlayerMove = false;  
36:            if (RedPlayerPos == Plat.Length - 1)  
37:            {  
38:              Debug.Log("Red Player Wins!");  
39:            }  
40:          }  
41:        }  
42:      }  
43:      else  
44:      if (BluePlayerMove)  
45:      {  
46:        BluePlayer.transform.position = Vector3.MoveTowards(BluePlayer.transform.position, Plat[BluePlayerPos].transform.position, 0.1f);  
47:        if (Vector3.Distance(BluePlayer.transform.position, Plat[BluePlayerPos].transform.position) < 0.1f)  
48:        {  
49:          if (CounterPos < TargetPos)  
50:          {  
51:            CounterPos++;  
52:            BluePlayerPos++;  
53:          }  
54:          else  
55:          {  
56:            BluePlayerMove = false;  
57:            if (BluePlayerPos == Plat.Length - 1)  
58:            {  
59:              Debug.Log("Blue Player Wins!");  
60:            }  
61:          }  
62:        }  
63:      }  
64:      else  
65:      if (RedPlayerMoveSpecial)  
66:      {  
67:        RedPlayer.transform.position = Vector3.MoveTowards(RedPlayer.transform.position, Plat[RedPlayerGoto].transform.position, 0.1f);  
68:        if (Vector3.Distance(RedPlayer.transform.position, Plat[RedPlayerGoto].transform.position) < 0.1f)  
69:        {  
70:          if (CounterPos < TargetPos)  
71:          {  
72:            CounterPos++;  
73:            RedPlayerPos++;  
74:          }  
75:          else  
76:          {  
77:            RedPlayerMoveSpecial = false;  
78:            RedPlayerPos = RedPlayerGoto;  
79:          }  
80:        }  
81:      }  
82:    }  
83:      void ExecRedPlayerMove(){  
84:            RedPlayerMove = true;  
85:            TargetPos = Dadu.GetComponent<Dadu>().DaduNumber;  
86:            if ((TargetPos + RedPlayerPos) < Plat.Length){  
87:                 RedPlayerPos++;  
88:                 CounterPos = 1;  
89:            }  
90:       }  
91:       void ExecBluePlayerMove(){  
92:            BluePlayerMove = true;  
93:            TargetPos = Dadu.GetComponent<Dadu>().DaduNumber;  
94:            if ((TargetPos + BluePlayerPos) < Plat.Length){  
95:                 BluePlayerPos++;  
96:                 CounterPos = 1;  
97:            }  
98:       }  
99:       void OnGUI () {  
100:            if (GUI.Button(new Rect(10,45,100,30), "Red Go!")){  
101:                 ExecRedPlayerMove();  
102:            }  
103:            if (GUI.Button(new Rect(10,80,100,30), "Blue Go!")){  
104:                 ExecBluePlayerMove();  
105:            }  
106:       }  
107:  }  

Sebagai tambahan kita perlu membuat script baru yaitu PlayerRedHit yang akan bertugas menangani deteksi tabrakan dan memanggil fungsi “spesial epek” naik tangga atau turun tangga.

Buat script PlayerRedHit.cs dan ketikkan script sebagai berikut:

1:  using UnityEngine;  
2:  using System.Collections;  
3:  public class PlayerRedHit : MonoBehaviour {  
4:    string hitName;  
5:    // Use this for initialization  
6:    void Start () {  
7:    }  
8:       // Update is called once per frame  
9:       void Update () {  
10:       }  
11:    void OnTriggerEnter(Collider collider) {  
12:      if (collider.gameObject.tag == "Tangga")  
13:      {  
14:        string[] tempstr = collider.gameObject.name.Split('=');  
15:        int tempint = int.Parse(tempstr[1]);  
16:        GameObject.Find("Plat").GetComponent<Player>().RedPlayerGoto = tempint;  
17:        if (GameObject.Find("Plat").GetComponent<Player>().CounterPos == GameObject.Find("Plat").GetComponent<Player>().TargetPos) 
18:        {  
19:        GameObject.Find("Plat").GetComponent<Player>().RedPlayerMoveSpecial = true;  
20:        }  
21:      }  
22:    }  
23:  }  

Pasang script ini pada GameObject Red Player.

boardgame11

Jalankan aplikasi anda, dan Ta-da. Jika si Player merah menyentuh tangga sesuai dengan nilai dadunya, maka dia akan naik langsuuuung ke atas.

boardgame12

Itu baru Player merah kalau Player biru gimana? Sama aja. Tinggal copas, hehehe. Saya yakin anda pasti bisa melakukannya.

Nah, sekian seri tutoral pendek ini.

Jika anda tertarik untuk mempelajari cara membuat game, silahkan sempatkan diri anda untuk membaca 1-2 artikel pada halaman dibawah ini. Semoga bermanfaat.

Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Cara Membuat Game Menggunakan Unity3D Berikut ini adalah beberapa Tutorial Unity3D yang bisa anda pelajari untuk memahami penggunaan game engine Unity 3D dalam membuat game berbasis PC maupun Android. Tutorial ini akan terus diupdate oleh saya, maupun oleh rekan-rekan kontributor yang lain. Semoga bermanfaat. Berikut ini adalah beberapa Tutorial Unity3D yang bisa anda pelajari untuk memahami penggunaan game engine Unity 3D dalam membuat game berbasis PC maupun Android. Tutorial ini akan terus diupdate oleh saya, maupun oleh rekan-rekan kontributor yang lain. Semoga bermanfaat. Berikut ini adalah beberapa Tutorial Unity3D yang bisa anda pelajari untuk memahami penggunaan game engine Unity 3D dalam membuat game berbasis PC maupun Android. Tutorial ini akan terus diupdate oleh saya, maupun oleh rekan-rekan kontributor yang lain. Semoga bermanfaat. Berikut ini adalah beberapa Tutorial Unity3D yang bisa anda pelajari untuk memahami penggunaan game engine Unity 3D dalam membuat game berbasis PC maupun Android. Tutorial ini akan terus diupdate oleh saya, maupun oleh rekan-rekan kontributor yang lain. Semoga bermanfaat. Berikut ini adalah beberapa Tutorial Unity3D yang bisa anda pelajari untuk memahami penggunaan game engine Unity 3D dalam membuat game berbasis PC maupun Android. Tutorial ini akan terus diupdate oleh saya, maupun oleh rekan-rekan kontributor yang lain. Semoga bermanfaat.

Cara Membuat Game Menggunakan Unity3D

Tutorial Pemula:

Tutorial Berseri #1:

Tutorial Berseri #2:

Artikel Unity:



25 thoughts on “Cara Membuat Game Ular Tangga Dengan Unity #3 (Tipuan Terakhir)

  • January 1, 2017 at 5:29 pm
    Permalink

    Mohon penjelasannya, rigidbody buat apa yah? trus kyknya masih ada bbrp hal yg harus dijelaskan sperti script player itu ada beberapa cekbox dan angka yang mesti diisi pada bagian RedplayerGoTo itu harus diisi apa?

    Reply
    • January 2, 2017 at 4:05 pm
      Permalink

      pliss objectnya gk bisa naik tangga alias no respon. balas dong om om om om om om om

      Reply
      • January 3, 2017 at 7:41 am
        Permalink

        ok ok ok ok ok ok ok

        Reply
    • January 3, 2017 at 3:44 am
      Permalink

      yang buat ini ngaco keknya mas

      Reply
      • January 3, 2017 at 7:30 am
        Permalink

        saya nggak pernah niat bikin tutorial ngaco loh, cuma pengin bikin tutorial unity yang gratis dan bisa berguna bagi bangsa negara dan masyarakat seluruh jagat raya. kalo semisal tutorialnya malah ngaco yah… ehm, kan yang penting udah usaha bikin tutorial, hehehe

        Reply
    • January 3, 2017 at 7:19 am
      Permalink

      Untuk rigidbody bisa dibaca di artikel ini kayaknya: http://imedia9.net/tutorial-unity-mengenal-gameobject-prefabs-dan-rigidbody/

      Saya udah rada lama bikin tutorial ini jadi udah lupa, hehehe. Intinya ada di kalimat ini sih: Contoh dalam tutorial ini adalah si Cube diberi nama Go=21. Artinya, si player akan dipaksa pergi ke kotak dengan nomor array 21 yang berarti adalah kotak nomor 22.

      Jadi penamaannya Cube yang dituju harus berformat Tangga=Angka.

      Kira-kira begitulah

      Reply
  • January 2, 2017 at 5:42 pm
    Permalink

    index out of range line 19 PlayerRedHit.cs om. jawab lah pliss…

    Reply
    • January 3, 2017 at 7:34 am
      Permalink

      Eh? Nggak ada apa-apa loh di line 19 PlayerRedHit.cs? Kok bisa error? Tenang… tenang… tarik napas dalam-dalam, hembuskan… tarik napas lagi… hembuskan…. sudah tenang? Ok, sekarang coba ambil teh panas, kasih gula sedikit, kocek-kocek dan seruput dengan nikmat, hmmm. Mantaaap.

      Intinya kalau ngoding error enaknya nge-teh dulu. Perasaan jadi adem.

      Nah, tadi errornya apa tadi? Oh?

      Index out of range line ya? Itu… error apaan ya? Saya belum pernah denger, hehehe.

      Tapi coba deh dibaca baik2 kodingnya dari awal sampai akhir. Fokus pada 2 makhluk aja yaitu { dan }
      Pastikan semuanya ada sepasang. Karena kalo bentuk kodingnya gini:

      fungsi (){
      if (aaaa){
      bbbb;
      } else {
      ccccc;
      }

      Pasti error. Kenapa? { dan } ini nggak sepasang. Ada yang kurang. Semoga membantu.

      Reply
  • January 3, 2017 at 3:36 am
    Permalink

    Ah payah yang bikin nih tutorial, just wasting time. Benerin dlu tuh kodinganmu -_-

    Reply
    • January 3, 2017 at 7:27 am
      Permalink

      Yang payah mungkin laptop saya mbak, karena di dalam pikiran saya codingnya nggak pernah error, eeeh pas di ketik sama laptop terus dicompile malah jadi error. emang dasar laptopnya payah nih!

      Reply
  • January 3, 2017 at 3:39 am
    Permalink

    Paan nih index out of range? int tempint = int.Parse(tempstr[1]);
    bener gk sih nih tutorial?

    Reply
    • January 3, 2017 at 7:26 am
      Permalink

      jangan marah-marah, sabar… sabar… nanti cepet tua kalau marah-marah terus. hmm, jadi gini

      tempstr adalah variabel string yang harus berisi Go=19 (misal). Jadi kalau udah pake fungsi Split(‘=’)
      maka akan ada 2 variabel yang bisa diakses:

      tempstr[0] = Go dan tempstr[1] = 19

      mestinya kalau tempstr[1] di parser ga bakalan index out of range, kan bentuknya dari

      int tempint = int.Parse(tempstr[1]);

      jadi gini:

      int tempint = int.Parse(19);

      index out of range akan terjadi kalau nggak ada tempstr[1], index 1 nya gada, kok bisa, waktu nyeplit gagal. Mungkin yang displit gameobjectnya nggak pake formula Go=ANGKA <-- bagian ini biasanya yang bikin error. Barangkali sih itu juga, kalau tetep error berarti emang coding yang saya bikin dari awal emang udah salah. Tapi kenapa di komputer saya bisa jalan waktu itu ya? Ah, mungkin komputer saya yang lagi error, hehehe.

      Reply
  • January 3, 2017 at 3:41 am
    Permalink

    om index out of range gitu yah. codingannya salah kayaknya :v

    Reply
    • January 3, 2017 at 7:20 am
      Permalink

      index out of range ya? ini ada 2 kemungkinan sih, codingnya salah atau isi variabelnya yang salah.

      Reply
  • January 3, 2017 at 5:48 pm
    Permalink

    apanya yang jalan? array index out of range gitu.
    bikin tutorial yg bener dong, bkin kesel aj di phpin gini.

    Reply
    • January 3, 2017 at 6:01 pm
      Permalink

      Ah sry ikutan kesal ikut2an sm komen2 di atas eeeaaa…. udah jalan tapi berapapun angka dadunya (misal 6) tetap aj ntar dy ke go=21, itu yang penting udah nyentuh kubus itu deh pokoknya pasti ke cube21 itu.

      Reply
      • January 3, 2017 at 11:04 pm
        Permalink

        Alhamdulillah, udah jalan kan? kan? kan? Mantaaap. Nah, kalau yang itu soal lain. Rasanya saya sudah pernah atasi masalah itu, tapi lupa ke-update kayaknya. Jadi di bagian trigger mesti ngecek DaduNumber sama PlayerPosition udah angka DaduTerakhir belum. Itu emang rada tricky sih, intinya jangan dulu set spesialepeknya kalau DaduNumber belum yang terakhir. Bikin sendiri aja lah ya? Nanti kalau sudah berhasil, ajarin saya, hehehe.

        Reply
        • January 4, 2017 at 5:56 pm
          Permalink

          what the… -_-
          ayolah sensei yg terhormat (ngegombal) ini jg demi para pembaca yg lain, klo mreka puas kan ada kemungkinan mreka bakal sering2 mampir ke tempat ini lagi kan? ato anggaplah ini ucpan trimakasih ke gw khususnya yg udh beli buku ttg unity buatan situ, tnang aj klo ada yg nyari buku unity pasti gw promosiin deh bukunya (gratis). gimana deal? :v

          Reply
          • January 5, 2017 at 6:40 am
            Permalink

            sensei? emangnya saya guru kungfu dipanggil sensei? wkwkwkw. udah saya tambahin scriptya di PlayerRedHit.cs baris 17 disesuaikan saja.

    • January 3, 2017 at 11:01 pm
      Permalink

      salah dong, bukan di phpin tapi di unity-in! ini kan tutorial unity, bukan tutorial php

      Reply
      • January 5, 2017 at 7:50 am
        Permalink

        jiah krain gk mau, udh gw nemu sndiri jg 😀
        sama sih cmn kyknya nih lbih simple (y)

        Reply
        • January 5, 2017 at 8:37 am
          Permalink

          hebaaat, ajarin dong sensei. share di sini, demi para pembaca yang lain 🙂

          Reply
          • January 6, 2017 at 7:30 pm
            Permalink

            jiah, lvlku masih noob loh,,, ini dr script player. intinya gw buat objeknya di bawah dlu trus klo RedPlayerPos itu ada di posisi 2 misal baru tuh box naik n otomatis kena redplayer, tp msh ada bug soalnya box ttp diposisi jd yah u knowlah what happen next klo plyer kena ular mesti turun dulu n abis itu lewat tmpat yg sama dgn box yg masih stay.
            if (CounterPos == TargetPos)
            {
            //ObjektriggerMove = true;
            gerak = GetComponent().RedPlayerPos;

            if (gerak == 2)
            {

            tangga.transform.Translate(Vector3.up * 50 * Time.deltaTime);
            }
            if (gerak == 31)
            {
            ular.transform.Translate(Vector3.up * 50 * Time.deltaTime);
            }

  • January 6, 2017 at 8:11 pm
    Permalink

    solusinya yah gini kyknya moga benar:
    //gw pindahin ke redplayerhit.cs
    if (GameObject.Find(“Plat”).GetComponent().CounterPos == GameObject.Find(“Plat”).GetComponent().TargetPos)
    {
    gerak = GameObject.Find(“Plat”).GetComponent().RedPlayerPos;

    if (gerak == 2)
    {
    GameObject.Find(“Plat”).GetComponent().RedPlayerMoveSpecial = true;
    //tangga.transform.Translate(Vector3.up * 50 * Time.deltaTime);
    }
    if (gerak == 12)
    {
    GameObject.Find(“Plat”).GetComponent().RedPlayerMoveSpecial = true;
    //ular.transform.Translate(Vector3.up * 50 * Time.deltaTime);
    }
    /*else
    {
    GameObject.Find(“Plat”).GetComponent().RedPlayerMoveSpecial = false;
    }*/

    }

    Reply
  • January 10, 2017 at 5:11 am
    Permalink

    sangat menarik tutorialnya..hatur nuhun kang 🙂

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Shares