ชดเชยในโทรศัพท์เอียง ข้อบกพร่องของมาตรวัดความเร่ง

ฉันกำลังสร้างเกมที่ค่อนข้างแข่งรถ รถเคลื่อนไปข้างหน้าโดยอัตโนมัติ แต่หากต้องการหมุนไปด้านข้าง ฉันจะวัดการหมุนของโทรศัพท์ เนื่องจากฉันต้องวัดความเร่งบนแกน x ฉันจึงใช้:

Direction.x = Input.acceleration.x * Time.deltaTime; 
Transform.translate (Direction.x * 5f);

เมื่อฉันเล่นเกม รถจะหมุนตามที่ฉันต้องการเมื่อฉันเอียงโทรศัพท์บนแกน x อย่างไรก็ตาม ปัญหาคือเมื่อฉันวางโทรศัพท์ไว้บนโต๊ะ รถเคลื่อนไปทางซ้ายช้ามาก ซึ่งไม่สมเหตุสมผลเลยเพราะมันทำมุม 0 องศา เพื่อให้แน่ใจว่านี่ไม่ใช่เพราะพื้นผิวโต๊ะ ฉันจึงเล่นมันใน Unity Simultator และมันก็เกิดขึ้นแบบเดียวกัน รถเดินทางออกช้ามาก เมื่อฉัน debug.log มันบอกว่า Direction.x มีค่าประมาณ -0.000147... ซึ่งเป็นตัวเลขที่น้อยมาก มีวิธีแก้ไขปัญหานี้หรือไม่ เมื่อโทรศัพท์นิ่ง Direction.X ของรถจะเป็น 0 หรือรหัสของฉันมีอะไรผิดปกติ


person Infinity Max    schedule 05.11.2016    source แหล่งที่มา


คำตอบ (1)


บางครั้งฟังก์ชัน Unity Translate บกพร่อง เนื่องจากใช้การดำเนินการมาตรฐานกับเวกเตอร์ได้ดีกว่า เพียงลองตัดค่าต่ำสุดของมาตรความเร่ง:

float min_value = 0.01f

if(Mathf.Abs(Input.acceleration.x) < min_value)
    Direction.x = Input.acceleration.x * Time.deltaTime;
else
    Direction.x = 0;

transform.position = transform.position + Direction.x * 5f;
person OnionFan    schedule 05.11.2016