ฉันจะใช้คุณสมบัติ“ กรอไปข้างหน้า” ในเกมของฉันได้อย่างไร


15

ฉันจะใช้คุณสมบัติกรอไปข้างหน้าสำหรับเกมป้องกันหอคอยได้อย่างไรในhttp://fieldrunners.com/และเกม TD อื่น ๆ

ฉันใช้ Unity 3D จะมีบางอย่างในการจัดการเฟรมที่น้อยลงต่อวินาทีหรือตั้งค่าการเคลื่อนไหวอย่างรวดเร็วของศัตรูและความเร็วในการยิงหอคอยหรือไม่?


คุณพยายามเพิ่มความถี่ในการอัพเดทแล้วหรือยัง? คุณอาจจะต้องข้ามเฟรม ..
concept3d

คำตอบ:


7

หากเกมของคุณไม่มีการจำลองที่ซับซ้อนหรือมีราคาแพงซึ่งจำเป็นต้องแยกพวกมันออกเป็นไทม์ไลน์การอัพเดทอิสระคุณสามารถใช้วิธีการง่ายๆในการอ้างอิงรหัสในUpdate()ฟังก์ชั่นของคุณตามค่า Time.time ของ Unity และในรหัสของคุณกำหนดค่าของเวลา . TimeScale เป็นสิ่งที่คุณต้องการ 0 == หยุดชั่วคราว 1 = ปกติผู้ทดสอบของเราชอบที่จะตั้งค่าเวลามาตราส่วน> 1 เพื่อให้สิ่งต่าง ๆ เสร็จเร็วขึ้น

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

วิธีการ: อัตราการจำลองที่สูงขึ้น

เวลาของคุณสำหรับอินเทอร์เฟซผู้ใช้ของคุณควรแยกจากลูปเกมจริงของคุณเช่นเดียวกับการเรนเดอร์ของคุณ พูดเช่นโลกของคุณทำงานด้วยความเร็ว 4x ให้บอกว่าด้วยความเร็วพื้นฐาน (1x) เกมของคุณรันการอัพเดท 30 ครั้งต่อวินาที

จากนั้นคุณจะมีสิ่งต่อไปนี้เมื่ออยู่ในโหมดกรอไปข้างหน้า:

  • ตรรกะของโลกรันการอัปเดต 4 รายการสำหรับการอัปเดตทุกครั้งของ UI และโหมดแสดงภาพ นี่หมายความว่าจำเป็นต้องเรียกใช้การอัปเดต 120 ครั้งต่อวินาที ดังนั้นโมเดลโลกของคุณ(ข้อมูล) จึงได้รับการอัปเดตในอัตรานี้
  • ตรรกะ Renderer และ UI ทั้งสองยังคงทำการสำรวจความคิดเห็นหรือทำอะไรก็ได้ที่การอัพเดต 30 ครั้งต่อวินาที

กล่าวอีกนัยหนึ่งเกมโดยรวมไม่ทำงานเร็วขึ้น จำลองส่วนหนึ่งคือ

คุณสามารถอนุมานสองสิ่งจากนี้:

  1. คุณต้องทำให้ตรรกะของเกมของคุณง่ายพอที่คุณจะสามารถรันมันได้เร็วขึ้นสี่เท่าบนแพลตฟอร์มเป้าหมายของคุณหรือคุณต้องแนะนำวิธีการคาดการณ์แง่มุมต่าง ๆ ของการเล่นเกมได้เร็วขึ้น - ซึ่งอาจส่งผลในรูปแบบที่ แตกต่างจากที่เคยเป็นหากคุณใช้การจำลองที่รวดเร็วขึ้น ดังนั้นการแลกเปลี่ยนจะเป็นต้นทุนการประมวลผลเพื่อความถูกต้อง ดูวิธีที่ 2 ด้านล่าง

  2. มันคือการแยกความกังวลที่ช่วยให้คุณเร่งการจำลองโลกของคุณได้ง่ายขึ้นการแยกเป็นรูปแบบมุมมองและตัวควบคุม ( MVC ) หากข้อมูลโลกของคุณ (M), เรนเดอร์ลอจิก (V) และตรรกะของเกม (C) นั้นปะปนกันอยู่คุณจะไม่สามารถทำสิ่งนี้ได้

วิธีการ: การคาดการณ์ขึ้นอยู่กับเวลาที่ใช้

