การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

1
พื้นผิวเคลื่อนไหวสำหรับรุ่น; วิธีการเขียน Shader หรือไม่?
กำลังดู Rocket League และสังเกตว่ามีสติ๊กเกอร์เคลื่อนไหวและล้อ . ฉันต้องการใช้งานสิ่งที่คล้ายกับเอฟเฟกต์ในภาพด้านบน ฉันจะเขียน Unity Shader เพื่อสร้างเอฟเฟกต์ล้อได้อย่างไร ฉันไม่ค่อยรู้เรื่อง Shaders มากนัก แต่ฉันสามารถแก้ไข Unity Shader มาตรฐานเพื่อสร้างเอฟเฟกต์ภาพเคลื่อนไหวได้หรือไม่?

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

2
ฉันจะสนับสนุนการสื่อสารระหว่างส่วนประกอบกับวัตถุได้อย่างปลอดภัยและด้วยการจัดเก็บส่วนประกอบที่เป็นมิตรกับแคชได้อย่างไร?
ฉันกำลังสร้างเกมที่ใช้วัตถุเกมตามองค์ประกอบและฉันมีเวลายากที่จะใช้วิธีการสำหรับแต่ละองค์ประกอบในการสื่อสารกับวัตถุเกม แทนที่จะอธิบายทุกอย่างพร้อมกันฉันจะอธิบายแต่ละส่วนของโค้ดตัวอย่างที่เกี่ยวข้อง: class GameObjectManager { public: //Updates all the game objects void update(Time dt); //Sends a message to all game objects void sendMessage(Message m); private: //Vector of all the game objects std::vector<GameObject> gameObjects; //vectors of the different types of components std::vector<InputComponent> input; std::vector<PhysicsComponent> ai; ... std::vector<RenderComponent> render; } การGameObjectManagerเก็บวัตถุเกมทั้งหมดและส่วนประกอบของพวกเขา นอกจากนี้ยังรับผิดชอบในการปรับปรุงวัตถุของเกม …

2
ขีปนาวุธที่มีเวลาคงที่
ฉันกำลังสร้างเกมกับผู้เล่นและอาวุธ ฉันต้องการยิงขีปนาวุธจาก P1 ถึง P2 ขีปนาวุธควรใช้เวลา 5 วินาทีในการเข้าถึง P2 ขีปนาวุธควรติดตาม P2 ด้วย ถ้า P2 เคลื่อนที่ไปไกลกว่านั้นขีปนาวุธจะต้องเร่งความเร็วขึ้นเพื่อสนองข้อ จำกัด ด้านเวลา หาก P2 เคลื่อนที่ไปทางซ้ายขีปนาวุธต้องเลื่อนไปทางซ้าย (และเปลี่ยนความเร็วเช่นกัน) ถ้า P2 เคลื่อนที่เข้าใกล้ P1 มากขึ้นขีปนาวุธจะต้องชะลอความเร็ว เป็นไปได้ไหม วิธีที่ดีที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร? ขณะนี้ฉันไม่มีคลาส Vector2D (นี่ไม่ใช่เกมจริง แต่การเปรียบเทียบนั้นใช้งานได้ดี) ดังนั้นถ้าเป็นไปได้ฉันต้องการโซลูชันที่ไม่ต้องการ แก้ไข:นี่ไม่ใช่ขีปนาวุธจริง ๆ เช่นกัน :) ขอบคุณ!

1
ในเอนจินฟิสิกส์ 2 มิติฉันจะหลีกเลี่ยงการชนที่ไร้ประโยชน์ได้อย่างไรเมื่อวัตถุเข้ามาพัก
ในเครื่องมือฟิสิกส์ที่ฉันกำลังพัฒนา (เพื่อการเรียนรู้) โดยใช้ความรัก -2dฉันใช้ความละเอียดการชนในลักษณะนี้: FixedUpdate(dt) // I use fixed timestep foreach collide c1 in allNotStaticColliders c1.integartePhysic // i.e. apply gravitational force.. foreach collider c2 "near" c1 // "near"= I use spatial hashing if collide(c1,c2) resolve collision (c1,c2) // the heavy operation collison callbacks c1 collison callbacks c2 ... อย่างที่คุณเห็นในตอนท้ายของอนิเมชั่น gif …

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

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

