0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

unity项目优化之资深程序员分享七大方法理顺unity项目

电子工程师 来源:网络整理 2018-11-12 14:19 次阅读

一天,我在Quora上看到一个人问:程序员如何用超过一万行的代码编写一个项目。软件做的越大,维护就越困难,这是一个不争的事实。所以这面临的问题就是如果你不让你的项目有条理,就会很难维护它。到后期,你就会发现你并不是在添加新功能而是在把时间浪费在一个凌乱的项目上。每一个Unity项目也是这样的。在我看来,这是非常重要的技巧,可以帮助你保持你的项目条理性。

1. Directory Structure 【目录结构】

我们不能够在不提到项目目录结构的情况下谈论组织结构。Unity让你可以自由的创建自己想要的目录结构,也正是因为这样,它可能让项目很混乱。下面是我个人使用的目录结构:

3rd-Party(第三方资源)
s
Audio
1、Music
2、SFX
Materials
Models
Plugins
Prefabs
Resources
Textures
Sandbox
Scenes
1、Levels
2、Other
Scripts
1、Editor
Shaders

不要在根目录存储任何资源文件,尽可能使用子目录。

除非需要,否则不要在根目录中创建一些额外目录。(意思是不要在根目录创建一些无用目录)

命名一致性。如果你决定使用“骆驼拼写法(骆驼拼写法的意思是依靠单词的大小写拼写复合词:例如:PlayStationGameManager)”编写目录名和小写字母编写资源,请一直遵守这个规则。

不要尝试将有链接性的特定资源文件移动到常规目录或者通用目录。例如有些Materials是从模型生成的,不要将它们移动到通用目录或者其他Materials目录中,因为你下一次就不知道这些材质来自哪里了。

使用从资源商店下载的第三方资源,不要随便改变其原本的结构。

使用Sandbox(沙盒)目录来测试你不完全确定的东西。当做测试的同时,你最先需要关心的是一个合适的组织结构。这样不论你最后想删除它还是把它组织到你的项目中都可以。当你

与其他人一起工作时,请创建你个人的SandBox子目录,例如:Sandbox/JohnyC。

2. Scene hierarchy structure 【场景层次结构】

在项目层次结构之后也有场景层次结构。像上面的一样,我将提供一个模板,你可以根据你自己的需要进行调整。

Management
GUI
Cameras
Lights
World
1、Terrain
2、Props
_Dynamic

你应该遵循几个规则:
所有空对象应位于(0,0,0,)坐标点,默认旋转和缩放。

当你运行中实例化对象时,请确保将其放在_Dynamic中,不要污染层次结构的根目录,否则将难以浏览Scene hierarchy下的文件(文件太多)。

对于仅用于挂载脚本的空对象,请使用“@”作为前缀。例如@Cheats

3. Use prefabs for everything 【使用预制体进行所有操作】

Unity中的Prefabs并不完美,但是你会发现,它们是共享预配置信息的最好方法。一般来说,我们可以把你想放到场景中的所有东西都做成预制体。你可以仅仅通过创建预制体来从一个空场景中创建新的关卡。

我们应该使用预制体的原因是当预制体有更改时,所有预制体的实例对象也会做相应改动。如果有一百个关卡都需要给相机添加一个相同的效果呢?没问题,如果你的相机是预制体,只需要将效果添加到预制的相机上就行。

不过要注意,你不能在另一个预制体上使用预制体。可以使用代码字段链接解决此种预制体实例预制体的情况,并且确保在父预制体实例的时候才运行该代码字段。可以考虑在Awake()或者OnEnable()中自动检测执行实例预制体对象。

4. Learn how to use version control system (VCS) 【学习如何使用版本控制系统(VCS)】

你可以已经知道Git、Sbuversion或者其他版本控制工具。可能实际上也只是知道,而并不是很熟悉。其实我们应该了解我们所使用的的VCS的可能不经常使用的另一些重要功能。为什么呢?因为VCS系统比我们想象的要强大的多,而大部分人只是用来备份和同步解决方案。例如,你是否知道GIT是可以允许你隐藏你做的更改,以便你快速处理而不需要向主分支提交任何内容。

程序员倾向于注释掉代码块,以便于稍后来使用。不过不建议这样做。如果你使用VCS,你可以学习如何快速查看先前的版本文件。当你熟练操作VCS后,你会少很多注视到的无用代码块,让你的代码看起来更简洁好看。

下面的链接是一个GIT用户的版本代码查看的使用演示:

5. Learn to write editor scripts 【学习编写编辑器脚本(工具脚本,编辑器扩展脚本等)】

Unity作为游戏引擎,在扩展性方面是非常棒的(参见Asset Store)。学习如何编写编辑器脚本并利用这方面知识。你不需要为脚本创建过多的GUI,它是一些可以做非常有用的事情的简单菜单项。以下是我不久前创建的编辑器脚本的一些示例:

Google Sheets.cvs download——我有一个保存在Google云盘的电子转换表格。该工具可以自动下载为最新的.cvs文件,所以我从来没有手动去下载过。

Randomize the position,rotation and size of trees——当有很多树的时候,可以使它们看起来想一个森林,而不是像格子一样整齐排列。

Create distribution(创建分发)——为指定目标创建一个可以将所有文件移动到或者复制进去的路径。

String replace in the sources(资源文件的字符串替换)——我有几个文件,其中包含该工具的不同的程序版本。

你可以从官方文档中学习如何编写编辑器脚本。

6. Learn to program defensively 【学习防御性编程

防御性编程是防御式设计的一种形式,旨在确保在不可预见的情况下维持软件可发展性的功能。防御性编程技术特别是在软件被滥用时应用更为广泛。

通常,当你写MonoBehaviours时,你应该确保以下几点:

