ฉันจะใช้คุณสมบัติกรอไปข้างหน้าสำหรับเกมป้องกันหอคอยได้อย่างไรในhttp://fieldrunners.com/และเกม TD อื่น ๆ
ฉันใช้ Unity 3D จะมีบางอย่างในการจัดการเฟรมที่น้อยลงต่อวินาทีหรือตั้งค่าการเคลื่อนไหวอย่างรวดเร็วของศัตรูและความเร็วในการยิงหอคอยหรือไม่?
ฉันจะใช้คุณสมบัติกรอไปข้างหน้าสำหรับเกมป้องกันหอคอยได้อย่างไรในhttp://fieldrunners.com/และเกม TD อื่น ๆ
ฉันใช้ Unity 3D จะมีบางอย่างในการจัดการเฟรมที่น้อยลงต่อวินาทีหรือตั้งค่าการเคลื่อนไหวอย่างรวดเร็วของศัตรูและความเร็วในการยิงหอคอยหรือไม่?
คำตอบ:
หากเกมของคุณไม่มีการจำลองที่ซับซ้อนหรือมีราคาแพงซึ่งจำเป็นต้องแยกพวกมันออกเป็นไทม์ไลน์การอัพเดทอิสระคุณสามารถใช้วิธีการง่ายๆในการอ้างอิงรหัสในUpdate()
ฟังก์ชั่นของคุณตามค่า Time.time ของ Unity และในรหัสของคุณกำหนดค่าของเวลา . TimeScale เป็นสิ่งที่คุณต้องการ 0 == หยุดชั่วคราว 1 = ปกติผู้ทดสอบของเราชอบที่จะตั้งค่าเวลามาตราส่วน> 1 เพื่อให้สิ่งต่าง ๆ เสร็จเร็วขึ้น
http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html
วิธีการ: อัตราการจำลองที่สูงขึ้น
เวลาของคุณสำหรับอินเทอร์เฟซผู้ใช้ของคุณควรแยกจากลูปเกมจริงของคุณเช่นเดียวกับการเรนเดอร์ของคุณ พูดเช่นโลกของคุณทำงานด้วยความเร็ว 4x ให้บอกว่าด้วยความเร็วพื้นฐาน (1x) เกมของคุณรันการอัพเดท 30 ครั้งต่อวินาที
จากนั้นคุณจะมีสิ่งต่อไปนี้เมื่ออยู่ในโหมดกรอไปข้างหน้า:
กล่าวอีกนัยหนึ่งเกมโดยรวมไม่ทำงานเร็วขึ้น จำลองส่วนหนึ่งคือ
คุณสามารถอนุมานสองสิ่งจากนี้:
คุณต้องทำให้ตรรกะของเกมของคุณง่ายพอที่คุณจะสามารถรันมันได้เร็วขึ้นสี่เท่าบนแพลตฟอร์มเป้าหมายของคุณหรือคุณต้องแนะนำวิธีการคาดการณ์แง่มุมต่าง ๆ ของการเล่นเกมได้เร็วขึ้น - ซึ่งอาจส่งผลในรูปแบบที่ แตกต่างจากที่เคยเป็นหากคุณใช้การจำลองที่รวดเร็วขึ้น ดังนั้นการแลกเปลี่ยนจะเป็นต้นทุนการประมวลผลเพื่อความถูกต้อง ดูวิธีที่ 2 ด้านล่าง
มันคือการแยกความกังวลที่ช่วยให้คุณเร่งการจำลองโลกของคุณได้ง่ายขึ้นการแยกเป็นรูปแบบมุมมองและตัวควบคุม ( MVC ) หากข้อมูลโลกของคุณ (M), เรนเดอร์ลอจิก (V) และตรรกะของเกม (C) นั้นปะปนกันอยู่คุณจะไม่สามารถทำสิ่งนี้ได้
วิธีการ: การคาดการณ์ขึ้นอยู่กับเวลาที่ใช้
ดังที่ได้กล่าวไว้ข้างต้นคุณจะต้องคำนวณการเคลื่อนไหวตามระยะทางที่จะเดินทางไปในเวลาที่กำหนด สิ่งนี้ถือว่าฟิสิกส์ของเกมของคุณมีความเหมือนจริงมากขึ้นในการจำลองอย่างไรก็ตามอาจไม่เป็นเช่นนั้น นี่เป็นหัวข้อที่ค่อนข้างใหญ่และซับซ้อนกว่ามาก คุณจะต้องถามคำถามเพิ่มเติมเกี่ยวกับถ้าคุณต้องการทราบ โดยพื้นฐานแล้วคุณจะต้องทำแคลคูลัสเพื่อให้ได้สิ่งที่ถูกต้อง คุณจะต้องจัดการกับการแทรกซึมในการชนและโฮสต์ของปัญหาอื่น ๆ ที่ฉันจะไม่เข้าไปที่นี่
สรุป
สิ่งนี้จะให้เค้าร่างทั่วไป ตัวเลือกภาษาของคุณนั้นเป็นของคุณเองคุณอาจรู้ว่าต้องทำอย่างไรใน Unity หรือไม่ การกำหนดเวลาในภาษาใด ๆ นั้นคุณต้องเข้าใจรายละเอียดอย่างละเอียดฉันขอแนะนำให้เริ่มต้นด้วยบทความของ Gafferและตรวจสอบเอกสาร Unity API
ตามหลักการทั่วไปการปรับปรุงลอจิกของเกมควรถูกแยกออกจากการอัปเดตกราฟิกของเกม - นั่นคือการจำลองการเล่นเกมของคุณ AI การเคลื่อนไหวหน่วยและอื่น ๆ ไม่ควรเชื่อมโยงกับความเร็วที่เกมกำลังแสดงผล . โดยปกติแล้วเกมหลักจะคำนวณว่าเวลาจริงผ่านไปนานเท่าใดนับตั้งแต่การอัปเดตเกมครั้งล่าสุดและส่งขั้นตอนเวลาเดลต้านั้นไปยังรูทีนการอัพเดทของแต่ละออบเจ็กต์เกมแต่ละออบเจ็กต์
ในสถานการณ์ดังกล่าวมันง่ายที่จะใช้การกำหนดเวลา (รวมถึงการส่งต่ออย่างรวดเร็ว) ในเกมของคุณ เพียงขั้นตอนเวลาลอจิกเกมล่วงหน้าด้วยค่าสเกลาร์บางอย่างที่ควบคุมว่าจะ "เร็วมาก" หรือลดเวลา โดยค่าเริ่มต้นค่านี้จะเป็นหนึ่งและตัวอย่างเช่นเมื่อผู้ใช้กดปุ่ม "กรอไปข้างหน้า" คุณตั้งเป็น 1.5 และการจำลองทั้งหมดจะปรากฏขึ้นเร็วขึ้น 50% อย่างไรก็ตามคุณจะยังคงแสดงผลในอัตราเดียวกัน
ฉันไม่คุ้นเคยกับ Unity มากและอาจผิดในคำแนะนำต่อไปนี้ แต่ Unity มีองค์ประกอบการจัดการเวลาซึ่งอาจมีประโยชน์สำหรับการใช้งานนี้ ในความเป็นจริงแล้วมีคุณสมบัติ timescale คำอธิบายขององค์ประกอบแสดงว่าคลาสนั้นถูกออกแบบมาสำหรับวัตถุฟิสิกส์ แต่อาจใช้กับสถานการณ์ของคุณได้เช่นกัน