Raycasting untuk menemukan klik mouse pada Objek di game unity 2d

Saya mencoba menghapus objek yang diklik mouse. Saya membuat game 2D menggunakan Unity3D 4.3 yang baru. Ini kode yang saya gunakan

void Update () {

    if (Input.GetMouseButtonDown(0)) 
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if(Physics.Raycast(ray,out hit))
        {
            isHit = false;
            Destroy(GameObject.Find(hit.collider.gameObject.name));

        }
    }

}

Kontrol tidak memasuki loop if bagian dalam. (isHit tidak ditetapkan sebagai salah).


person Bimal Bose B S    schedule 14.12.2013    source sumber
comment
Apakah benda tersebut mempunyai penumbuk? Apakah ia memiliki collider dan benda tegar?   -  person Happy Apple    schedule 14.12.2013
comment
Ya, itu berisi penumbuk dan benda tegar   -  person Bimal Bose B S    schedule 14.12.2013
comment
Saya menggunakan Physics2D dan berhasil!! Ini adalah kode yang dimodifikasi Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Asal Vector2 = Vector2 baru(ray.origin.x,ray.origin.y); RaycastHit2D hit = Physics2D.Linecast(orgin,-Vector2.up,1 ‹‹ LayerMask.NameToLayer(Mendukung)); Hancurkan(hit.collider.gameObject); Tapi sekarang bahkan ketika saya mengklik di tempat lain objeknya terhapus.. Saya pikir masalahnya ada pada arah raycast -Vector2.up.. Ke arah mana saya harus melemparkannya ??   -  person Bimal Bose B S    schedule 14.12.2013
comment
sebenarnya bukan bagian dari apa yang Anda minta, tetapi pada baris ini: Destroy(GameObject.Find(hit.collider.gameObject.name)); find tidak diperlukan. Cukup melakukan Destroy(hit.collider.gameObject); akan berfungsi dengan baik.   -  person Steven Mills    schedule 16.12.2013
comment
Saya tidak dapat menggunakan kondisi itu karena kesalahan. Dikatakan, tidak dapat mengonversi dari 'UnityEngine.Ray ke UnityEngine.vector2'. Sama seperti Ray Ray.   -  person David Dimalanta    schedule 12.02.2014


Jawaban (4)


Anda tidak dapat menggunakan fungsi fisika 3D pada materi 2D baru. Gunakan fungsi 2D sebagai gantinya. Contoh:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

if(hit.collider != null)
{
    Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
person Esa    schedule 03.03.2014

Pertanyaan ini agak lama, tapi saya sedang mencari cara untuk mendapatkan GameObject dengan klik mouse di unity 2D, dan Jawaban dari Esa hampir membantu saya, tapi saya tidak mampu membuatnya berfungsi, jadi dengan a sedikit riset saya melihat bahwa Camera.main.ScreenToWorldPoint mengembalikan bagian tengah area layar Kamera dan berfungsi dengan baik. itu diperlukan untuk memasukkan perbedaan posisi Z dari kamera dan GameObject terdekat. Kamera saya disetel secara default di -10 dan GameObject saya di 0, jadi yang perlu saya lakukan hanyalah menyetel Input.mousePosition.z saya ke 10. Jadi, jika Anda mendapat masalah saat bekerja dengan kode Esa (seperti saya :( ) kode di bawah ini dapat membantu Anda:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)), Vector2.zero);

if(hit.collider != null)
{
    Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
person Wylht Heartless    schedule 07.01.2015

Pertama-tama lampirkan segala jenis penumbuk 2D ke GameObject Anda, lalu pilih salah satu solusi tersebut;

Kasus Pertama - Jika ada lebih dari 1 GameObject di atas satu sama lain, dan Anda mencoba memahami GameObject tertentu yang diklik:

void Update ()
{
    if (Input.GetMouseButtonDown (0)) {
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
        RaycastHit2D[] hits = Physics2D.GetRayIntersectionAll (ray, Mathf.Infinity);
        foreach (var hit in hits) {
            if (hit.collider.name == name) {
                MyFunction ();
            }
        }
    }
}

Kasus ke-2 - Jika hanya ada 1 GameObject, dan Anda mencoba memahami jika diklik:

void Update ()
{
    if (Input.GetMouseButtonDown (0)) {
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
        RaycastHit2D hit = Physics2D.GetRayIntersection (ray, Mathf.Infinity);
        if (hit.collider != null && hit.collider.name == name) {
            MyFunction ();
        }
    }
}
person Ahmet Hayrullahoglu    schedule 03.11.2016

Anda harus memasang mesh collider (collider apa pun) dengan objek Anda terlebih dahulu untuk memasukkan If bagian dalam. Kemudian,

Destroy(hit.collider.gameObject); 

hanya akan melakukan pekerjaan itu.

Mungkin ada pekerjaan lain di sekitar sini.

void Update () {

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if(Physics.Raycast(ray,out hit))
    {
        if(Input.GetMouseButtonDown(0))
        {
            isHit = false;
            Destroy(hit.collider.gameObject);
        }
    }
}
person Reaz Murshed    schedule 18.02.2014