ภาพเคลื่อนไหวเกี่ยวกับตัวละคร / วัตถุโต้ตอบทำงานอย่างไรในเกมภาพวาดสามมิติ?


10

ฉันกำลังวางแผนเกมจำลองธุรกิจจำลองภาพสามมิติที่ผู้เล่นเห็นสำนักงานพร้อมเฟอร์นิเจอร์ตามปกติเช่นโต๊ะทำงานกระดานไวท์บอร์ดเป็นต้น

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

สิ่งที่ฉันสนใจโดยเฉพาะคือสถานการณ์ต่อไปนี้:

ตัวละครเคลื่อนข้ามสำนักงาน (1) ไปที่โต๊ะทำงาน (2) แล้วนั่งลงและเริ่มพิมพ์ (3)

จากสิ่งที่ฉันเข้าใจฉันจะมีแผ่นผีสางสำหรับการเคลื่อนไหวของตัวละคร (1) และสไปรต์แบบคงที่สำหรับโต๊ะ (2) แต่ฉันไม่เข้าใจว่าจะจัดการขั้นตอนที่สามได้อย่างไร

มีสไปรต์รวมที่มีทั้งโต๊ะและตัวละครหรือไม่? ฉันคิดว่าไม่งั้นฉันจะต้องมีแผ่นผีสางสำหรับโต๊ะและตัวละครทุกชุด

วิธีนี้จัดการได้อย่างไร

แก้ไข:

นี่คือตัวอย่างภาพเคลื่อนไหวเฉพาะจากเกม Theme Hospital คุณสามารถดูวิดีโอที่นี่

เท่าที่ฉันเห็นภาพเคลื่อนไหวแบ่งออกเป็นหลายขั้นตอน

ขั้นตอนที่ 1 - ตัวละครเคลื่อนไหวระหว่างโต๊ะและเก้าอี้

ป้อนคำอธิบายรูปภาพที่นี่

นี่แสดงให้เห็นว่าเก้าอี้และโต๊ะทำงานนั้นแตกต่างกันในความเป็นจริง

ขั้นตอนที่ 2 - ตัวละครนั่งลงภาพเคลื่อนไหว

ป้อนคำอธิบายรูปภาพที่นี่

สังเกตว่าในกรอบสุดท้ายที่เก้าอี้อยู่ใกล้กับโต๊ะมากขึ้น

ขั้นตอนที่ 3 - ภาพเคลื่อนไหวโต๊ะ

ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 4 - ภาพเคลื่อนไหวที่โดดเด่น

เหมือนกับนั่ง แต่เล่นในสิ่งที่ตรงกันข้าม

ขั้นตอนที่ 5 - ย้ายออกไป

ใช้ภาพเคลื่อนไหวการย้ายปกติเพื่อย้ายไป

คำถามที่ฉันมีคือภาพเคลื่อนไหวเหล่านี้แยกกันได้ดีที่สุดอย่างไรและศิลปินกราฟิกมักจะให้ภาพเคลื่อนไหวเหล่านี้ได้อย่างไร

ตัวละครนั่งและพิมพ์บนโต๊ะจริง ๆ แล้วมีสไปรต์ที่แตกต่างกันสามแบบ (โต๊ะตัวละครและเก้าอี้) ไม่มีใครรู้ตัวอย่างสไปรต์ของภาพเคลื่อนไหวที่คล้ายกัน?

แก้ไข 2:

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

คำตอบ:


8

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

ช่วยทำให้ calcs

แกล้งทำเป็นว่าคุณมีสไปรท์ 6 ตัวบนนายจ้างที่นั่งอนิเมชั่นการพิมพ์คุณมีเก้าอี้ 5 ตัวและนายจ้างอีก 10 ประเภท

ถ้าคุณวาดนายจ้างบนเก้าอี้มันจะใช้เวลา 10 * 6 + 5 สไปรต์ 65 สไปรท์
หากคุณรวมกันและทำให้การรวมกันทั้งหมดนี้จะใช้เวลา 10 * 6 * 5 สไปรต์นั่นคือ 300 สไปรต์ จะเป็นความเจ็บปวดสำหรับคุณที่จะสร้างสไปรต์แผ่นเสียงขนาดใหญ่นี้สำหรับภาพเคลื่อนไหวที่เรียบง่าย!

แก้ไข:

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

Background.draw();
Foreach(employer i in staff)
    I.draw();

ที่ควรแยกพนักงานของคุณออกจาก chais ของคุณ (พื้นหลัง) และปรับปรุงเฟรมของอนิเมชั่นของพนักงานด้วยเช่นกัน

EDIT2:

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

ในการขยับเก้าอี้ให้เข้าใกล้ยิ่งขึ้นให้อัปเดตตำแหน่งของมันไปทางซ้ายและขวาหรือทำสิ่งนี้บนตัวสไปรต์

