Membuat Game Sederhana Dengan Unity 3D - Part 2
Untuk membuat kesan berjalan yang lebih nyata, kita akan membuat efek tekstur rumput yang berjalan. Untuk melakukannya, kita akan membuat script. Pada jendela [Project], buat folder baru bernama “Scripts”. Lalu, buat script baru dengan mengklik [Create]-[C# Script]. Beri nama “MovingTexture”. Klik dua kali pada script tersebut.
Jendela program Mono Develop akan terbuka. Mono Develop merupakan editor pemrograman built-in milik Unity. Di sini, kita akan membuat suatu syntax (program) yang akan menggerakkan tekstur dari objek Tanah. Ketikkan syntax berikut di Mono Develop.
public float scrollX, scrollY;
void Start () {
}
void Update () {
//menggerakkan texture agar terlihat player seolah sedang berjalan
float offsetX = scrollX * Time.time;
float offsetY = scrollY * Time.time;
renderer.material.mainTextureOffset = new
Vector2(offsetX, offsetY);
}
Kembali ke jendela Unity. Drag script “MovingTexture” yang baru saja kita edit ke objek Tanah. Klik objek Tanah. Pada jendela [Inspector], cari component bernama “Moving Teture”. Isikan bagian [Scroll Y] dengan -0.3. Biarkan [Scroll X] tetap 0. Klik [Play]. Lihat apa yang terjadi.
Selanjutnya kita akan membuat control untuk karakter. Karakter bisa digerakkan ke arah kiri dan kanan melalui tombol keyboard. Untuk melakukannya, buat script baru bernama “HeroControl” dan letakkan di folder “Scripts”. Klik dua kali script tersebut dan masukkan syntax berikut di Mono Develop.
public float speed;
void Start () {
}
void Update () {
//pergerakan player
if (Input.GetKey(KeyCode.RightArrow)) {
this.transform.Translate(-1 * speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow)) {
this.transform.Translate(speed * Time.deltaTime, 0, 0);
}
//membatasi pergerakan player
if (this.transform.position.x > 1.5f) {
this.transform.position = new Vector3(1.5f,this.transform.position.y, this.transform.position.z);
}
if (this.transform.position.x < -1.5f) {
this.transform.position = new Vector3(-1.5f, this.transform.position.y, this.transform.position.z);
}
}
Kembali ke jendela Unity. Drag script “HeroControl” ke arah objek Monster. Klik objek Monster. Pada jendela [Inspector], cari component “HeroControl”. Isikan bagian [Speed] dengan nilai tertentu. Klik [Play]. Sekarang karakter sudah bisa digerakkan menggunakan keyboard.
Selanjutnya, kita akan membuat obstacle. Obstacle adalah objek yang harus dihindari oleh karakter. Obstacle yang akan kita buat berupa pohon-pohon. Kita harus memasukkan objek pohon terlebih dahulu. Klik [Assets]-[Import Package]-[Custom Package]. Cari file bernama “TerrainAssets.unitypackage” di folder /Workshop Unity/Assets/Object/. Klik [Open]. Pada jendela [Importing Package], klik [Import].
Sebuah folder baru bernama “Terrain Assets” akan muncul di jendela [Project]. Klik folder tersebut, lalu buka folder “Trees Ambient-Occlusion”. Pilih tiga pohon yang akan digunakan sebagai obstacle, lalu drag masing-masing pohon ke jendela [Scene]. Atur posisinya dan ukurannya sehingga terlihat seperti pada gambar di bawah.
Selanjutnya kita akan membuat obstacle bergerak ke arah karakter. Buat script baru dan beri nama “MovingObstacle”. Klik dua kali pada script tersebut. Masukkan syntax berikut.
public float speed;
public bool isObstacle = true;
void Start () {
}
void Update () {
//menggerakkan obstacle ke arah player
this.transform.Translate (0, 0, -speed * Time.deltaTime);
if (transform.position.z < -20) {
Destroy(gameObject);
}
}
Drag script tersebut ke masing-masing obstacle pohon. Isikan nilai [Speed] pada component [Moving Texture] di jendela [Inspector] untuk masing-masing obstacle pohon. Klik [Play]. Maka semua pohon akan bergerak menuju karakter.
Seperti pada game free running yang lain, obstacle akan terus-menerus muncul secara bergantian. Untuk melakukannya, kita harus membuat prefab dari obstacle pohon terlebih dahulu. Prefab adalah tempat penyimpanan sementara sebuah objek. Buka folder “Objects” di jendela [Project]. Klik [Create]-[Prefab]. Beri nama “Obstacle1”. Buat 2 prefab lagi dan beri nama “Obstacle2” dan “Obstacle3”.
Drag satu persatu obstacle pohon yang ada di jendela [Hierarchy] ke satu prefab di jendela [Project]. Pastikan bahwa satu prefab berisi satu obstacle pohon. Jika satu prefab diisi dua obstacle pohon, maka obstacle pohon yang sebelumnya akan tertimpa. Prefab yang sudah terisi ditandai dengan kotak berwarna biru.
Buat script baru bernama “ObstacleGenerator”. Klik dua kali script tersebut dan masukkan syntax berikut.
public float generateTime;
public GameObject[] obstacle;
public int randomObstacle = 0;
void Start () {
}
void Update () {
//membuat obstacle secara acak
generateTime += Time.deltaTime;
if (generateTime > 1) {
randomObstacle = Random.Range(0, obstacle.Length);
Instantiate(obstacle[randomObstacle], obstacle[randomObstacle].transform.position, obstacle[randomObstacle].transform.rotation);
generateTime = 0;
}
}
Kembali ke jendela Unity. Drag script “ObstacleGenerator” ke objek Tanah. Klik objek Tanah. Pada jendela [Inspector], cari component Obstacle Generator. Pada bagian [Generate Time], isikan 1. Klik [Obstacle]. Pada bagian [Size], isikan 3. Akan muncul 3 Element, yaitu Element 0, 1, dan 2. Drag satu persatu prefab yang telah dibuat sebelumnya ke dalam bagian [Element]. Pastikan bahwa satu Element berisi satu prefab. Klik [Play]. Obstacle pohon akan muncul terus menerus secara acak, dan saat mencapai jarak tertentu di luar kamera, maka obstacle pohon akan hancur dengan sendirinya.
Sekarang, kita akan membuat kondisi game over saat karakter bertabrakan dengan pohon. Untuk membuat kondisi tabrakan, kita perlu membuat collider. Collider adalah area yang mendeteksi ada atau tidaknya kontak antar objek. Klik pada objek yang akan diberi collider. Klik [Component]-[Physics]-[Box Collider]. Akan muncul kotak bergaris hijau yang membungkus objek. Area kotak hijau inilah yang akan mendeteksi apakah suatu objek sedang melakukan kontak langsung dengan objek lain. Sesuaikan ukuran dari
collider ini seperti pada gambar di bawah. Gunakan pengaturan [Size] dan [Position] pada component [Box Collider] di jendela [Inspector].
Untuk bisa membuat collider ini bekerja, kita perlu menambahkan component lain, yaitu Rigidbody. Rigidbody adalah component yang memberikan efek gravitasi ke objek. Klik [Component]-[Physics]-[Rigidbody]. Cari component Rigidbody di jendela [Inspector]. Beri centang pada [Is Kinematic].
Setelah melakukan pengeditan objek di [Scene], kita perlu menyimpannya kembali ke prefab. Caranya, klik [Apply] di jendela [Inspector]. Segala perubahan di jendela [Scene] akan disimpan ke prefab.
Berikan component Box Collider dan Rigidbody untuk 2 obstacle pohon yang lain. Atur ukuran dari collider-nya. Beri centang pada [Is Kinematic] untuk component [Rigidbody]. Jangan lupa untuk menyimpannya ke prefab dengan mengklik [Apply].
Berikan juga Box Collider dan Rigidbody untuk karakter Monster. Atur ukuran collider-nya. Untuk Monster, kita tidak perlu memberi centang pada pada [Is Kinematic].
Selanjutnya, buat tulisan yang menyatakan permainan berakhir (game over). Klik [GameObjects]-[Create Other]-[3D Text]. Sebuah tulisan akan muncul di layar.
Ganti nama objek teks tersebut menjadi “GameOver”. Pada jendela [Inspector], pada bagian [Font Size], isikan 100. Pada bagian [Text], isikan “Game Over”. Atur ukuran dan posisi dari text tersebut sehingga sesuai dengan gambar di bawah.
public float speed;
public SkinnedMeshRenderer player;
//gameover
public MeshRenderer gameOverText;
private bool isGameOver = false;
void Start () {
Time.timeScale = 1;
}
void Update () {
//pergerakan player
if (Input.GetKey(KeyCode.RightArrow)) {
this.transform.Translate(-1 * speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow)) {
this.transform.Translate(speed * Time.deltaTime, 0, 0);
}
//membatasi pergerakan player
if (this.transform.position.x > 1.5f) {
this.transform.position = new Vector3(1.5f, this.transform.position.y, this.transform.position.z);
}
if (this.transform.position.x < -1.5f) {
this.transform.position = new Vector3(-1.5f, this.transform.position.y, this.transform.position.z);
}
//kondisi game over
if (isGameOver) { gameOverText.enabled = true;
if (Input.anyKeyDown) {
Application.LoadLevel(Application.loadedLevel);
}
}
}
//deteksi kontak dengan obstacle pohon
public void OnCollisionEnter(Collision collision) {
try { bool obstacle =
collision.collider.GetComponent<MovingObstacle>().isObstacle;
if (obstacle) { isGameOver = true;
player.enabled = false;
Time.timeScale = 0;
}
}
catch {
}
}




























Tidak ada komentar:
Posting Komentar