เทคนิคที่ดีสำหรับการซิงค์การกระทำการเล่นเกมกับการกำหนดเวลาของภาพเคลื่อนไหวที่เฉพาะเจาะจงหรือไม่


10

ดังนั้นฉันจึงเจอปัญหาในเกมที่ฉันกำลังดำเนินการอยู่ แต่ดูเหมือนว่าจะเป็นสิ่งพื้นฐานที่สวยที่อาจเกิดขึ้นในเกมจำนวนมาก

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

นี่คือตัวอย่างง่ายๆของสิ่งที่ฉันพูดถึงในเกมประเภทต่างๆ:

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

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

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

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

ฉันควรจะพูดถึงว่าฉันกำลังสร้างเกมของฉันในเกมเอ็นจิ้นที่ได้รับความนิยมและตอนนี้ฉันกำลังจัดการสิ่งนี้โดยใช้กิจกรรมแอนิเมชั่นของพวกเขาหรือแจ้งให้บรรลุบางสิ่งบางอย่างใกล้เคียงกับผลลัพธ์ที่ต้องการ แอนิเมชันเฉพาะคำสั่ง (เช่น: 'attack_command') และเนื้อหาแอนิเมชั่นสำหรับคำสั่งแต่ละคำสั่งของฉันจะต้องมีเหตุการณ์ภาพเคลื่อนไหว / แจ้ง 'การโทรกลับ' ลงในอักขระ ExecuteCommand ของฉัน กล่าวอีกนัยหนึ่ง - ตัวละครจะบอกให้แอนิเมชั่นการโจมตีทำการเล่นและจากนั้นแอนิเมชั่นการโจมตีจะส่งเหตุการณ์ / แจ้งการโทรกลับไปยังตัวละครในช่วงเวลาที่แน่นอนระหว่างการเคลื่อนไหวเมื่อความเสียหายควรได้รับการจัดการ

จริงๆแล้วมันใช้งานได้ตอนนี้ แต่มันก็รู้สึกผิด - เหมือนว่าฉันพลาดภาพส่วนใหญ่ที่นี่ไป! ส่วนหนึ่งของเหตุผลที่วิธีการนี้รู้สึกผิดคือมันเข้ากับตรรกะของเกมกับเนื้อหาแอนิเมชั่น หากสินทรัพย์แอนิเมชั่นของฉันลืมที่จะรวม ExecuteCommand () event / callback คำสั่งจะไม่ทำงานอย่างถูกต้องและต้องมีรหัสพิเศษเพื่อตรวจสอบว่าภาพเคลื่อนไหวคำสั่งเสร็จสิ้นโดยไม่ต้องดำเนินการคำสั่งหรือไม่ มันยุ่งและหมายความว่าเกมของฉันมีการพึ่งพาสินทรัพย์ของมันอย่างประหลาด แน่นอนฉันต้องการความเสียหายที่จะเกิดขึ้น ณ จุดใดจุดหนึ่งระหว่างภาพเคลื่อนไหวการโจมตีของฉัน แต่ฉันรู้สึกแปลก ๆ เกี่ยวกับการเรียกรหัสการเล่นเกมภายในเนื้อหาแอนิเมชั่น ..

ดังนั้นสิ่งที่ฉันมองเห็นที่นี่? เทคนิคทั่วไปที่ดีสำหรับการจัดการกับสถานการณ์ประเภทนี้ที่คุณต้องการให้การกระทำการเล่นเกมที่สำคัญเกิดขึ้นในบางช่วงเวลาในระหว่างภาพเคลื่อนไหวคืออะไร

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


1
ฉันสับสน คุณบอกว่าคุณต้องการให้เกมขึ้นอยู่กับการกำหนดเวลาของภาพเคลื่อนไหว แต่ถ้าคุณไม่ต้องการให้เกมของคุณขึ้นอยู่กับเนื้อหาของคุณและภาพเคลื่อนไหวเป็นเนื้อหาประเภทหนึ่ง คุณคาดหวังว่าความปรารถนาเหล่านั้นจะเข้ากันได้อย่างไร
Anko

