ฉันจะสร้างเกมใน Unity ด้วยการใช้เครื่องมือแก้ไขภาพขั้นต่ำ / ไม่ใช้งานได้อย่างไร


24

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

ฉันไม่ต้องการทำเช่นนั้น ฉันชอบการครอบคลุมโค้ดแบบเต็มมากกว่านักออกแบบที่แยกแยะสิ่งต่าง ๆ ออกไปจากฉัน ฉันต้องการเขียนโค้ด C # บริสุทธิ์ตั้งแต่เริ่มต้นหรือหากต้องการสคริปต์ Unity เป็นการเพิ่มเติม ฉันไม่พบคำอธิบายหรือเอกสารเกี่ยวกับการทำเช่นนั้น ฉันจะสร้างเกมโดยใช้ Unity และใช้การแก้ไขแบบขั้นต่ำ (หรือไม่ใช้) ได้อย่างไร


1
การลงคะแนนปิดนี่เป็นข้อเสนอแนะด้านกรอบปลอมตัวเป็นคำถามเกี่ยวกับความสามัคคี
BlueRaja - Danny Pflughoeft

2
จริง ๆ แล้วฉันไม่แน่ใจว่าถ้าฉันเห็นด้วยกับที่แม้ว่าฉันจะไม่คว่ำการโหวตอย่างใกล้ชิดของชุมชน อย่างไรก็ตามฉันจะทราบว่าคำถามนี้ถามโดยเฉพาะเกี่ยวกับความสามารถของ Unity: คำตอบที่ไม่ได้ระบุว่าอาจถูกลบออก ขอไม่เปิดนี้เป็นปิดคำถามหัวข้อถ้าเราจะได้ไม่ต้องโอเค?
Josh

2
นักพัฒนาส่วนใหญ่มองหาโปรแกรมแก้ไขภาพในบางจุดเพื่อออกแบบระดับของพวกเขาเพราะสิ่งที่มองเห็นได้ง่ายกว่าการตั้งค่าตำแหน่งของโค้ดโฆษณาน้อยทุกตัว เช่นเดียวกันสำหรับการแก้ไข / ออกแบบเค้าโครง GUI การมีสิ่งนี้ในตัวเป็นประโยชน์อย่างมากสำหรับ IMHO
bummzack

4
I prefer writing my own level editor which provides only the stuff really neccessary for my gameตกลงที่โดยทั่วไปหมายความว่าคุณไม่ต้องการใช้เอ็นจิ้นเกมคุณต้องการเขียนโปรแกรมด้วยไลบรารีกราฟิก อย่างไรก็ตามคุณก็ประสบปัญหาทางเทคนิคเมื่อพยายามทำเช่นนั้นดังนั้น ... ฉันรู้สึกขัดแย้งกับที่นี่
jhocking

3
@ jocking จากนั้นการขาดของเอ็นจิ้นเกมดูเหมือนว่าจะแตกต่างกันมาก ไลบรารีคลาสเป็นเอ็นจิ้นเกมถ้ามันเป็นนามธรรมของงานเกมทั่วไปเช่นคณิตศาสตร์กล้องระบบเสียงและอาจเป็นเรื่องของฟิสิกส์ แต่นักออกแบบไม่ต้องการและในความคิดของฉันไม่ควรจะต้องใช้ .
เรย์

คำตอบ:


27

ฉันเป็นผู้เริ่มต้นที่สมบูรณ์ใน Unity แต่นี่เป็นวิธีที่ฉันทำในตอนนี้และลดการใช้งานเอดิเตอร์ให้เหลือน้อยที่สุด

ในโปรแกรมแก้ไขฉันมีเพียงสามวัตถุ: GameObject ที่ว่างเปล่าที่เรียกว่า "main" กล้องและไฟ และนี่เป็นเพียงเพราะตอนนี้ฉันทำงานกับกล้องเดียวและแสงเดียวเท่านั้นดังนั้นมันจึงเร็วขึ้นด้วยวิธีนี้ หลังจากนั้นฉันอาจจะลบออกและเฉพาะ "หลัก" เท่านั้น

