ฉันกำลังพยายามพิจารณาว่าเมื่อใดที่เครื่องเล่นถูกต่อสายดินหรือไม่ และเมื่อใช้เครื่องเล่นบนเดสก์ท็อป วิธีการที่อธิบายไว้ด้านล่างนี้ทำงานได้อย่างสมบูรณ์แบบ แต่เมื่อคอมไพล์เป็น 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 (ค่าเริ่มต้น):
ฉันใช้ความสามัคคี 5.5.0
ไม่มีใครมีความคิดว่าปัญหาคืออะไรที่นี่?