找回密码
 立即注册
查看: 210|回复: 0

保持Unity项目结构清晰的7种方法

[复制链接]
发表于 2022-12-11 07:10 | 显示全部楼层 |阅读模式
翻译自
7 Ways to Keep Your Unity Project Organized
0×00前言



    • 前几天我在Quora上看到的一个人,询问程序员如何编写包含10,000多行代码以上的项目。当软件变大时,维护起来就更困难了,这是事实。所以这就是事情 – 如果你不保持你的项目井然有序,你将很难跟上节奏。稍后,您将发现自己浪费时间处理混乱的项目而不是添加新功能。任何Unity项目都是如此。以下是(在我看来)最重要的提示,可以帮助您保持项目的有序性。

0×01 资源目录结构



    • 如果不提及组织项目目录结构,我们就不能谈论组织。Unity在这方面给你一个完全的自由,但正因为如此,它经常变得非常混乱。这是我个人使用的目录结构:

      • 3rd-Party
      • Animations
      • Audio

        • Music
        • SFX

      • Materials
      • Models
      • Plugins
      • Prefabs
      • Resources
      • Textures
      • Sandbox
      • Scenes

        • Levels
        • Other

      • Scripts

        • Editor

      • Shaders


注意:



      • 不要将任何资源存放在根目录中。尽可能使用子目录。
      • 除非确实需要,否则不要在根目录中创建任何其他目录。
      • 与命名保持一致。如果您决定将camel case用于目录名称和低字母用于资产,请坚持使用该约定。
      • 不要尝试将特定于上下文的资产移动到常规目录。例如,如果从模型生成材料,请不要将它们移动到Materials目录,因为稍后您将不知道它们来自何处。
      • 使用第三方存储从资源商店导入的资产。它们通常有自己的结构,不应该改变。
      • 使用Sandbox 目录进行您不完全确定的任何实验。在处理这类事情时,你最不想要关心的是一个合适的组织。执行您想要的操作,然后在确定要将其包含在项目中时将其删除或整理。当您与其他人一起处理项目时,请创建您的个人Sandbox子目录,如: Sandbox / JohnyC。


0×02 场景层次结构



    • 在项目的层次结构旁边还有场景层次结构。和以前一样,我会给你一个模板。您可以根据自己的需要进行调整。

      • Management
      • GUI
      • Cameras
      • Lights
      • World

        • Terrain
        • Props

      • _Dynamic

    • 您应遵循以下几条规则:

      • 所有的空物体应保持在Vector3.zero,默认旋转角度和缩放比例。
      • 当您在运行时实例化(克隆) 对象时,请确保将其放在 _Dynamic 中 – 不要污染层次结构的根目录,否则您将发现难以浏览它。
      • 对于仅作为脚本容器的空对象,请使用“@”作为前缀 – 例如@Cheats。


0×03 为所有物体设置预制体(Prefab)



    • Unity中的预制件并不完美,但它们是您分享预先配置的对象层次结构的最佳选择。一般来说,尝试预制你放在场景上的所有东西。只需向其中添加一个或多个预制件,您就可以从空场景中创建新关卡。
    • 您应该使用预制件的原因是,当预制件更改时,所有实例也会更改。有100个级别,并希望在所有这些级别上添加相机效果?不是问题!如果您的相机是预制件,只需将相机效果添加到相机预制件即可!
    • 请注意,您不能在另一个预制件中安装预制件。改为使用链接 – 有一个需要分配预制件的字段,并确保在创建实例时分配它。当有意义时,请考虑在 Awake() 或 OnEnable() 中自动连接预制实例。

0×04 了解如何使用版本控制系统(VCS)





    • 您可能已经了解了有关GIT,Subversion或任何其他VCS的信息。事实上,“了解某事”只是你可能学到的一小部分。您应该专注于了解您选择的重要但不经常使用的VCS功能。为什么?主要是因为VCS系统比您想象的要强大得多,不幸的是,许多用户使用它们只不过是备份和同步解决方案。例如,您是否知道GIT允许您存储更改,因此您可以在以后处理它们而无需向主分支提交任何内容?
    • 程序员倾向于在以后需要时注释掉代码块。不要那样做!如果您正在使用VCS,请了解如何快速浏览文件的先前版本。熟悉它时,如果没有不必要的注释代码块,代码看起来会更好。
    • 这里有一个很好的GIT用户提示资源:http://gitready.com

0×05 学习编写编辑器脚本



    • Unity在可扩展性方面是一个很棒的游戏引擎(参见资产商店)。学习如何编写编辑器脚本并利用这些知识。您没有必要为脚本创建精美的GUI,它可以是简单的事情,因为菜单条目正在做一些有用的事情。以下是我不久前创建的编辑器脚本的一些示例:

      • Google表格.csv下载 – 我在Google云端硬盘上保存了一个翻译电子表格。它自动将最新版本下载为.csv文件,因此我从未必须手动完成。
      • 随机化树的位置,旋转和大小 – 我有很多树,并希望它看起来更像森林而不是网格。
      • 创建分发 – 为指定目标构建,压缩所有文件并复制到正确的位置。
      • 源代码中的字符串替换 – 我有几个包含应用程序版本的文件。
      • 您可以从官方文档中学习如何创建编辑器脚本。


0×06 防御性编程



    • 你听说过防御性编程吗?维基百科将其定义如下:
    • 防御性编程是一种防御性设计,旨在确保在不可预见的情况下软件的持续功能。特别是当一个软件被滥用时,使用防御性编程技术。
    • 通常,当您编写MonoBehaviours时,您应该确保:

      • 设置所有需要的引用
      • 存在所有必需的组件
      • 如果您使用单身,请确保它们存在
      • 如果您正在搜索对象并期望找到某些内容,请尽快进行
      • 混合编辑器代码(ExecuteInEditMode和#if UNITY_EDITOR)在运行场景之前进行尽可能多的检查

    • 对于其中许多检查,您可以使用断言。您还应该阅读NullPointerException Part 1和2的故事。

0×07 添加作弊器



    • 在学习如何编写编辑器脚本之后,您应该能够编写一组编辑器内作弊。它可以作为解锁某些内容的菜单条目(例如所有级别)。它很容易创建:
    • 一般来说,你应该写作弊,让你:

      • 解锁所有关卡,角色,物品等
      • 给你不朽
      • 添加/减去时间,金钱,硬币等值
      • 让你看到玩家不应该看到的东西
      • 还有其他任何可以帮助您测试游戏的东西

    • 当然更实际(但更难写)是游戏中的作弊。这些类型的作弊可以在Unity编辑器外部执行,但您必须考虑如何执行它。请参阅我们关于实现 鼠标控制的作弊子系统的其他文章。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 22:52 , Processed in 0.089556 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表