Thursday, May 7, 2015

Penggunaan Raycasting pada Unity Engine


Raycasting merupakan cara untuk melakukan pengecekan dengan menggunakan suatu garis lurus yang tidak terlihat untuk mendapatkan object apa saja yang ada di depannya dan dimanakah titik collision yang mengenai Ray.
Berikut beberapa metode raycast yang sering digunakan :

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
    public float DistanceToGround { get; set; }

    void Update() {
        RaycastHit hit;
        if(Physics.Raycast(transform.position, -Vector3.up, out hit))
        {
            DistanceToGround = hit.distance;
        }
    }
}

Penggunaan raycast dari transform.position dari misalkan player. –Vector3.up memiliki value (0,-1,0) yang berarti kearah bawah.  out hit merupakan cara untuk mengirim suatu variable secara reference pada C#. pada kasus diatas digunakan untuk mengetahui berapakah jarak antara player ke tanah.


using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
    public float DistanceToGround { get; set; }

    void Update() {
        RaycastHit hit;
        if(Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f))
        {
            DistanceToGround = hit.distance;
        }
    }
}

Sama dengan contoh sebelumnya, namum pada contoh kali ini terdapat parameter tambahan yaitu 100.0F, yang berarti jarak pengecekan maksimal pada raycast adalah 100 unit. Bila lebih dari itu maka tidak akan terdeteksi. Salah satu kegunaannya adalah untuk pengaplikasian pistol dalam game, dimana rata-rata game yang menggunakan pistol sebenarnya tidak benar-benar meng-spawn object peluru, namun dengan cara memperlihatkan efek percikan dekat pistol, dan dengan menggunakan raycast untuk menentukan dimanakah akan mucul bekas decals. Dan biasanya terdapat jarak batas terjauh untuk senjata-senjata tertentu. Jarak pendeteksian yang terlalu jauh juga akan memiliki impact terhadap performa sendiri.

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
    void Update() {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 100)) {
            Debug.DrawLine(ray.origin, hit.point);
        }
    }
}

Pada contoh ini pengambilan Ray adalah melalui kamera, atau view kita sebagai player. Digunakan dalam kondisi kita hendak menentukan dimanakah mouse klik kita akan mendarat pada game world. Seperti contoh pada game Dota, kita melakukan klik kanan pada mouse, kemudian raycast akan menentukan dimanakah titik tujuan yang kita maksud dengan menggunakan kalkulasi lebih kurang seperti code ini.

No comments:

Post a Comment