คุณเข้าใจเกี่ยวกับการจัดตำแหน่ง Z หรือไม่ ที่ควรเล่นสิ่งต่าง ๆ มากมาย ...

คุณจะเห็นได้ว่าบางส่วนของเก้าอี้อยู่ด้านหลังตัวละครส่วนอื่น ๆ ปรากฏขึ้นด้านหน้า ดังนั้นวิธีนี้เป็นไปได้ถ้ามันเป็นเพียงผีสาง? จัดตำแหน่ง Z!

สองวิธีในการบรรลุผล รักษาหน้ากาก (ไม่ใช่เรื่องง่าย) หรือแบ่งผีสางของคุณออกเป็นสองส่วน

ฉันจะพูดถึงวิธีที่สองเพราะฉันไม่มีเวลามากตอนนี้ คุณควรตัดเก้าอี้สไปรต์ในส่วนที่จะอยู่ด้านหน้าและสิ่งที่จะอยู่ข้างหลัง จากนั้นวางไว้ในตำแหน่งเดียวกัน ง่าย! สิ่งที่เล่นคือ Z Align ที่นี่ชิ้นส่วนด้านหลังควรดึงเข้าไปด้านหลังตัวละครที่อยู่ตรงกลางและส่วนเก้าอี้ด้านหน้าด้านหน้า

ฉันไม่ทราบว่าคุณใช้ lib / api / sdk / toolset ใด แต่วิธีนี้ทำมากที่สุด: ใช้ az จัดปัจจัยที่กำหนดสิ่งที่อยู่ข้างหลังหรือสิ่งที่อยู่ข้างหน้าหรือสิ่งที่เป็นสิ่งแรกที่ไปข้างหลังสิ่งที่ดึงครั้งสุดท้ายไปข้างหน้า ดังนั้นคุณควรระลึกไว้เสมอ


ใช่ขอบคุณ. ฉันก็คิดเช่นกัน แต่ฉันก็ไม่เข้าใจว่าอนิเมชั่นจะประสบความสำเร็จได้อย่างไร คุณรู้ตัวอย่างที่ฉันสามารถดูได้หรือไม่ นั่นจะดีที่สุด!
Patrick Klug

คุณหมายถึงรหัสหรือเกมหรือไม่? หากคุณต้องการเกมลองดู Game Dev Story โดย Kairosoft สำหรับ Android และ iOS ตัวอย่างโค้ดที่ฉันไม่รู้ ...
Gustavo Maciel

แก้ไขคำตอบแล้ว ดูว่ามันเหมาะกับความต้องการของคุณหรือไม่ (:
Gustavo Maciel

ฉันได้อัปเดตคำถามของฉันด้วยตัวอย่างเฉพาะ ฉันสนใจจริง ๆ ว่าสไปรต์จะมีหน้าตาอย่างไรหรือศิลปินกราฟิกใช้เพื่อให้อะไร ภาพเคลื่อนไหวของ GameDev Story นั้นเรียบง่ายเกินไปสำหรับสิ่งที่ฉันมีอยู่ในใจ
Patrick Klug

อ่านแก้ไข 2 ฉันได้ปรับปรุงคำตอบหวังว่ามันจะครอบคลุมความต้องการของคุณ
Gustavo Maciel

2

แนวคิดทางเลือกคือการรวมรูปภาพ Depth / Z Buffer กับสไปรต์ของคุณคล้ายกับวิธีที่ API สามมิติ (OpenGL) รับรองว่ารูปหลายเหลี่ยมไม่ทับซ้อนกัน สำหรับเกมสไปรต์ขั้นพื้นฐานมันอาจเป็นบิตของ 0/1 บิต (บิตแมปขาวดำ) (แม้ว่าคุณสามารถใช้ระดับความลึกมากขึ้นถ้าคุณต้องการ)

หากคุณมีสไปรต์ 'โต๊ะทำงาน' และต้องการให้เก้าอี้ปรากฏต่อหน้าสไปรต์อื่น ๆ (เช่นคนทั่วไป) ในตารางนั้นคุณจะต้องทำให้รุ่น Z-Buffer ของถ่าน 'ดำ' ในขณะที่โต๊ะทำงานจะเป็น 'สีขาว' .

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

แทนที่จะตรวจสอบทุกๆพิกเซล 1 ในแต่ละครั้งวิธีที่ง่ายกว่าในการตรวจสอบคือการคูณพิกเซลสไปรท์ด้วยค่าความลึกบัฟเฟอร์เนื่องจากความลึกที่ใกล้กว่าจะเป็น 0 และยกเลิกการ แน่นอนว่าคุณต้อง colorkey (เว้นแต่คุณจะมีช่องสี alpha)

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


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