Minggu, Juni 01, 2014

Creating Camera Movement Like RTS Game In Unity

 

Sudah lama nih penulis vakum. Namun berhubung akhir akhir ini banyak nganggurnya jadi mau share artikel deh tentang unity. Kebetulan skripsi udah mau kelar, mau share juga ah script yang digunain di tugas akhir penulis. Kali ini script yang akan penulis share adalah mengenai pembuatan camera movement ala game RTS. Pernah main game DOTA kan? atau Red Alert atau Age of Empire? nah disini kita akan implementasikan trik pergerakan kamera seperti itu namun yang sedikit berbeda adalah kita akan implementasikan ini di Android.

Pada android sedikit berbeda dengan PC version. pada pc terdapat mouse sehingga camera akan mengikuti pergerakan mouse. Nah untuk android kita akan beralih menggunakan touch. Kebetulan pada unity versi baru kita bisa implementasi penggunaan mouse di android jadi ga perlu deh pakai touch bawaan android. Keuntungan tersebut bisa kita manfaatin ketika njalanin via unity editor buat ngetes. Jadi ga perlu deploy ke device. Lebih praktis kan 

Berikut step by stepnya:

1. Buat Scene baru dan tambahkan terrain(saya anggap pembaca sudah mengerti dasar pembuatan scene dan terrain di unity. Jika belum bisa google yah ).

image

2. Kemudian buat script bernama SwipeMovementScript.cs(Untuk tutorial ini saya menggunakan C# karena lebih familiar dengan bahasa ini Open-mouthed smile). Tambahkan kode berikut:

using UnityEngine;
using System.Collections;

public class SwipeMovementScript : MonoBehaviour {

    Vector3 hit_position;
    Vector3 current_position;
    Vector3 camera_position;

    // Use this for initialization
    void Start () {
        Screen.orientation=ScreenOrientation.Landscape;
    }

    void Update(){
            if(Input.GetMouseButtonDown(0)){
                hit_position = Input.mousePosition;   
                camera_position = transform.position;
             }
                if(Input.GetMouseButton(0)){
                current_position = Input.mousePosition;
                TouchDrag();       
            }        
    }

    void TouchDrag(){
        Vector3 direction =  Camera.main.ScreenToWorldPoint(current_position) - Camera.main.ScreenToWorldPoint(hit_position);
        // Invert direction to that terrain appears to move with the mouse.
        direction = direction * -1;       
        Vector3 position = new Vector3(camera_position.x + direction.x,camera_position.y,camera_position.z + direction.z);
        transform.position = position;       
    }
}

3. Buat Tampilan dalam scene menjadi seperti berikut

image

 

4. Attach script SwipeMovementScript.cs ke Main Camera dan lakukan pengaturan pada area yang dilingkari warna merah sesuai kebutuhan. Untuk Projection gunakan ortographic

image

5. Run project dan pastikan tambahkan object untuk mengecek apakah camera movementnya berhasil atau tidak. Selamat mencoba Smile

Demikian tutorial yang saya bagikan kali ini. Jika ada pertanyaan silahkan saja hubungi saya via bagibagi23@gmail.com

1 komentar: