Menampilkan Object dengan ScreenToWorldPoint

Hallo

Balik lagi dengan tutorial unity, kemaren saya sudah membahas tentang fungsi dari WorldToScreenPoint, dan sekarang saya ingin membahas kebalikan dari fungsi tersebut, yaitu ScreenToWorldPoint.

ScreenToWorldPoint adalah fungsi cari Camera, yang digunakan untuk mengetahui posisi titik/point dari screen dan menampilkan posisi tersebut kedalam world space. Oke langsung aja pada contoh percobaan.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using System.Collections;

public class ScreenToWorld : MonoBehaviour {

public GameObject kotak;

private Camera thisCamera;
// Use this for initialization
void Start () {
thisCamera = this.GetComponent<Camera> ();
}

// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (0)) {
Instantiate (kotak, Input.mousePosition, Quaternion.identity);
}
}
}

screenshoot unity

Pada code diatas saya ingin membuah sebuah object dengan posisi mouse saya, tetapi pada pelaksaanya memang object tersebut berhasil di buat, tetapi posisinya tidak seperti yang saya harapkan, sekarang saya coba mengganti script tesebut dengan menambahkan fungsi ScreenToWorldPoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections;

public class ScreenToWorld : MonoBehaviour {

public GameObject kotak;

private Camera thisCamera;
// Use this for initialization
void Start () {
thisCamera = this.GetComponent<Camera> ();
}

// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (0)) {
Vector3 screenPos = thisCamera.ScreenToWorldPoint(Input.mousePosition);
screenPos.z = 0; // Saya berikan nilai 0 karena jika z object sama dengan camera maka tidak akan ter-render;
Instantiate (kotak, screenPos, Quaternion.identity);
}
}
}

screenshoot unity screen to worold

Yup dengan code diatas kita bisa menampilkan object sesuai dengan posisi yang saya harapkan 🙂

Saya juga ingin memperlihatkan contoh lainnya, jIka kita memiliki 2 camera yang berbeda kita bisa memindahkan posisi Object dari camera A ke kamera B secara lebih smooth kita bisa menggunakan script ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using UnityEngine;
using System.Collections;

public class kotakMove : MonoBehaviour {

public Camera positionFirst;
public Camera positionTarget;
private bool comeToSecondCamera = false;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
Vector3 movementPos = new Vector3 ();
movementPos = this.transform.position;
movementPos.x += 0.5f;
movementPos.z = 0;
this.transform.position = movementPos;

if(positionFirst.WorldToScreenPoint(this.transform.position).x>positionFirst.pixelWidth && !comeToSecondCamera){
this.transform.position = positionTarget.ScreenToWorldPoint (new Vector3 (356, positionFirst.WorldToScreenPoint(this.transform.position).y));
comeToSecondCamera = true;

Vector3 newPOS = this.transform.position;
newPOS.z = 0;
this.transform.position = newPOS;
}
}
}

sampleJumpIMG

Dan sekarang kita lihat hasilnya, disini saya membuat 2 video untuk menjalankan kotak, yang pertama hanya run saja, dan yang kedua berjalan frame by frame sehingga terlihat lompatan yang dibuat

Kotak Berjalan versi cepat

Kotak Berjalan versi frame-by-frame

Okeh itu dulu dari saya, next saya akan coba membahas ScreenPointToRay. Owh ya sebelum saya menyelesaikan tulisan saya ingin memberitahuan bahwa tutorial ini adalah hasil request dari teman-teman di facebook, jika kalian ingin request tutorial tentang unity kalian bisa menulisnya di kolom komentar.

okey selesai, dan sampai jumpa lagi 😀

refrensi :

Disclaimer :
saya menulis tutorial ini dengan kemampuan dan pengalaman saya yang terbatas, jadi jika kalian ada sangahan ataupun ingin membenarkan tulisaan saya, saya akan melakukannya jika kalian bisa memberikan refrensi sehingga saya bisa lebih belajar lagi. Dan masalah request tutorial, seperti yang saya bilang sebelumnya, “Dengan kemampuan dan pengalaman saya yang terbatas” kemungkinan tutorial yang anda minta tidak bisa saya berikan.