Thursday, May 7, 2015

Simple minecraft Build System pada Unity Engine


Requirement : Sudah memahami basic unity
             














Diatas adalah texture yang akan dipakai dalam contoh game kita

            Buatlah material diffuse untuk masing-masing dari 3 texture diatas, atau cara mudahnya adalah buat 3 quad dalam scene kemudian drag and drop texture yang sudah diimport ke masing-masing quad


Hubungkan semua quad menjadi 1 bentuk cube 6 face seperti gambar dibawah, dan masukkan semua ke sebuat gameobject parent dengan nama DirtCubes, kemudian jadikan sebuat prefab, rename masing-masing facenya, perhatikan arah kompas utama, pastikan bahwa hadapannya adalah x ke kanan, z ke depan dan y ke atas.


Perbanyak instance dari Dirt Cube hingga membentuk lantai yang cukup.
Import package character controller untuk menggunakan FirstPerson mode.


Berikan sebuah script baru dengan nama PlayerController pada game object FirstPersonController, dengan isi sebagai berikut

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour
{

    RaycastHit hit;
    Transform cam;
    public GameObject dirtCube;
    public GameObject dirtCubeSample;
    void Awake()
    {
        cam = Camera.main.transform;
    }
    void Start()
    {
        //untuk sebelum versi 5.0.1p2
        //Screen.showCursor = false;
        //setelah versi 5.0.1p2
        Cursor.visible = false;
    }
    void Update()
    {
        Vector3 addedDistance = Vector3.zero;
        if (Physics.Raycast(cam.position, cam.forward, out hit, 500f))
        {
            if (hit.collider.gameObject.name == "Top")
            {
                addedDistance = new Vector3(0, 1, 0);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
            if (hit.collider.gameObject.name == "Bottom")
            {
                addedDistance = new Vector3(0, -1, 0);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
            if (hit.collider.gameObject.name == "Left")
            {
                addedDistance = new Vector3(-1, 0, 0);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
            if (hit.collider.gameObject.name == "Right")
            {
                addedDistance = new Vector3(1, 0, 0);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
            if (hit.collider.gameObject.name == "Front")
            {
                addedDistance = new Vector3(0, 0, -1);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
            if (hit.collider.gameObject.name == "Back")
            {
                addedDistance = new Vector3(0, 0, 1);
                dirtCubeSample.gameObject.transform.position = hit.collider.transform.parent.position + addedDistance;
            }
        }
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            if (addedDistance != Vector3.zero)
                GameObject.Instantiate(dirtCube, hit.collider.transform.parent.position + addedDistance, Quaternion.identity);
        }
    }
}


Variable dirtCube mengambil object untuk inisialisasi dari prefab cube
Variable dirtCubeSample mengambil object dari salah satu cube pada scene, dan collider khusus pada 1 object ini di nonaktifkan.



Hasil akhir seperti gambar dibawah

No comments:

Post a Comment