Unity OnTriggerEnter dan OnTriggerExit tertunda atau tidak berfungsi di perangkat seluler

Saya mencoba menentukan apakah pemutar tersebut di-ground atau tidak, dan menggunakan pemutar desktop, metode yang dijelaskan di bawah ini berfungsi dengan baik, tetapi ketika dikompilasi ke Android berperilaku agak aneh, saya tidak yakin apakah itu hanya tertunda atau apa, tapi bool pembaruannya jarang seperti yang seharusnya.

Kode yang digunakan untuk menentukan apakah pemain di-ground:

void OnTriggerEnter2D(Collider2D other) {
    if (other.tag == "NormalGround") {
        player.Grounded = true;
    }
}

void OnTriggerExit2D(Collider2D other){
    if (other.tag == "NormalGround") {
        player.Grounded = false;
    }
}

Di desktop ini berfungsi dengan baik, seperti yang didemonstrasikan di sini dengan menulis var yang di-ground ke kotak teks di Update():

https://www.youtube.com/watch?v=CV0h18dz1cg

Namun di Android, collidernya seolah-olah sedang tertinggal:

https://www.youtube.com/watch?v=c66uw2_NhrQ

Anda dapat melihat di akhir video bahwa var hanya berubah setelah saya membuat karakternya melompat... (teks palsu yang sebenarnya diperbarui setiap frame sehingga tidak diperbarui pada Jump()

Beginilah cara collider diatur:

Hirarki:

Hierarki

GO yang saya gunakan untuk groundcheck:

Pemeriksaan lapangan

Cara menyiapkan platform/ground:Platform

1: Pemicu yang digunakan untuk mendeteksi saat pemain di-ground (terlihat di inspektur)

2: Collider digunakan untuk menghentikan pemain jatuh melalui sprite (bukan di inspektur)

Kode Lompat():

    public void Jump ()
{
    if (!(PlayerDoubleJumped) && (Grounded) || ((!(Grounded) && (!PlayerJumped)))) {
        rb.velocity = new Vector2 (rb.velocity.x, JumpForce);
        animator.Play ("JumpCycle");
        PlayerJumped = true;
    } else if (!(Grounded) && (!(PlayerDoubleJumped)) && (PlayerJumped)) {
        rb.velocity = new Vector2 (rb.velocity.x, DoubleJumpForce);
        animator.Play ("JumpCycle");
        PlayerDoubleJumped = true;
    }
}

Inilah cara saya memindahkan pemain:

this.transform.rotation = Quaternion.Euler (new Vector3 (0, 0, 0)); rb.velocity = new Vector2 (RunningSpeed, rb.velocity.y);

Pengaturan Fisika2D (default):

Fisika 2d

Saya menggunakan Persatuan 5.5.0

Adakah yang tahu apa masalahnya di sini?


person Tiaan    schedule 20.06.2017    source sumber
comment
Ini menarik. Ini biasanya terjadi ketika Anda mengacaukan Pengaturan Fisika. Saya tidak tahu karena proyek itu tidak ada di depan saya. Bagaimana Anda memindahkan pemain? Bagaimana kabarmu melompat? Bisakah Anda memposting kode bergerak dan melompat?   -  person Programmer    schedule 20.06.2017
comment
Dugaan saya adalah interval fisika terlalu besar di pengaturan Anda.   -  person Farhan    schedule 20.06.2017
comment
@Programmer Akan menambahkan itu ke pertanyaan sekarang   -  person Tiaan    schedule 20.06.2017
comment
@Farhan Semuanya default sejauh menyangkut pengaturan fisika global...   -  person Tiaan    schedule 20.06.2017


Jawaban (1)


Kemungkinan perbaikan:

  • Jika Anda menggunakan mesh collider, beralihlah menggunakan box collider. Ini berfungsi dari waktu ke waktu ketika mesh collider bertindak samar.

  • Gunakan OnTriggerStay, bukan OnTriggerEnter.

person Doh09    schedule 09.09.2017