3
ฉันจะคำนวณเส้นทางสำหรับวัตถุที่มีความเร่ง จำกัด ได้อย่างไร
ตัวอย่างเช่นสมมติว่าฉันมีรถยนต์และรถยนต์มีรัศมีวงเลี้ยวต่ำสุดโดยเฉพาะและฉันต้องการขับรถคันนี้จากจุดหนึ่งไปยังอีกจุดหนึ่ง แต่รถไม่ได้หันหน้าไปทางจุด b ฉันจะคำนวณเส้นทางไปยังจุด b ได้อย่างไร ความสามารถในการระบุทิศทางที่จุด b ก็จะเป็นเรื่องที่ดีด้วย (พูดว่าคุณต้องการขับรถไปที่ถนนรถแล่นแล้วไปที่โรงรถของคุณ - มันไม่ค่อยดีนักถ้าคุณไปถึงถนนรถแล่นด้วยการขับรถบนสนามหญ้า และกำลังหันไปด้านข้าง :) ตัวชี้ไปยังเอกสารประกอบ (หรือแม้แต่ชื่อ) น่าจะดีอย่างสมบูรณ์ - ฉันมีปัญหาในการค้นหาอะไรเลย ในความพยายามของฉันพวกเขาทำงานในกรณีง่าย ๆ แต่ล้มเหลวอย่างน่าสังเวชในสถานการณ์เช่นเมื่อจุด b อยู่ใกล้กับรัศมีวงเลี้ยวต่ำกว่า ตัวอย่างเช่นคุณจะกำหนดเส้นทางที่คล้ายกับสิ่งนี้ได้อย่างไร (เส้นทางตัวหนา): แก้ไข: ในปัญหาที่แท้จริงของฉันมีข้อ จำกัด เส้นทางง่าย ๆ แต่ฉันมีอัลกอริธึม A * ที่ใช้งานได้ แต่มันช่วยให้สิ่งต่าง ๆ สามารถเปลี่ยนแปลงหัวเรื่องได้ทันที เล็กน้อยเมื่อพวกเขาไปถึงจุดเปลี่ยน

4
ทำไมรหัส C # 6 ของฉันไม่รวบรวมใน Unity
เหตุใด Unity จึงไม่สามารถทำงานกับรหัสC # 6 ได้ มันทำให้ฉันมีข้อผิดพลาดคอมไพเลอร์เสมอ นี่คือตัวอย่างรหัสบางส่วน: using static System.Convert; using static System.Environment; $"€{punten}{NewLine}€{Money}{NewLine}€{KilledEnemies}{NewLine}€{bonus}{NewLine}€{total}"; ฉันใช้ Visual Studio เป็นเครื่องมือแก้ไขรหัสและสร้างโดยไม่มีข้อผิดพลาด ถ้าฉันกดเล่นด้วยความสามัคคีมันจะไม่สร้างขึ้น
9 unity  c# 

1
การแก้ปัญหาข้อยกเว้น: ไม่พบสิ่งประดิษฐ์ของผู้สมัครสำหรับ com.google.android.gms: play-services-games: 8.1+
รับข้อผิดพลาดนี้: EditorAssemblies.ProcessEditorInitializeOnLoad (ชนิด System.Type) (ที่ C: /buildslave/unity/build/Editor/Mono/EditorAssemblies.cs: 123) ถูก Rethrow เป็น TargetInvocationException: ข้อยกเว้นถูกโยนทิ้งโดยเป้าหมายของการเรียกใช้ System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, พารามิเตอร์ System.Object [], พารามิเตอร์ System.Globalization.CultureInfo วัฒนธรรม (ที่ / ผู้ใช้ / builduser / buildslave / mono-runtime- และ -liblibs / build / mcs / class / corlib / System.Reflection / MonoMethod.cs: 519) …