ใน "Assets / MyScripts" ฉันมีคลาส "Main" ซึ่งเพิ่มไปยัง "main" GameObject ตามพฤติกรรม ซึ่งหมายความว่าเมื่อโปรแกรมเริ่มต้นคลาส "หลัก" ในอินสแตนซ์และวิธีการที่เรียกว่า คลาส "Main" เป็นเช่นนี้:

using UnityEngine;

public class Main : MonoBehaviour
{

    void Start ()
    {
        // initialize the game
    }

    void Update ()
    {
        // update physics
    }

}

ในเกมฉันสร้างสภาพแวดล้อมแบบไดนามิก:

GameObject floor = GameObject.CreatePrimitive (PrimitiveType.Cube);
floor.renderer.material.color = RandomGreen ();

แต่นี่เป็นเพราะจนถึงตอนนี้ฉันแค่สร้างต้นแบบ หลังจากนั้นฉันจะต้องการแทนที่ลูกบาศก์ด้วยสิ่งดีๆที่แก้ไขใน Blender ซึ่งจะต้องทำให้พวกเขาในเครื่องปั่นและนำพวกเขาไปยังหน่วยเป็น "prefabs" จากนั้นฉันจะสร้างอินสแตนซ์ "prefabs" ในทำนองเดียวกันจากโค้ด C #

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

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


2
ผมว่าลักษณะเช่นนี้เป็นคำตอบที่สวยใสและทึบเพียงการเริ่มต้นความสามัคคี :)
เรย์

ขอบคุณ! ฉันเป็นโปรแกรมเมอร์ที่มีประสบการณ์เป็นอย่างอื่น แต่นี่เป็นโครงการแรกของฉันใน Unity และมันก็ยังไม่เสร็จ ฉันยังไม่ได้ใช้ prefab เลย อาจมีภาวะแทรกซ้อนบางอย่างที่ฉันไม่ทราบในปัจจุบันดังนั้นฉันขอแนะนำให้รับคำแนะนำด้วยเกลือเม็ด โดยวิธีการต่อเนื่องใน Unityรู้สึกบิตต่อต้านฉันง่าย ฉันจะต้องศึกษาให้ลึกซึ้งยิ่งขึ้นและอาจมีผลต่อการตัดสินใจในการออกแบบ
Viliam Búr

9

เมื่อทำงานกับ Unity คุณจะต้องทำงานในโปรแกรมแก้ไขของ Unity นั่นเป็นเพียงความสามัคคี

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

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

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


1
อยู่ในช่วงกลางของการอ่านหนังสือของคุณเมื่อฉันเจอคำตอบนี้
ปราศรัยสูงสุด

6

ฉันเชื่อว่าสิ่งที่คุณกำลังมองหาคือกรอบการทำงานเพื่อความสามัคคี

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

ข้อสงวนสิทธิ์: แม้ว่า Futile จะมีรหัสเป็นศูนย์กลาง แต่ก็เป็นสิ่งที่หลีกเลี่ยงไม่ได้ที่คุณจะต้องยุ่งกับ Unity editor ในบางรูปแบบ แต่นี่จะลดลงอย่างมากกับ Futile


2

ฉันต้องการเพิ่มคำตอบที่ดีทั้งหมดที่นี่โดยเฉพาะ @jhocking คำตอบ:

เกือบทุกอย่างที่ฉันพบใน Unity มีข้อความธรรมดาในแผนผังโฟลเดอร์โครงการ ฉันได้แก้ไข prefab และ gameObjects โดยตรงโดยไม่ต้องเปิด Unity และการเปลี่ยนแปลงเหล่านั้นถูกพบโดย devs คนอื่น ๆ เมื่อทำการคอมมิท

ในขณะที่ฉันไม่รู้มากเกี่ยวกับ Futile Framework จนถึงทุกวันนี้มันดูเหมือนจะเป็นวิธีที่ยอดเยี่ยมจริงๆ

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

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

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