ฉันบอกว่าจะใช้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" การมีรหัสการอัปเดตทั้งหมดในฟังก์ชั่นขั้นตอนคงที่ช่วยให้คุณกำหนดได้และทำให้แอปของคุณมีแนวโน้มที่จะทำงานในลักษณะเดียวกันทุกครั้ง (และในแต่ละอุปกรณ์) ยังช่วยให้คุณสมบัติแฟนซีบางอย่างเช่นไกล