Search Unity

Project Workflow, Organization and Best Practices?

Discussion in 'Getting Started' started by JDelekto, Jun 22, 2018.

  1. JDelekto

    JDelekto

    Joined:
    Jan 7, 2017
    Posts:
    49
    Project Workflow, Organization and Best Practices?

    I am looking for tutorials, blogs or information on improving workflow, organizing a project, approaches to game object hierarchy and script assignment as well as best practices for making a game whose project and code is maintainable, expandable and designed correctly for performance from the start.

    Some background: I have been through several tutorials and acquired several tooling assets over the past year. From my experience just in software development tutorials alone, the examples are very contrived and do not represent how someone would design and application professionally, but the tutorials are meant to introduce a certain topic, API or technique with as simple code as possible and not representative of professional work product. I have seen several Unity tutorials (and not to slight them in the least), I feel that they were just more for showing UI navigation, tricks, tips, game mechanics or one approach to doing a common type of Unity game. They were in their own right very well done and the willingness of the individuals that made them to share what they had learned was greatly appreciated. However, planning, architecting and organizing a project while following best practices is something I would like to find.

    I know this sounds over-generalized, but putting aside like 3D modeling, rigging, animations, sound & music creation, etc. which each have their own tools and philosophies for best practices, I am looking mainly for advice in things like:

    a) What factors determine object parenting hierarchy aside from grouping composite objects? What solutions to common problems are solved by parenting objects?
    b) What are techniques to follow to ensure from start to finish when one is designing scenes to get the best frame rate possible?
    c) When writing scripts to be attached to objects, how does one determine to which object a script should be attached and are there common patterns for solving certain problems that determine script relationships? Should a script be attached to specific game objects or should there be a script that references various game objects instead?
    d) How would one organize a project for the purposes of exporting packages for others to reuse?
    e) How does one design their application in such a way that it is easily customizable by end-users?
    f) What are common problems that are trying to be solved in multi-player games and networking?
    g) How does one design their application and custom tools in a way that it is modular and reusable between projects? Are there certain patterns to creating reusable script and prefab libraries?
    h) How to configure rendering based on the type of application (i.e. VR vs. non-VR) and what are the trade-offs between visuals versus performance?
    i) How would I design my application so that tasks could be worked on by several developers/artists and what are the best way to create tools or script in such a way that it separates concerns between the disciplines of those contributing to the project?

    Basically, if I were working for a large and organized game company (which I am not), these are probably guidelines that would be either documented or instilled into the team as they develop over time. Everything that I have been doing with Unity outside of the online courses I have taken has been dabbling with simple concepts or playing with various assets in order to learn them. I am trying to avoid naively using these assets as a crutch and really learn the basics and best practices before trying to speed up my workflow with the large swath of tools available.

    I would like to start a small first project (I still have yet to decide what it is I want to do first), but I want to make sure that what I develop is going to be done right from the start. I know it's an iterative process and new things will be learned along the way, but my ultimate goal is to begin with a proper foundation.

    If anyone could point me to any resources (perhaps existing documented guidelines that won't be breaking any type of NDA or confidentiality), it would be greatly appreciated!
     
    niceman820, Demik94, Kachajal and 2 others like this.
  2. JDelekto

    JDelekto

    Joined:
    Jan 7, 2017
    Posts:
    49
    I did some searching after posting this, I was able to find a gold nugget! I ran across an excellent, but older blog post by Herman Tulleken on Gamasutra titled "50 Tips and Best Practices for Unity (2016 Edition)" (https://www.gamasutra.com/blogs/Her...and_Best_Practices_for_Unity_2016_Edition.php).

    While it also covers several things for which I was looking, there was also a link on Unity's own site for best practices, as he notes "from a performance point of view" (https://unity3d.com/learn/tutorials/s/best-practices) and yet another link for best practices for art assets (https://docs.unity3d.com/Manual/HOWTO-ArtAssetBestPracticeGuide.html).

    Since this was published in 2016, some of the tips may be obviated by changes in later version of Unity and with the ECS system on the horizon, I'm sure that there are going to be even more new things to learn with this different workflow. Another link provided in the article was for the book "Game Programming Patterns" by Robert Nystrom, who provides a digital version of the book that can be read online. (http://gameprogrammingpatterns.com/).

    I consider this a decent start of material and I feel ignorant for have not finding this on my initial search; In all fairness, I ran across the original blog on Dev.Mag by Mr. Tulleken, but it was dated 2012, so I had figured it was woefully out of date for the current version of Unity --I just never noticed his edit under the first section "About these tips" which linked to his updated 2016 version, which I felt was more germane.

    I decided to post my findings here as I think there is a lot of good information (and several useful links) throughout the article that may be useful to anyone else looking here. If anyone else has some really useful links like this or even if anyone has run across something that may not be in this material, please do share. I am trying to compile a comprehensive list. If anyone has anything documented by an actual development team that can legally share said information (maybe an open source team?), I would appreciate that as well!