ฉันต้องการให้องค์ประกอบการเล่นเกมบางอย่างสอดคล้องกับภาพเคลื่อนไหว อย่างไรก็ตามการซิงโครไนซ์ระหว่างสองสิ่งนั้นไม่ได้หมายความถึงการพึ่งพาเสมอไปใช่มั้ย ฉันสนใจในเทคนิคบางอย่างที่ผู้คนใช้เพื่อซิงโครไนซ์ภาพเคลื่อนไหวกับเกม ฉันพูดในสิ่งที่ฉันพยายามและสิ่งที่ฉันกำลังทำเพื่อให้บรรลุ - และดังนั้นคำถามของฉันคือมีเทคนิคที่แตกต่างกัน / ดีกว่า / ทางเลือกที่หนึ่งอาจใช้หรือเป็น (เหตุการณ์ภาพเคลื่อนไหว / แจ้ง / โทรกลับอบเข้า สินทรัพย์) วิธีมาตรฐาน? นี่คือสิ่งที่คุณใช้ในโครงการของคุณ?
MrKatSwordfish

คำตอบ:


5

สำหรับการซิงโครไนซ์คุณต้องตัดสินใจว่าใคร (รหัสภาพเคลื่อนไหวหรือไม่) ของคุณคือหน่วยงานจับเวลา - "จังหวะ" ที่ทุกคน "เต้น" เพื่อ

การเตรียมการที่แตกต่างกันเหมาะกับเกมที่แตกต่าง:

  • แอนิเมชั่นเป็นตัวกำหนดเวลา (การตั้งค่าปัจจุบันของคุณ)

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

    หากช่วงเวลาที่แน่นอนของภาพเคลื่อนไหว (เป็นอิสระจากสถานะเกม) เป็นส่วนสำคัญของเกมของคุณหรือคุณต้องการให้ผู้สร้างภาพเคลื่อนไหวควบคุมเวลาให้พิจารณาวิธีการนี้โดยเฉพาะ

    เครื่องมือภาพเคลื่อนไหวBlender (3D) และSpine (2D) อนุญาตให้แอนิเมเตอร์กำหนดกิจกรรมที่รหัสเกมสามารถสมัครรับข้อมูล

  • รหัสคืออำนาจการจับเวลา

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

    ภาพเคลื่อนไหวอาจฟังเหตุการณ์ในเกม (เช่นผู้เล่นยกเลิกการโหลดซ้ำหรือผู้เล่นหมอบคลานในขณะที่โหลดซ้ำ) และปรับเปลี่ยนรูปลักษณ์ของพวกเขา

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

    ภาพเคลื่อนไหวตัวละครของ Overgrowthมีโครงสร้างส่วนใหญ่ด้วยวิธีนี้: David Rosen อธิบายไว้ในการพูดคุย GDC 14 ของเขา (ดูเฉพาะกลุ่มการเคลื่อนไหวและการเคลื่อนไหวต่อเนื่อง )

  • เวลาโดยนัย (หน่วยงานภายนอก)

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

    หากสถานะเกมและภาพเคลื่อนไหวส่วนใหญ่ขึ้นอยู่กับการกำหนดเวลาภายนอกให้พิจารณาวิธีการนี้

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


0

ฉันได้อ่านบางที่ว่าปัญหาการคำนวณเกือบทั้งหมดสามารถแก้ไขได้ด้วยเลเยอร์นามธรรมเพิ่มเติมและฉันไม่เห็นว่ากรณีของคุณแตกต่างกัน

สำหรับข้อกำหนดนี้ฉันมักจะเห็นเลเยอร์เพื่อควบคุมสถานะของตัวละคร วิธีนี้อักขระจะมีภาพเคลื่อนไหวปัจจุบันและสถานะปัจจุบัน แต่ละคนมีความรับผิดชอบของตัวเอง

อนิเมชั่นรับผิดชอบเฉพาะกับภาพและรัฐจัดการกับตรรกะเฉพาะของเกมสำหรับการกระทำนั้น

ในเกมต่อสู้ของฉันรัฐเป็นวัตถุที่สืบทอดมาจากคลาส BaseState และมีวิธีการอัปเดต () อักขระแต่ละตัวมีชุดของรัฐ แต่สามารถกำหนดได้ครั้งละหนึ่งเท่านั้น และเมธอด Update () ของสถานะปัจจุบันถูกเรียกหนึ่งครั้งต่อเฟรม

มันอยู่ใน Update () ของรัฐที่ฉันทำทุกอย่างนั้นตรรกะ: ตั้งค่าความเร็วของตัวละครที่เฟรมเฉพาะสุขภาพที่เพิ่มขึ้น / ลดลง ฯลฯ

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