ดังที่ได้กล่าวไว้ข้างต้นคุณจะต้องคำนวณการเคลื่อนไหวตามระยะทางที่จะเดินทางไปในเวลาที่กำหนด สิ่งนี้ถือว่าฟิสิกส์ของเกมของคุณมีความเหมือนจริงมากขึ้นในการจำลองอย่างไรก็ตามอาจไม่เป็นเช่นนั้น นี่เป็นหัวข้อที่ค่อนข้างใหญ่และซับซ้อนกว่ามาก คุณจะต้องถามคำถามเพิ่มเติมเกี่ยวกับถ้าคุณต้องการทราบ โดยพื้นฐานแล้วคุณจะต้องทำแคลคูลัสเพื่อให้ได้สิ่งที่ถูกต้อง คุณจะต้องจัดการกับการแทรกซึมในการชนและโฮสต์ของปัญหาอื่น ๆ ที่ฉันจะไม่เข้าไปที่นี่

สรุป

สิ่งนี้จะให้เค้าร่างทั่วไป ตัวเลือกภาษาของคุณนั้นเป็นของคุณเองคุณอาจรู้ว่าต้องทำอย่างไรใน Unity หรือไม่ การกำหนดเวลาในภาษาใด ๆ นั้นคุณต้องเข้าใจรายละเอียดอย่างละเอียดฉันขอแนะนำให้เริ่มต้นด้วยบทความของ Gafferและตรวจสอบเอกสาร Unity API


หากคุณกำลังจะใช้วิธีการจำลองอัตราที่สูงขึ้นและคุณต้องการรองรับการชะลอตัวคุณอาจต้องมีอัตราการจำลองพื้นฐานที่ช้ามากๆ จากนั้นเรียกใช้โดยเริ่มต้นที่ 100 ขั้นตอนการจำลอง / เฟรม
bobobobo

9

ตามหลักการทั่วไปการปรับปรุงลอจิกของเกมควรถูกแยกออกจากการอัปเดตกราฟิกของเกม - นั่นคือการจำลองการเล่นเกมของคุณ AI การเคลื่อนไหวหน่วยและอื่น ๆ ไม่ควรเชื่อมโยงกับความเร็วที่เกมกำลังแสดงผล . โดยปกติแล้วเกมหลักจะคำนวณว่าเวลาจริงผ่านไปนานเท่าใดนับตั้งแต่การอัปเดตเกมครั้งล่าสุดและส่งขั้นตอนเวลาเดลต้านั้นไปยังรูทีนการอัพเดทของแต่ละออบเจ็กต์เกมแต่ละออบเจ็กต์

ในสถานการณ์ดังกล่าวมันง่ายที่จะใช้การกำหนดเวลา (รวมถึงการส่งต่ออย่างรวดเร็ว) ในเกมของคุณ เพียงขั้นตอนเวลาลอจิกเกมล่วงหน้าด้วยค่าสเกลาร์บางอย่างที่ควบคุมว่าจะ "เร็วมาก" หรือลดเวลา โดยค่าเริ่มต้นค่านี้จะเป็นหนึ่งและตัวอย่างเช่นเมื่อผู้ใช้กดปุ่ม "กรอไปข้างหน้า" คุณตั้งเป็น 1.5 และการจำลองทั้งหมดจะปรากฏขึ้นเร็วขึ้น 50% อย่างไรก็ตามคุณจะยังคงแสดงผลในอัตราเดียวกัน

ฉันไม่คุ้นเคยกับ Unity มากและอาจผิดในคำแนะนำต่อไปนี้ แต่ Unity มีองค์ประกอบการจัดการเวลาซึ่งอาจมีประโยชน์สำหรับการใช้งานนี้ ในความเป็นจริงแล้วมีคุณสมบัติ timescale คำอธิบายขององค์ประกอบแสดงว่าคลาสนั้นถูกออกแบบมาสำหรับวัตถุฟิสิกส์ แต่อาจใช้กับสถานการณ์ของคุณได้เช่นกัน


1
แน่นอนว่ามันใช้ได้กับฉากของเขา สิ่งที่เขาต้องทำก็คือตั้งค่า Time.timeScale เป็นตัวคูณและทุกอย่างจะเร็วขึ้น มันเป็นการเปลี่ยนแปลงทั่วกระดานดังนั้นหากมีสิ่งต่าง ๆ เช่นการโต้ตอบเมนูและสิ่งเหล่านั้นจะไปได้เร็วขึ้น
Tetrad

ขอบคุณอีกครั้ง Tetrad :)
Syed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.