ฉันมีโปรเจ็กต์ Unity โดยไม่มีการควบคุมเวอร์ชันใด ๆ และฉันต้องการแชร์กับนักพัฒนาคนอื่นเพื่อให้เราทั้งคู่สามารถทำงานกับโปรเจ็กต์นี้ได้
ควรใช้กลยุทธ์ใดที่เล่นได้ดีกับสินทรัพย์ของ Unity
ฉันมีโปรเจ็กต์ Unity โดยไม่มีการควบคุมเวอร์ชันใด ๆ และฉันต้องการแชร์กับนักพัฒนาคนอื่นเพื่อให้เราทั้งคู่สามารถทำงานกับโปรเจ็กต์นี้ได้
ควรใช้กลยุทธ์ใดที่เล่นได้ดีกับสินทรัพย์ของ Unity
คำตอบ:
Unity มีระบบอำนวยความสะดวกในตัวสำหรับรองรับการควบคุมเวอร์ชันอย่างถูกต้อง
เพียงไปที่ไฟล์ -> การตั้งค่าโครงการ -> ตัวแก้ไขและเปิดใช้งานการควบคุมเวอร์ชันภายนอก
ฉันแนะนำให้ใช้ Git มันฟรีและดีที่สุด
ไม่นานมานี้ฉันเขียนเกี่ยวกับการควบคุมเวอร์ชัน (โดยใช้ Git) ในบล็อกของฉัน
เรื่องสั้นสั้น:
เปิดใช้งานการควบคุมเวอร์ชันภายนอกไฟล์ -> การตั้งค่าโครงการ -> ตัวแก้ไขและสร้างไฟล์. gitignore เพื่อหลีกเลี่ยงสิ่งที่ไม่จำเป็นใน repo (ไม่จำเป็นจริงๆ แต่จะมีค่าในระหว่างการพัฒนา)
นี่คือลักษณะของไฟล์ที่ควรมีลักษณะ:
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
การใช้งานผมสำหรับโครงการความสามัคคี แต่มีไม่กี่ ommissions [Bb]uild/
A: *.booproj
, sysinfo.txt
, ฉันค่อนข้างแน่ใจว่าสิ่งที่ฉันใช้นั้นขึ้นอยู่กับเทมเพลต repo ใหม่ของ GitHub สำหรับ Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) Objective-C ใด ๆ (เมื่อกำหนดเป้าหมาย iOS)
Unity 3.0 ได้รับการกำหนดค่าให้เล่นอย่างดีกับการโค่นล้ม (อย่างน้อยก็ดีกว่าก่อน) ฉันไม่รู้ว่านี่เป็นเพียงรุ่นโปรหรือไม่ฉันจะต้องตรวจสอบ
โดยทั่วไปแล้วระบบควบคุมเวอร์ชันที่แนะนำมากที่สุดคือ Unity Asset Server
เอกภาพเฉพาะ - ทำงานในฉากต่าง ๆ และไฟล์รหัสที่แตกต่างกันตลอดเวลาและผสานในการเปลี่ยนแปลงของบุคคลอื่นด้วยตนเอง หากคุณทั้งคู่ต้องทำงานในฉากเดียวกันให้ทำซ้ำและใช้สำเนาเป็นแบบทดสอบ มิฉะนั้นหากคุณทั้งคู่ดัดแปลงฉากเดียวกันการเปลี่ยนแปลงของคน ๆ หนึ่งจะเขียนทับอีกฝ่าย คุณยังคงสามารถใช้การควบคุมแหล่งที่มาสำหรับไฟล์ต้นฉบับของคุณได้โดยไม่ต้องย้ายสิ่งเหล่านี้ไปเลยในระบบไฟล์หรือผ่าน Unity เมื่อสร้างเสร็จแล้ว
คำแนะนำสำหรับผู้เริ่มต้น - รับเครื่องมือ diff / merge ที่เหมาะสม (ฉันชอบWinMerge ) และคุ้นเคยกับการใช้มันเพื่อดูว่าคนอื่นทำอะไรบ้างและรวมการเปลี่ยนแปลงในไฟล์ที่ขัดแย้งกันด้วยตนเอง ตั้งค่าพื้นที่เอกสารส่วนกลางเช่น เอกสารการเขียนของ Google หรือวิกิและเก็บเอกสารของคุณไว้ที่นั่น - เอกสารควรมีรายการคุณสมบัติพื้นฐานอย่างน้อยที่สุดเพื่อให้คุณรู้ว่าคุณต้องการอะไรและมีรายการงานที่ได้รับจากรายการคุณสมบัติพร้อมด้วยตัวบ่งชี้ที่ชัดเจน ของผู้ที่ทำงานเกี่ยวกับงาน พูดคุยกันเพื่อทำความเข้าใจคร่าวๆว่าใครต้องการทำงานที่ต้องทำและข้ามงานออกจากรายการเมื่อทำเสร็จ ทำการทบทวนและประเมินรายการต่อไปเพื่อดูว่าทุกอย่างยังคงใช้ได้อยู่หรือไม่และคุณจำเป็นต้องจัดลำดับความสำคัญใหม่
ฉันทำงานกับทีมที่เรียกตัวเองว่า Defective Studios เราได้ต่อสู้กับปัญหาเดียวกันมาหลายปีและเมื่อไม่นานมานี้ฉันเพิ่งยอมแพ้และเริ่มเขียนส่วนขยายเพื่อช่วยให้ฉันผสาน gameobjects
โดยพื้นฐานแล้ววิธีการคือการสร้างอินเทอร์เฟซที่คล้ายกับตัวตรวจสอบในหน้าต่างที่เรียงแถวแต่ละเกมองค์ประกอบและคุณสมบัติแบบเคียงข้างกันเพื่อเปรียบเทียบและให้ปุ่มเพื่อคัดลอกค่า (หรือวัตถุทั้งหมด) จากด้านหนึ่งไปอีกด้านหนึ่ง หากคุณคุ้นเคยกับSerializedProperty
ชั้นเรียนนั่นเป็นสิ่งที่ทำส่วนใหญ่ของงานที่นี่ โดยทั่วไปเราสร้าง GUI ที่ซิงโครไนซ์สถานะ foldout ระหว่างด้านขวาและด้านซ้ายและสร้างพื้นที่แนวตั้งทุกที่GameObject
หรือComponent
มีอยู่เฉพาะด้านขวาหรือซ้าย ฟังก์ชันเปรียบเทียบตรวจสอบความเท่าเทียมกันในแต่ละระดับและเปลี่ยนพื้นหลังของแต่ละบรรทัดเป็นสีแดงหรือสีเขียวขึ้นอยู่กับสถานะของความเท่าเทียมกัน บรรทัดใด ๆ ที่เด็ก ๆ มีความแตกต่างก็จะกลายเป็นสีแดงและเรายังรวมถึงปุ่มที่ดีเพื่อค้นหาต้นไม้ซ้ำ ๆ และขยายวัตถุทั้งหมดที่แตกต่างหรือมีความแตกต่างในลูก ๆ ของพวกเขา
นอกจากนี้ยังมีชุดเขตข้อมูลรูปแบบที่ให้คุณกรองส่วนประกอบบางประเภทจากการเปรียบเทียบ คุณลักษณะ GameObject เช่นชื่อเลเยอร์และแท็กยังถูกนำมาเปรียบเทียบ เราใช้SerializedObject
และSerializedProperty
วนลูปผ่านgameObject
คุณสมบัติของและวาดมันเหมือนวาดในสารวัตร สิ่งนี้ทำให้มั่นใจได้ว่ามีความสอดคล้องและเป็นโค้ดที่ง่ายกว่ามาก!
รายละเอียดที่ดีอย่างหนึ่งคือกระบวนการเปรียบเทียบ (ทริกเกอร์เมื่อโหลดวัตถุและทุกครั้งที่มีการเปลี่ยนแปลง) จะทำงานใน ad-hoc coroutine ที่ปรับปรุงโดยEditorWindow.Update
ฟังก์ชันดังนั้นในกรณีที่คุณเปรียบเทียบวัตถุที่ซับซ้อนมาก หน้าต่างไม่ล็อคตัวแก้ไข นี่เป็นสิ่งที่ต้องทำเมื่อเปรียบเทียบสิ่งของกับเด็กนับร้อย (หรือพัน!) สรุปแล้วมันเป็น "โครงการเลโก้" อย่างที่เพื่อนของฉันชอบพูด แต่แน่นอนว่าเป็นเครื่องมือที่มีค่ายิ่งซึ่งกลายเป็นส่วนหนึ่งของกระบวนการทำงานร่วมกันของเราทันที
เครื่องมือUnity Mergeมีการบันทึกไว้ใน Unify wiki ซึ่งรวมถึงแผนงานและที่อยู่อีเมลสำหรับข้อเสนอแนะและการรายงานปัญหา หากคุณกำลังดิ้นรนกับการผสานที่ซับซ้อนให้ลองยิงมันแล้วบอกให้เรารู้ว่าคุณคิดอย่างไร! นอกจากนี้ฉันไม่ได้รำคาญที่จะสร้างมันเป็น DLL ดังนั้นอย่าลังเลที่จะแหย่ที่แหล่งที่มา การปรับใช้ ad-hoc coroutine และการSerializedProperty
ปรับแต่งรวมถึงเทคนิค GUI บางอย่างที่ฉันจำเป็นต้องได้รับนั้นเป็นส่วนสำคัญของชุดเครื่องมือแก้ไขส่วนขยายของคุณ ฉันสนใจการเปลี่ยนแปลง / การปรับปรุงที่ผู้ใช้อาจมีดังนั้นโปรดติดต่อ!
หากคุณมีเงินทุนสำหรับมันเซิร์ฟเวอร์สินทรัพย์ที่มีรุ่นโปรของ Unity นั้นค่อนข้างดี ฉันเคยใช้มันในโครงการขนาดใหญ่ที่มีหลายคนในอดีตและมันทำงานได้ดี สำหรับการควบคุมเวอร์ชันของวานิลลามันทำตามที่เราคาดไว้
ฉันได้ลองใช้พื้นที่เก็บข้อมูล SVN กับโครงการ Unity และมันค่อนข้างยุ่งยาก อย่างไรก็ตามเราทิ้งความคิดก่อนที่จะทำให้มันทำงานได้ ความสามัคคีทำให้ไฟล์สำรองข้อมูลจำนวนมากที่ฉันไม่ต้องการใช้เวลาในการค้นหาว่าจะเกิดอะไรขึ้นหากพวกเขาไม่ได้ซิงค์กับเซิร์ฟเวอร์ ฉันคิดว่ามีลูกเล่นเล็ก ๆ น้อย ๆ มันสามารถทำได้ แต่ฉันไม่ได้มีประสบการณ์กับมันทำงานได้ดี
ฉันได้ทำโครงการเล็ก ๆ โดยใช้คุณสมบัติฟรีของ DropBox มันทำให้ฉันกังวล แต่เราไม่เคยมีปัญหาใด ๆ และฉันไม่คิดว่าเราจะต้องการสิ่งที่ควบคุมเวอร์ชันจริงสำหรับโครงการนั้นดังนั้นฉันจึงไม่สามารถพูดได้มากถึงวิธีการคืนค่าหรือการรวมไฟล์จะหายไป
Dropbox รองรับการกำหนดเวอร์ชันต่อไฟล์ (แทนที่จะเป็นการกระทำต่อ) และเล่นได้ดีกับ Unity ฟรีในตอนแรก (2 กิกะไบต์) และค่อนข้างถูกหลังจากนั้น (ประมาณ $ 10 สำหรับ 50gig) คุณต้องใช้ PackRat addon เพื่อให้สามารถเข้าถึงประวัติรุ่นได้
เช่นเดียวกับ SVN, CVS, GIT ฯลฯ คุณจะต้องตรวจสอบให้แน่ใจว่าคุณสร้างโฟลเดอร์แท็กเมื่อคุณไปถึงแต่ละขั้นตอนสำคัญในการพัฒนา (เช่นสิ้นสัปดาห์, สิ้นสุดเหตุการณ์สำคัญ) แตกต่างจากที่กล่าวมาข้างต้นมันจะยากกว่ามากที่จะย้อนกลับไปยังสเตจดังกล่าวถ้าคุณทำไม่ได้เพราะคุณจะต้องย้อนกลับทุกไฟล์ทีละไฟล์ โปรดจำไว้ว่าในขณะที่กำลังพัฒนาและคุณจะมีเวลาง่าย ๆ โดยไม่ต้องจ่ายสำหรับเซิร์ฟเวอร์สินทรัพย์