Unity OnTriggerEnter และ OnTriggerExit ล่าช้าหรือใช้งานไม่ได้บนมือถือ

ฉันกำลังพยายามพิจารณาว่าเมื่อใดที่เครื่องเล่นถูกต่อสายดินหรือไม่ และเมื่อใช้เครื่องเล่นบนเดสก์ท็อป วิธีการที่อธิบายไว้ด้านล่างนี้ทำงานได้อย่างสมบูรณ์แบบ แต่เมื่อคอมไพล์เป็น Android มีพฤติกรรมค่อนข้างแปลก ฉันไม่แน่ใจว่ามันแค่ล่าช้าหรืออะไร แต่บูล มันกำลังอัปเดตไม่ค่อยเป็นสิ่งที่ควรจะเป็น

รหัสที่ใช้ในการพิจารณาว่าผู้เล่นถูกต่อสายดินหรือไม่:

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

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

บนเดสก์ท็อป สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ ดังตัวอย่างที่นี่โดยการเขียน var ที่ต่อสายดินลงในกล่องข้อความบน Update():

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

แต่บน Android เกือบจะเหมือนกับว่าชนกันกำลังล้าหลัง:

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

คุณสามารถดูได้ในตอนท้ายของวิดีโอว่า var เปลี่ยนแปลงเฉพาะหลังจากที่ฉันทำให้ตัวละครกระโดดแล้วเท่านั้น... (ข้อความเท็จจริงได้รับการอัปเดตทุกเฟรม จึงไม่อัปเดตใน Jump()

นี่คือวิธีการตั้งค่า Colliders:

ลำดับชั้น:

ลำดับชั้น

GO ที่ฉันใช้สำหรับการตรวจสอบพื้นดิน:

ตรวจสอบเบื้องต้น

วิธีการตั้งค่าแพลตฟอร์ม/กราวด์:แพลตฟอร์ม

1: ทริกเกอร์ที่ใช้ในการตรวจจับเมื่อผู้เล่นถูกต่อสายดิน (มองเห็นได้ในตัวตรวจสอบ)

2: ผู้ชนใช้เพื่อหยุดผู้เล่นที่ตกผ่านสไปรต์ (ไม่ใช่ในตัวตรวจสอบ)

รหัส Jump():

    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;
    }
}

นี่คือวิธีที่ฉันจะย้ายเครื่องเล่น:

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

การตั้งค่า Physics2D (ค่าเริ่มต้น):

ฟิสิกส์ 2d

ฉันใช้ความสามัคคี 5.5.0

ไม่มีใครมีความคิดว่าปัญหาคืออะไรที่นี่?


person Tiaan    schedule 20.06.2017    source แหล่งที่มา
comment
นี่เป็นสิ่งที่น่าสนใจ สิ่งนี้มักเกิดขึ้นเมื่อคุณยุ่งกับการตั้งค่าฟิสิกส์ ไม่รู้เพราะโครงการไม่อยู่ตรงหน้า คุณจะเคลื่อนย้ายผู้เล่นอย่างไร? กระโดดยังไงล่ะ? คุณสามารถโพสต์รหัสการเคลื่อนย้ายและการกระโดดได้หรือไม่?   -  person Programmer    schedule 20.06.2017
comment
ฉันเดาว่าช่วงเวลาทางฟิสิกส์ใหญ่เกินไปในการตั้งค่าของคุณ   -  person Farhan    schedule 20.06.2017
comment
@Programmer จะเพิ่มคำถามนั้นทันที   -  person Tiaan    schedule 20.06.2017
comment
@Farhan ทุกอย่างเป็นค่าเริ่มต้นเท่าที่เกี่ยวข้องกับการตั้งค่าฟิสิกส์ทั่วโลก ...   -  person Tiaan    schedule 20.06.2017


คำตอบ (1)


การแก้ไขที่เป็นไปได้:

  • หากคุณใช้ mesh Collider ให้เปลี่ยนไปใช้ Box Collider สิ่งนี้จะเกิดขึ้นเป็นครั้งคราวเมื่อตัวชนกันของตาข่ายแสดงอาการไม่ชัดเจน

  • ใช้ OnTriggerStay แทน OnTriggerEnter

person Doh09    schedule 09.09.2017