Scripting (Hard)
Pada modul ini kita akan mempelajari tentang cara menggerakkan objek baik
itu player ataupun camera, dan juga kita akan mempelajari tentang audio lagi
tetapi tentang 3D Audio, dan juga bagaimana cara pindah dari satu scene ke
scene lainnya, dan yang terakhir adalah bagaimana cara kita menyimpan data.
Modul ini akan cukup banyak, ya karena ini sudah mulai memasuki bagian
yang agak hard. Silakan ikuti secara perlahan dan santai.
3. Agar pemain kita warnanya tidak sama dengan Plane, maka buatlah
material bernama PlayerSkinMat. Dan ubahlah warnanya menjadi
warna kulit yang kalian sukai. Jika sudah drag and drop ke Player dan
Hands.
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Update is called once per frame
void Update()
{
// Get Keyboard Input
if (Input.GetKey(KeyCode.A))
Debug.Log("A");
if (Input.GetKey(KeyCode.W))
Debug.Log("W");
if (Input.GetKey(KeyCode.S))
Debug.Log("S");
if (Input.GetKey(KeyCode.D))
Debug.Log("D");
}
}
5. Jangan lupa save scriptnya. Lalu silakan play scenenya. Dan coba tekan
keyboard huruf A, W, S, D.
Penjelasan Kode
if (Input.GetKey(KeyCode.A))
Debug.Log("A");
Jika kita memberikan input, sudah pasti pada saat game berjalan dia
harus menerimanya maka dari itu kodenya di tulis di method Update.
Untuk mendapatkan input gunakan syntax Input, dan ada berbagai
macam jenis Input. Ada GetKey, GetKey Up dan Down untuk keyboard,
dan ada juga GetButton, dan lain-lain. Maka ketika KeyCode A ditekan
maka Console akan mengirimkan pesan juga.
1. Pertama kita akan mencoba cara yang mudah dulu. Pertama, kalian bisa
hapus kode di PlayerController yang kalian barusan tambahkan tadi.
2. Lalu kembali ke Unity dan tambahkan Rigidbody pada Player agar
pemain kita mempunyai fisik. Kemudian di bagian Constraints > Freeze
Rotation > Centang X, Y, Z
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Berpindah ke Depan
if (Input.GetKey(KeyCode.W))
{
transform.position = new
Vector3(transform.position.x, transform.position.y,
transform.position.z + 0.3f);
}
// Berpindah ke Belakang
if (Input.GetKey(KeyCode.S))
{
transform.position = new
Vector3(transform.position.x, transform.position.y,
transform.position.z - 0.3f);
}
// Berpindah ke Kanan
if (Input.GetKey(KeyCode.D))
{
transform.position = new
Vector3(transform.position.x + 0.3f, transform.position.y,
transform.position.z);
}
}
}
4. Jangan lupa save scriptnya dan silakan play scenenya. Maka playernya
akan bergerak.
Penjelasan Kode
Alangkah baiknya segala bentuk fisika atau gerakan atau semacamnya
dimasukkan ke dalam method FixedUpdate dikarenakan FixedUpdate
akan berjalan konstan sesuai dengan FixedTime (0.02 s). Selanjutnya
adalah logika menjalankan pemain. Jika kita ingin menjalankan pemain
tentunya posisi dari pemain tersebut akan berubah. Maka dari itu dalam
hal ini yang kita gunakan adalah posisi
if (Input.GetKey(KeyCode.A))
{
transform.position = new Vector3(transform.position.x -
0.3f, transform.position.y, transform.position.z);
}
Jika input keyboard A maka player akan ke kiri, begitu juga kontrol yang
lainnya memiliki peran masing-masing. Jika player ke kiri maka yang
berubah pastinya adalah sumbu X nya, maka dari itu sumbu X - 0.3f.
Tanda plus minus menentukan arah. Maka dibuatlah sebuah Vector3
agar posisinya berubah. Begitu juga input yang lainnya
Level Medium
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Berpindah ke Depan
if (Input.GetKey(KeyCode.W))
{
/// Memindahkan pemain dengan posisi
/// transform.position = new
Vector3(transform.position.x, transform.position.y,
transform.position.z + 0.3f);
// Berpindah ke Belakang
if (Input.GetKey(KeyCode.S))
{
/// Memindahkan pemain dengan posisi
/// transform.position = new
Vector3(transform.position.x, transform.position.y,
transform.position.z - 0.3f);
Rigidbody rb;
Sebelum menambahkan tekanan, kita harus deklarasi Rigidbodynya
terlebih dahulu
if (Input.GetKey(KeyCode.A))
{
/// Memindahkan pemain dengan bantuan tekanan
rb.AddForce(new Vector3(-3f * speed, 0f, 0f));
}
Dengan menambahkan AddForce, maka tekanan akan mendorong
rigidbody player. AddForce membutuhkan Vector3. Masih sama seperti
yang posisi, jika mau ke kiri maka sumbu X nya negatif. Begitu juga yang
lainnya. Challange: Coba buat Player melompat
Level Hard
4. Kalian bisa menghapus atau komen kode kalian yang sebelumnya. Edit
script kalian menjadi seperti di bawah.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
Kita hanya perlu 2 baris ini untuk mendapatkan input horizontal (Kiri dan
kanan) dan Vertical (Depan dan belakang). Anda bisa melihat nama-
nama seperti Vertical, Horizontal, di Edit > Project Settings > Input > di
sana terdapat beberapa nama Key. Pertanyaannya adalah kenapa kita
membuat player bergerak di Update, bukan di FixedUpdate?
Dikarenakan untuk mendapatkan input itu diperlukan deteksi per
frame, sedangkan FixedUpdate berjalan sesuai fixed time jadi tidak
disarankan menggunakan input di FixedUpdate.
if (controller.isGrounded)
{
movement = new Vector3(moveHorizontal, 0f,
moveVertical);
movement *= speed;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
movement *= speed;
// Rotate Player
transform.Rotate(0, Input.GetAxis("Horizontal"),
0);
}
}
2. Save scriptnya dan silakan mainkan.
C. Membuat Camera Mengikuti Pemain
Selanjutnya kita akan membuat main camera kita mengikuti player kita.
Sederhana saja. Pertama kita harus mengetahui logikanya. Cara mengikuti
player adalah posisi kamera yang kita inginkan ditambah posisi player. Ikuti
langkah-langkah di bawah agar paham.
1. Buatlah script bernama “CameraScript”. Lalu drag and drop
CameraScript ke MainCamera di hierarki. Lalu bukalah scriptnya
2. Editlah scriptnya menjadi seperti ini.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// LateUpdate: method yang dipanggil setelah Update
/// Method yang cocok untuk kamera
/// </summary>
private void LateUpdate()
{
// Kamera mengikuti player
// Posisi camera saat ini = posisi awal + posisi
Player
transform.position = cameraOffset +
player.transform.position;
}
}
3. Jangan lupa save scriptnya. Lalu kembali ke Unity dan atur agar posisi
kamera pas dengan posisi Player. Dan masukkan nilai posisinya ke
cameraOffset di Inspector. Anda bisa lihat valuenya di gambar di bawah.
GameObject player;
[SerializeField] Vector3 cameraOffset;
Pertama kita harus mendeklarasikan GameObject player untuk
mendapatkan objek player dan Vector3 cameraOffset untuk
menentukan posisi camera saat mengikuti player.
player = GameObject.Find("Player");
Kode di atas untuk mencari object yang bernama Player.
transform.position = cameraOffset +
player.transform.position;
Kode di atas menjelaskan bahwa Posisi kamera akan menjadi posisi
kamera untuk mendapatkan objek player ditambah posisi Player.
/// <summary>
/// LateUpdate: method yang dipanggil setelah Update
/// Method yang cocok untuk kamera
/// </summary>
private void LateUpdate()
{
if (player == null)
{
Debug.LogWarning("Player tidak ada");
return;
}
// Rotate camera
if (lookAt)
{
transform.LookAt(player.transform);
}
else
{
transform.rotation = player.transform.rotation;
}
}
}
2. Save scriptnya dan kembali ke Unity dan mainkan
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// LateUpdate: method yang dipanggil setelah Update
/// Method yang cocok untuk kamera
/// </summary>
private void LateUpdate()
{
// Kamera mengikuti player
// Posisi camera saat ini = posisi awal + posisi
Player
transform.position = cameraOffset +
player.transform.position;
}
}
2. Jangan lupa save scriptnya. Play scenenya untuk melihat hasilnya dan
gerakkanlah mouse kalian.
Penjelasan Kode
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
F. Scene Management
Selanjutnya adalah kita akan mempelajari cara mengganti scene yaitu
SceneOne dan SceneTwo. Ikuti langkah-langkah di bawah agar paham
1. Pertama buat script bernama SceneOneScript dan SceneTwoScript.
Yang nantinya akan digunakan untuk menghubungkan kedua scene
kita. Lalu drag and drop SceneOneScript ke objeck Scripts pada
SceneOne. Dan SceneTwoScript di salah satu Cube di SceneTwo.
2. Edit script SceneOneScript menjadi seperti ini.
sing UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.SceneManagement;
UnityEngine.SceneManagement merupakan library untuk
SceneManager maka diperlukan deklarasi library untuk mengakses
SceneManager.
if (Input.GetMouseButtonDown(0))
{
SceneManager.LoadScene("SceneOne");
}
Jika mouse diklik Scene akan berpindah sesuai nama scene yang
diperlukan. Input.GetMouseButtonDown(0) merupakan kondisinya. 0
merupakan klik bagian kiri. Sedangkan 1 merupakan klik bagian kanan.
Sekian tentang berpindah-pindah scene. Ini akan sangat berguna jika
kalian membikin game.
G. Audio
Selanjutnya adalah penjelasan lebih lanjut tentang Audio. Kita akan
mencoba membuat 3D Audio, audio yang hanya didengar pada jarak
tertentu, dan juga bagaimana cara mempertahankan Audio pada saat
Scene berpindah.
1. 3D Audio
Agar lebih realistis, kita akan membuat air yang suara airnya hanya bisa
kedengaran pada jarak tertentu saja. Ikuti langkah-langkah di bawah ini.
a. Pertama untuk mendapatkan air di Unity. Kita akan memakai
Standard Assets yang disediakan Unity sendiri. Tetapi harus
didownload terlebih dahulu. Pergi ke Unity Asset Store dan cari
Standard Assets. (Filenya akan dibagikan jika kuota tidak cukup)
Selanjutnya adalah kita akan memainkan audio, tetapi audio itu akan
tetap berlanjut walaupun kita sudah berpindah scene. Ikuti langkah-
langkah di bawah.
a. Buatlah empty game object dan beri nama BgSound. Drag and drop
audio JP Soundworks - Chill Time ke BgSound.
b. Lalu buat Script bernama BgSoundScript. Drag and drop script ini ke
object BgSound.
c. Edit scriptnya menjadi seperti di bawah ini.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
DontDestroyOnLoad(gameObject);
Fungsi DontDestroyOnLoad(gameObject) merupakan fungsi yang tidak
akan menghancurkan game object jika berpindah scene.
if (instance != null)
Destroy(gameObject); // Destroy gameObject yang dibuat
else
instance = this; // instance = BgSound
Instance yang tadi dideklarasikan berguna di sini. Logikanya sederhana
saja jika saat berpindah scene dari SceneOne ke SceneTwo, dan pada
saat berpindah kembali ke SceneOne hancurkan atau destroy Audio
yang diciptakan karena sudah ada atau sedang dimainkan sekarang.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
SceneTwoScript.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
2. Jangan lupa save dan kembali ke Unitynya. Selanjutnya play dan cobalah
berpindah ke SceneTwo dan perhatikan consolenya. Akan ada tertulis
“Coder Institute” pada console.
Penjelasan Kode
PlayerPrefs.SetString("nama_key", "nama_value");
PlayerPrefs.GetString("Name")
Untuk mendapatkan value yang kita sudah simpan kita harus
memasukkan key yang sama, yang artinya penamaan nama_key adalah
case sensitive.
Unity Tips
Gamification Series!!!
Source :
https://potion.social/en/blog/10-amazingly-successful-examples-of-
gamification/
https://gamificationdoesitwork.wordpress.com/2017/04/19/americas-
army/