1
ฉันจะชักนำให้เกิดเหตุการณ์การชนใน LibGDX 3D ได้อย่างไร
ในรหัสด้านล่างฉันได้ยกตัวอย่างของสิ่งที่ฉันต้องการจะทำ ฉันมีกล้องถ่ายรูปและฉันต้องการให้มันหยุดเคลื่อนไหวเมื่อใดก็ตามที่กระทบกับกล่องใดกล่องหนึ่งฉันจะทำสิ่งนี้ได้อย่างไร public class Main extends ApplicationAdapter { private final ModelBuilder builder = new ModelBuilder(); private final Environment environment = new Environment(); private ModelBatch modelBatch; private PerspectiveCamera camera; private Model model; private ArrayList<ModelInstance> instance = new ArrayList<ModelInstance>(); private FirstPersonCameraController controller; private BoundingBox[] boxBounds = new BoundingBox[1000]; private BoundingBox cameraBox = …

1
โหลดโฆษณาในหน้าจอเริ่มต้นหรือไม่
ฉันมีโฆษณาบางรายการที่ใช้เวลาโหลดนานมาก ฉันสงสัยว่ามันเป็นไปได้ที่จะให้พวกเขาโหลดในขณะที่ใช้อยู่ในหน้าจอเริ่มต้น ฉันได้ดูคำตอบนี้: /programming/5133342/how-can-i-make-my-ads-appear-faster-in-my-android-app และคำตอบแนะนำให้ใช้หน้าจอเริ่มต้นเพื่อโหลดโฆษณา ฉันจะรู้ได้อย่างไรว่าโฆษณาถูกโหลดไปยังกิจกรรมต่อไปของฉันเมื่อใด จะเกิดอะไรขึ้นหากผู้ใช้อยู่ในโหมดเครื่องบินจะติดอยู่ในหน้าจอเริ่มต้นหรือไม่ ฉันเคยเห็นผู้ดูแลระบบเพิ่มแอดมิน แต่นั่นต้องได้รับการดู แต่สิ่งที่ฉันเห็นอยู่ในกิจกรรมต่อไปคืออะไร? ฉันจะแก้ไขปัญหานี้ได้อย่างไร นอกจากนี้เมื่อฉันพยายามทำสิ่งนี้: AdView.setAdListener(new AdListener() { // Implement AdListener }); ฉันเข้าใจ: วิธีการไม่คงที่ไม่สามารถอ้างอิงได้จากบริบทแบบคงที่ สิ่งคือฉันพยายามที่จะดูเมื่อการเพิ่มที่อยู่ในกิจกรรมต่อไปเสร็จสิ้นการโหลด

1
สร้าง Octree สำหรับการสร้างภูมิประเทศ
ก่อนหน้านี้ฉันได้ใช้การเดินขบวน cubes / tetrahedra เพื่อสร้าง IsoSurface มันใช้งานได้ ( YouTube ) แต่ประสิทธิภาพการทำงานแย่มากเพราะฉันไม่เคยได้รับการใช้งานระดับรายละเอียดที่แปรผันตามระยะทางในการดู ฉันตัดสินใจที่จะมีอีกไปและทำอย่างถูกต้องในเวลานี้ ฉันเริ่มต้นด้วยการสร้าง OctreeNode ที่ทำงานดังนี้เมื่อBuild()ถูกเรียก หากชิ้นเล็กเกินไปที่จะสร้างกลับมาทันที ทำงานถ้าพื้นผิวผ่านปริมาตรอันนี้ ถ้าเป็นเช่นนั้นตัดสินใจว่าเราต้องการยก LOD (เพราะกล้องปิด) ถ้าเป็นเช่นนั้นให้วางไข่เด็ก 8 คนและเรียกกระบวนการเดียวกันกับพวกเขา ถ้าไม่สร้างตาข่ายโดยใช้ขนาดของโหนดปัจจุบัน บาง PseudoCode: OctNode Build() { if(this.ChunkSize < minChunkSize) { return null; } densityRange = densitySource¹.GetDensityRange(this.bounds); if(densityRange.min < surface < densityRange.max) { if(loDProvider.DesiredLod(bounds)² > currentLoD) { for(i …
9 unity  c#  voxels  octree 

2
วิธีการกำหนดความต้องการพีซีต่ำสุดเพื่อให้เกมของฉันทำงาน
ดังนั้นฉันจึงสร้างเกมแรกของฉันใน UE4 (รุ่น 4.9.2) และต้องการเผยแพร่ แต่ฉันไม่รู้วิธีกำหนดสภาพแวดล้อมที่ต่ำที่สุดเท่าที่จะเป็นไปได้เกมของฉันทำงานอยู่นอกจากนี้ฉันไม่แน่ใจว่าไฟล์อื่นนอกเหนือจากแอคทูออลบิลด์ฉันควรแจกจ่ายต่อ ฉันกำลังสร้างเกมผ่านหน้าต่างไฟล์ -> แพ็คเกจโครงการ -> 1) วิธีตรวจสอบเวอร์ชั่น DirectX ขั้นต่ำที่ต้องการ 2) วิธีตรวจสอบ dll อื่น ๆ ที่ฉันต้องรวมไว้ในตัวติดตั้ง (นอกเหนือจากการสร้าง actuall)? ตัวอย่างเช่นฉันจะต้องติดตั้งแพ็กเกจ VC ที่แจกจ่ายต่อได้หรือไม่ ถ้าเป็นเช่นนั้น เช่นเดียวกันกับ DirectX 3) วิธีตรวจสอบเวอร์ชั่น windows ขั้นต่ำสุด? ถูก จำกัด ด้วยความเข้ากันได้ของ directx ใช่ไหม? หากเกมของฉันทำงานบน DirectX10 หรือสูงกว่าระบบปฏิบัติการทุกเวอร์ชันที่มี direct10 เป็นอย่างน้อยจะเป็นไร? 4) นี่อาจเป็นคำถามที่โง่ แต่ในรุ่น 64 หรือ 32 บิตฉันควรแจกจ่ายเกมของฉัน 32 …

3
BRDF และการประสานงานทรงกลมในการติดตามเรย์
ฉันพัฒนาเครื่องติดตามรังสีที่ใช้โมเดลไฟพงษ์ / บลินมาตรฐาน ตอนนี้ฉันกำลังแก้ไขเพื่อสนับสนุนการเรนเดอร์ตามร่างกายดังนั้นฉันจึงใช้โมเดล BRDF ต่างๆ ในขณะนี้ฉันมุ่งเน้นโมเดลของ Oren-Nayar และ Torrance-Sparrow แต่ละอันขึ้นอยู่กับพิกัดทรงกลมที่ใช้ในการแสดงเหตุการณ์ที่เกิดขึ้นและทิศทางแสง wo ขาออก คำถามของฉันคือวิธีใดที่เหมาะสมที่จะแปลง wi และ wo จากพิกัดคาร์ทีเซียนไปเป็นพิกัดกลม ฉันกำลังใช้สูตรมาตรฐานที่รายงานที่นี่https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversionsแต่ฉันไม่แน่ใจว่าฉันทำสิ่งที่ถูกต้องเพราะเวกเตอร์ของฉันไม่ได้อยู่ที่ต้นกำเนิดของ ระบบพิกัดคาร์ทีเซียน แต่มีศูนย์กลางอยู่ที่จุดตัดของรังสีกับวัตถุ ที่นี่คุณสามารถค้นหาการใช้งานปัจจุบันของฉัน: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp ใครสามารถช่วยฉันอธิบายวิธีที่ถูกต้องในการแปลงเวกเตอร์ wi และ wo จากคาร์ทีเซียนไปเป็นพิกัดกลม UPDATE ฉันคัดลอกส่วนที่เกี่ยวข้องของรหัสที่นี่: การคำนวณพิกัดทรงกลม float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float …

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