ฉันบอกว่าจะใช้Update()สำหรับกราฟิกและFixedUpdate()ฟิสิกส์ FixedUpdate()แต่บางครั้งปัจจัยการผลิตของฉันจะไม่ลงทะเบียนเมื่อฉันใช้ มันใช้งานได้ดีถ้าฉันใช้Update()กับทุกสิ่ง
ฉันควรจะรำคาญFixedUpdate()หรือฉันกำลังทำอะไรผิดหรือเปล่า?
ฉันบอกว่าจะใช้Update()สำหรับกราฟิกและFixedUpdate()ฟิสิกส์ FixedUpdate()แต่บางครั้งปัจจัยการผลิตของฉันจะไม่ลงทะเบียนเมื่อฉันใช้ มันใช้งานได้ดีถ้าฉันใช้Update()กับทุกสิ่ง
ฉันควรจะรำคาญFixedUpdate()หรือฉันกำลังทำอะไรผิดหรือเปล่า?
คำตอบ:
FixedUpdateสามารถทำงานได้เร็วหรือช้ากว่าUpdateทั้งนี้ขึ้นอยู่กับการตั้งค่าของคุณ สิ่งนั้นจะขึ้นอยู่กับโหลด (ความเร็วในการUpdateทำงาน) และความเร็วที่คุณตั้งไว้FixedUpdate(ดูได้ใน Edit-> Project Settings-> Time) โดยหลักการแล้วUpdateจะทำงานหนึ่งครั้งต่อเฟรมนี่คือที่ที่คุณต้องการจับภาพอินพุต หากคุณจำเป็นต้องดำเนินการกับอินพุตในFixedUpdateวิธีการ (เช่นการควบคุมร่างกายฟิสิกส์) ให้ตั้งค่าสถานะUpdateแล้วจัดการกับสิ่งต่อไปนี้FixedUpdate:
bool leftMouseDown = false;
void Update()
{
if(Input.GetMouseButtonDown(0))
leftMouseDown = true;
}
void FixedUpdate()
{
if(leftMouseDown )
{
//update physics bodies with input
leftMouseDown = false;
}
}
ยังคงเป็นความคิดที่ดีในการควบคุมฟิสิกส์จากFixedUpdateวิธีการเนื่องจากฟิสิกส์ไม่น่าจะต้องมีการปรับปรุงบ่อยครั้งและฟิสิกส์ในการอัพเดทแบบคงที่นั้นง่ายต่อการทำนาย ( ดีกรี ) กว่าฟิสิกส์ในการอัพเดทตัวแปร
FixedUpdateถ้าฉันได้รับผลที่ไม่คาดคิดผมอาจจะคำนวณค่าเฉลี่ยของการทำงานของค่าแกนจนกว่าจะมีการประมวลผลโดย นั่นเป็นหนึ่งในสิ่งเหล่านั้นที่ต้องมีการทดสอบการเล่นเพื่อให้เข้าใจว่า "รู้สึก" ถูกต้องจริง ๆ
คุณต้องเข้าใจสิ่งที่แต่ละคนทำ Update()ได้รับการเรียกบ่อยเท่าที่จะทำได้ (ไม่แน่ใจว่ามันอาจจะถูกต่อยอด) ไม่ว่าจะด้วยวิธีใด - แต่ละเฟรม FixedUpdate()ได้รับการเรียกทุกระยะเวลาคงที่ (เพราะฉะนั้น "คงที่")
การป้อนข้อมูลจะUpdate()ง่ายเหมือนที่ (เพราะอย่างที่คุณสังเกตเห็นFixedUpdate()อาจไม่ได้รับการป้อนข้อมูลเหตุการณ์) เกมลอจิกอาจเข้าไปในหนึ่งเดียว FixedUpdate()ฟิสิกส์จะต้องมีการกำหนดและที่ว่าทำไมมันควรจะอยู่ใน สิ่งอื่น ๆ ไม่จำเป็นต้อง ขึ้นอยู่กับการใช้งานที่คุณต้องตัดสินใจว่าหน้าที่ใดเหมาะสม
Althouth เป็นสิ่งที่ควรค่าแก่การกล่าวว่าแอปพลิเคชั่นบางตัวมีการอัพเดทลอจิกเกมทั้งหมดFixedUpdate()(แม้ภายนอกUnity) - มันเรียกว่า "loop step game loop" การมีรหัสการอัปเดตทั้งหมดในฟังก์ชั่นขั้นตอนคงที่ช่วยให้คุณกำหนดได้และทำให้แอปของคุณมีแนวโน้มที่จะทำงานในลักษณะเดียวกันทุกครั้ง (และในแต่ละอุปกรณ์) ยังช่วยให้คุณสมบัติแฟนซีบางอย่างเช่นไกล