Animal Crossingมีวิธีที่ไม่เหมือนใครในการเลื่อนแผนที่โลก: เมื่อตัวละครเคลื่อนตัวลงโลกจะหมุนไปมาอยู่ด้านบนเรื่อย ๆ เหมือนติดอยู่กับหลอดกระดาษแข็ง:
วิดีโอนี้แสดงวิธีการเคลื่อนไหว
ฉันจะสร้างเอฟเฟกต์นี้ได้อย่างไร?
Animal Crossingมีวิธีที่ไม่เหมือนใครในการเลื่อนแผนที่โลก: เมื่อตัวละครเคลื่อนตัวลงโลกจะหมุนไปมาอยู่ด้านบนเรื่อย ๆ เหมือนติดอยู่กับหลอดกระดาษแข็ง:
วิดีโอนี้แสดงวิธีการเคลื่อนไหว
ฉันจะสร้างเอฟเฟกต์นี้ได้อย่างไร?
คำตอบ:
ฉันทำการทดลองเล็กน้อยหลังจากเล่น Deathspank ซึ่งมีผลคล้ายกัน แม้ว่าฉันจะไม่เคยเจาะลึกเรื่องนี้มากพอที่จะดูว่ามันสามารถปรับให้ทำงานได้ดีหรือไม่ แต่ความเป็นไปได้อย่างหนึ่งก็คือการปรับเปลี่ยนรายการในจุดสุดยอดของคุณตามความลึก ฟังก์ชันการแม็พ cos (ความลึก) กับการดัดแปลงแกน Y คุณสามารถปรับได้เพื่อให้โลกไม่เพียงแค่หยดลงในระยะไกลเท่านั้น แต่ยังสามารถปรับให้เข้ากับความลึกได้ด้วย คุณสามารถทำเช่นเดียวกันกับค่าของแกน X เพื่อทำให้ดูเหมือนเป็นทรงกลมมากขึ้น ฉันไม่แน่ใจว่านี่เป็นวิธีการที่เกมดังกล่าวทำจริง ๆ หรือไม่ การทดลองของฉันให้ผลลัพธ์ที่น่าพอใจ แต่ฉันไม่ได้เล่นกับอัตราส่วนมากนักดังนั้นมันอาจจะง่ายเหมือนการเปลี่ยนอัตราการตกเพื่อให้ดีขึ้น
ดูเหมือนว่ามันเป็นเพียงแค่การ "โลกแบน" และการทำแผนที่เพื่อพิกัดทรงกระบอก การห่อหุ้มโลกด้วยกระบอกสูบ ฉันทำสิ่งที่คล้ายกับโลกเรียบ แต่ฉันห่อมันไว้เป็นทรงกลม:
วิธีที่ฉันทำเพื่อทรงกลมนั้นคล้ายกับที่คุณทำเพื่อทรงกระบอก เลือกรัศมีที่เหมาะสม (ρหรือ "rho" ในพิกัดทรงกระบอก) สำหรับโลกของคุณ สำหรับแต่ละจุดยอดใช้พิกัด XZ ในโลกของคุณ (สมมติว่า Y คือความสูง) จากนั้นแปลงเป็นพิกัดทรงกระบอกโดยใช้ XZ และรัศมีบวก Y หากคุณไม่เพิ่ม Y คุณจะได้รูปทรงกระบอกแบน จากนั้นแปลงกลับเป็นพิกัดคาร์ทีเซียนเพื่อวาดในเกม
คุณต้องการที่จะออกจากโลกภาพถ่ายไปยังโลกทรงกระบอก
การหมุนรอบแกน x (ในพิกัดที่เป็นเนื้อเดียวกัน) มีลักษณะดังนี้:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
ที่ไหน:
ca = cos(angle) and sa = sin(angle)
ในการคำนวณมุมมองภาพ pi / 2 ยกเลิกและคุณเหลือ:
angle = offset_from_character.z - radius
ดูที่ภาพด้วย มุมของจุดที่ฉายขึ้นอยู่กับระยะทางแนวนอนจากตัวละครระยะทางจากทรงกลมขึ้นอยู่กับแนวตั้ง
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
ให้แน่ใจว่าได้กำจัดสิ่งที่อยู่เหนือขอบฟ้าไม่เช่นนั้นโลกทั้งโลกจะถูกล้อมรอบ
ข้อจำกัดความรับผิดชอบ: ฉันไม่ได้ทดสอบสิ่งนี้และฉันไม่มีผู้เชี่ยวชาญทางคณิตศาสตร์ แต่คำตอบคืออะไรเช่นนี้ มีคนโปรดแก้ไขฉันหากฉันผิด