1、所有需要用到的参考是设置的
2、所有必须的组件是存在的
3、如果你使用单例,确保它们是存在的
4、如果你搜索对象或者想要找到某些属性,请尽可能用最快速的方法
5、混合编辑器代码在运行场景前进行多次检测
For many of these checks you can use asserts. You should also read A Story of NullPointerException Part 1 and 2.

7. Implement in-editor and/or in-game cheats 【在编辑器或者游戏中实现作弊系统)】

在学习如何编写编辑器脚本后,你应该能够编写一组编辑器中的作弊工具。它可以通过菜单选项来解锁一些东西。(例如,所有的等级限制)。这真的很容易编写。

• 通常你都应该写一个作弊工具,它可以让你:
• 解锁所有等级限制、角色、道具等。
• 加一个无敌。
• 加减数值,如,时间、金钱、硬币等。
• 使自己看到玩家看不到的东西(上帝视角)。
• 其它任何可以帮助你测试你的游戏的东西都可以。

当然更实用但是也更难写的是游戏中的作弊秘籍。这些类型的作弊可以在Unity编辑器之外执行,但是你必须考虑到底需要怎么执行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序员
    +关注

    关注

    4

    文章

    945

    浏览量

    29700
收藏 人收藏

    评论

    相关推荐

    请问Unity Gain Bandwith是什么?

    请问Unity Gain Bandwith是什么?
    发表于 09-06 07:42

    Unity中国与洲明科技达成战略合作

    近日,为期三天、备受瞩目的全球Unity开发者大会 Unite2024在上海开幕。
    的头像 发表于 07-27 09:40 295次阅读

    适者生存,程序员最终会流向哪……

    程序员没有永远的护城河!!就目前的互联网大环境来看,it行业已经是……
    的头像 发表于 03-11 17:11 298次阅读
    适者生存,<b class='flag-5'>程序员</b>最终会流向哪……

    Unity正式支持苹果visionOS平台订阅用户

    开发者需使用 Unity Hub 下载最新的 Unity 2022 LTS 版本,并安装 visionOS Build Support 插件方能为 Vision Pro 打造空间应用。有一点值得关注,现阶段visionOS 的开发仅限于采用苹果自研芯片的 Mac 电脑。
    的头像 发表于 02-01 11:09 681次阅读

    gradle安装与配置unity

    Gradle是一种用于构建和自动化构建过程的强大工具,而Unity则是一款跨平台的游戏引擎。在Unity项目中使用Gradle可以帮助我们更方便地管理和构建项目,同时能够提供更高的自定
    的头像 发表于 12-07 14:48 1758次阅读

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 0次下载
    <b class='flag-5'>程序员</b>表白<b class='flag-5'>程序</b>

    嵌入式程序员应知道的几个基本问题

    电子发烧友网站提供《嵌入式程序员应知道的几个基本问题.pdf》资料免费下载
    发表于 11-20 11:21 0次下载
    嵌入式<b class='flag-5'>程序员</b>应知道的几个基本问题

    Unity与ROS的Service话题介绍

    Service话题 首先使用同样的方法可以完成srv文件的导入 服务端的实现。Hierarchy窗口的“+→Create”Empty”创建空GameObject,命名为
    的头像 发表于 11-17 17:36 524次阅读
    <b class='flag-5'>Unity</b>与ROS的Service话题介绍

    如何将消息导入Unity

    自定义msg 将消息导入Unity的步骤如下所示: 1.Unity的菜单“Robotics→Generate ROS Messages…”选择。 2.在“ROS message path”中选
    的头像 发表于 11-17 17:26 423次阅读
    如何将消息导入<b class='flag-5'>Unity</b>

    Unity与ROS链接介绍

    对于ROS而言,其最常用的就是Topic话题以及Service两个了。之前我们在了解Unity Robotics Hub时候就了解到基本的Unity和ROS的通讯,下面我们来详细介绍一下Unity
    的头像 发表于 11-17 17:22 826次阅读
    <b class='flag-5'>Unity</b>与ROS链接介绍

    【风火轮YY3568开发板免费体验】+ YY3568安装运行Unity的自制游戏教程范例

    ; 在YY3568上点击对应的app图表,即可运行Unity游戏程序; 可惜一点是,两个教程暂时都没有对Android系统的触屏和声音的良好兼容的移植,因此暂时不能操作畅玩游戏。
    发表于 11-14 11:44

    喜迎1024程序员节!祝各位开发者们“码”到“程”功!

    祝各位开发者们,节日快乐! 程序员(Programmer)是从事程序开发、维护的专业人员。 对于奋斗在一线的程序员们来说, 10月24日 是一个特殊的日子,这一天是属于程序员们自己的节
    的头像 发表于 10-24 20:00 625次阅读
    喜迎1024<b class='flag-5'>程序员</b>节!祝各位开发者们“码”到“程”功!

    今天程序员节长沙出招 全国首个!长沙为程序员打造“1024街”

    今天10月24日,今天程序员节;先给程序员点赞,我们还看到有一些平台举办了程序员节;而在长沙,更有为程序员打造“1024街”。 昨天第四届“长沙·中国1024
    的头像 发表于 10-24 14:29 551次阅读

    程序员节 | 今年程序员们都想要的礼物竟然是……

    原文标题:程序员节 | 今年程序员们都想要的礼物竟然是…… 文章出处:【微信公众号:微软科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 10-24 10:35 421次阅读
    <b class='flag-5'>程序员</b>节 | 今年<b class='flag-5'>程序员</b>们都想要的礼物竟然是……

    Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀

    ,与Unity中国进行链接,终于在9月26号,Unity中国宣布开启支持OpenHarmony平台的团结引擎内测招募(https://unity.cn/tuanjie/tuanjieyinqing)。这
    发表于 10-23 16:15