4.3.2 Implementasi Pemodelan Animasi Objek
4.3.3.1. Tampilan Splash Screen
Berikut adalah penulisan kode pada halaman menu utama, yang merupakan halaman pertama saat kita membuka aplikasi ini. Tampilan splash screen ini di buat dalam scene yang diberi nama splash screen. Kode dibawah dapat dijelaskan bagaimana scenetampilan splash screen hanya berjalan selama 5 detik saja. Ketika waktu yang berhitung mundur berjalan sudah mencapai detik ke-0, maka aplikasi akan melanjutkan ke scene selanjutnya. Halaman tersebut ditampilkan secara popup dengan tipe slideshow. Berikut merupakan potongan kode program pada scene splash screen :
//Kode membuat tampilan splash screen
public class SplashScreen : MonoBehaviour { public int DelayTime;
public string NextLevel; void Start ()
{
// Mengatur lebar dan tinggi gambar
guiTexture.pixelInset = new Rect (-400, 0, Screen.width, Screen.height); StartCoroutine (LoadNextScene ()); } void Update () { } IEnumerator LoadNextScene () {
// Memanggil fungsi delay selama beberapa detik
yield return new WaitForSeconds (DelayTime); if (NextLevel != "")
{
// Memanggil scene lain dalam sebuah project Application.LoadLevel(1);
} }
Gambar 4.30Tampilan Splash Screen 4.3.3.2. Tampilan Menu Utama
Pada scene menu utama terdapat empat buah menu pilihan yaitu play
game, countinue, about, dan quit. Sceneini merupakan scene utama
darikeseluruhan scene, karena semua scene yang dibuka dapat kembali ke scene menu utama ini. Kode di bawah merupakan kode yang menggambarkan bagaimana akibat dari aktivitas yang dilakukan oleh user pada menu utama. Seperti ketika button play gamedi tekan maka scene akan berpindah ke scene 2 yaituscene halaman game labirin level satu. Lalu ketika tombol countinue di tekan makan aplikasi akan menampilkan halaman yang tadi dimainkan. Ketika button
about atau di tekan maka akan menampilkan slideshow berisi informasi mengenai
aplikasi dan pembuat aplikasi tersebut. Dan ketika button quit di sentuh maka akan keluar dari aplikasi
//Kode Membuat Menu Utama
Public class MainMenu : MonoBehaviour { public GUISkin skin;
public GUITexture myguiTexture; void OnGUI()
{
GUI.skin = skin;
// Mengatur lebar dan tinggi gambar
myguiTexture.pixelInset = new Rect (-400, 0, Screen.width, Screen.height);
// Mengatur lebar dan tinggi tombol button Play Game
// Jika play game ditekan maka akan menampilkan halaman permainan labirin GUI.Label (new Rect (10, 10, 150, 50), "");
if (GUI.Button (new Rect (10, 200, 300, 50), "Play Game")) { PlayerPrefs.SetInt("Level Completed", 0); Application.LoadLevel (2); } if(PlayerPrefs.GetInt("Level Completed") > 0) {
// Mengatur lebar dan tinggi tombol button Continue
// Jika continue ditekan maka akan menampilkan halaman permainan if (GUI.Button(new Rect(10,270,300,50), "Continue"))
{
Application.LoadLevel(PlayerPrefs.GetInt("Level Completed")); }
}
// Mengatur lebar dan tinggi tombol button About
// Jika about ditekan maka akan menampilkan halaman about if (GUI.Button (new Rect (10, 350, 300, 50), "About"))
{
PlayerPrefs.SetInt("Level Completed", 0); Application.LoadLevel (5);
}
// Mengatur lebar dan tinggi tombol button Quit // Jika quit ditekan maka akan keluar dari aplikasi
if (GUI.Button(new Rect(10,650,200,50), "Quit")) {
Application.Quit(); }
} }
Gambar 4.31 Tampilan Menu Utama 4.3.3.3. Tampilan Scene Game Labirin
Halaman ini dapat di akses ketika memilih menu play game yang ada pada halaman menu utama. Halaman game labirin ini berisi karakter utama, karakter musuh, objek labirin, objek rintangan dan objek hadia. Game labirin ini terdiri dari tiga level yang berbeda. Kode di bawah merupakan kode yang menggambarkan bagaimana akibat dari aktivitas yang dilakukan oleh user pada saat memainkan permainan. Kode dibawah ini menjelaskan bagaimana semua objek bekerja.
Gambar 4.32 Scene Game Labirin level 1 // kode membuat musuh atau karakter musuh bergerak public class Bergerak : MonoBehaviour {
public Transform[] TitikBergerak; public float KecepatanBergerak; private int currentPoint; void Start ()
{
transform.position = TitikBergerak [0].position; currentPoint = 0; } void Update () { if(transform.position == TitikBergerak[currentPoint].position) { currentPoint ++; } if (currentPoint >= TitikBergerak.Length) { currentPoint = 0; } transform.position = Vector3.MoveTowards (transform.position, TitikBergerak [currentPoint].position, KecepatanBergerak * Time.deltaTime);
// kode membuat pemain atau karakter utama bergerak dan merespon sesuatu public class Player : MonoBehaviour {
public GameManager manager;
public GameObject KembangApi; public float KecepatanBergerak; private float maxSpeed = 5f; private Vector3 input; private Vector3 spawn; public AudioClip[] audioClip; // Use this for initialization void Start ()
{
spawn = transform.position;
manager = manager.GetComponent <GameManager> (); }
void FixedUpdate () {
// Fungsi mengatur kecepatan bergerak karakter utama
input = new Vector3 (Input.GetAxisRaw ("Horizontal"), 0, Input.GetAxisRaw ("Vertical"));
if (rigidbody.velocity.magnitude < maxSpeed) {
rigidbody.AddForce (input * KecepatanBergerak); } if (transform.position.y < -2) { die(); } }
void OnCollisionEnter(Collision other) {
// Fungsi ketika karakter utama menyentuh objek musuh if (other.transform.tag == "Musuh") {
die(); }
}
void OnTriggerEnter(Collider other) {
// Fungsi ketika karakter utama menyentuh objek musuh if (other.transform.tag == "Musuh") {
die (); }
//Fungsi ketika karakter utama menyentuh objek finish if (other.transform.tag == "Masuk") { PlaySound (1); Time.timeScale = 0f; manager.CompleteLevel (); } }
// Fungsi memainkan suara void PlaySound(int clip) {
audio.clip = audioClip [clip]; audio.Play ();
}
// Fungsi reaksi ketika karakter utama menyentuh objek musuh atau objek rintangan
void die () { Instantiate(KembangApi, transform.position, Quaternion.Euler(270,0,0)); transform.position = spawn ; } }
// kode membuat objek rintangan bergerak public class Rintangan : MonoBehaviour {
public float DelayTime; void Start () { StartCoroutine (Go ()); } IEnumerator Go() { while (true) { animation.Play();
//Kode Game Manager
public class GameManager : MonoBehaviour {
//Pengaturan Hadia
public int currentScore; public int highscore; public int HadiaCount;
private int TotalHadiaCount; public GameObject HadiaParent;
public int currentLevel = 0; public int unlockedLevel;
//Pengaturan Waktu public Rect timerRect;
public Color warningColorTime; public Color defaultColorTime; public float startTime;
private string currentTime;
//Pengaturan GUI Skin public GUISkin skin;
private bool Completed = false; private bool ShowWinScreen = false;
public int winScreenWidth, winScreenHight; void Update ()
{
if (!Completed) {
startTime -= Time.deltaTime;
currentTime = string.Format ("{0:0.0}", startTime); if (startTime <= 0)
void Start() {
TotalHadiaCount = HadiaParent.transform.childCount;
if (PlayerPrefs.GetInt ("Level Completed") > 0) {
currentLevel = PlayerPrefs.GetInt ("Level Completed"); } else { currentLevel = 2; } }
public void CompleteLevel() { ShowWinScreen = true; Completed = true; } void LoadNextLevel() { Time.timeScale = 1f; if (currentLevel < 4) { currentLevel += 1; print (currentLevel); SaveGame(); Application.LoadLevel (currentLevel); } else {
print ("Selamat Kamu Memenangkan Permainan.."); }
}
void SaveGame() {
PlayerPrefs.SetInt("Level Completed", currentLevel); PlayerPrefs.SetInt("Level " + currentLevel.ToString() + " score", currentScore);
{
GUI.skin = skin; if (startTime < 5f) {
skin.GetStyle ("Timer").normal.textColor = warningColorTime; } else { skin.GetStyle ("Timer").normal.textColor = defaultColorTime; }
GUI.Label (timerRect, currentTime, skin.GetStyle("Timer")); GUI.Label (new Rect (45, 100, 200, 200), HadiaCount.ToString() + "/" + TotalHadiaCount.ToString ());
if (ShowWinScreen) {
Rect winScreenRect = new Rect(Screen.width/2 -
(Screen.width *.5f/2), Screen.height/2 - (Screen.height *.5f/2), Screen.width *.5f, Screen.height *.5f);
GUI.Box(winScreenRect, "Kamu Mau Lanjut ?"); int gameTime = (int)startTime;
currentScore = HadiaCount * gameTime; if (GUI.Button(new Rect (winScreenRect.x +
winScreenRect.width - 170, winScreenRect.y + winScreenRect.height - 60, 150,40), "Continue"))
{
LoadNextLevel(); }
if (GUI.Button(new Rect (winScreenRect.x + 20, winScreenRect.y + winScreenRect.height - 60, 100,40), "Quit"))
{
Application.LoadLevel(1); Time.timeScale = 1f; }
GUI.Label(new Rect(winScreenRect.x + 20, winScreenRect.y + 40,300,50), currentScore.ToString() + " Score");
GUI.Label(new Rect(winScreenRect.x + 20, winScreenRect.y + 60,300,50), "Completed Level " + currentLevel);
} }