找回密码
 立即注册

Unity游戏开发有哪些让你拍案叫绝的技巧?

[复制链接]
发表于 2020-12-31 16:52 | 显示全部楼层
这个说来话长,随便写一些吧。

    借助 Prefab 暂存数据。可以直接在脚本的 Inspector 上填写,然后把整个 GameObject 拖成 Prefab 暂存。等要用的时候再拖出来。
    DontDestroy模式,在跨场景的时候保持某些对象一直存在,不必要每次都重新加载,譬如显示广告的模块。内置的 Awake,Start,Update,FixedUpdate,LateUpdate 函数,令开发者直接往游戏循环里加内容,非常方便快捷。Input.MouseDown 在移动设备上也通用,对于一些对输入性能要求不高的操作,直接用它来代替 Input.TouchCount或者 RaycastHit 即可。新的 UGUI 支持多种 Camera 渲染,以及 RectTransform 里Anchor 的灵活配置,功能很强大。提前设计好的话,可以一套 UI 同时支持 iPhone4/5/6/iPad以及所有 Android 设备各种尺寸的分辨率。再也不必做多套 UI 来适应各种设备了。Editor 脚本,可以方便在编辑器里扩展,对开发和摆关卡帮助极大。测试运行时,可以在任意时候暂停游戏,重新调整数值,游戏对象的位置等等,然后再继续游戏。Editor/Resources 目录可以存在多个,且可以存放在任意目录下。写自己的插件或者代码库时可以自带辅助的资源。在 Hierachy 层级对话框,可以随时输入搜索关键字,然后一起选中筛选出来的GameObject,这个时候可以同时修改它们的相同属性。内置取色器可以暂存颜色。脚本的公用属性在 Inspector 中显示时,可以用额外的修饰符控制其显示方式,取值范围等等,非常方便。StreamingAssets 目录是用来存放不加密的外部文件。它还有一个极好的用途是存放测试数据。方便在 PC/MAC/移动设备上都能调用到同样的测试数据进行模拟处理。配合 Alfred 这款快捷启动的小工具,输入“us 关键字”即可快速调出Unity 的 ScriptAPI,你是否也经常忘记 Collier/Trigger 函数的完整写法?每次都需要从帮助手册里复制代码段?
发表于 2020-12-31 16:59 | 显示全部楼层
还在用4.X,  拍案叫绝不敢说, 多开几个Unity实例我不知道各位看官怎么区分开的倒地是哪个?

我们用Unity的C#功能识别路径把Unity的路径打到标题栏, 这样就方便多了

本帖子中包含更多资源

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

×
发表于 2020-12-31 17:03 | 显示全部楼层
废话不多说,Unity游戏开发的这些技巧能不能拍案叫绝,看了就知道。
1. ALT + 鼠标左键点击 Hierarchy 对象可以展开和收起对象的所有子对象;


2. 在当前编辑器窗口中摁下“SHIFT + 空格键”,可以最大化/最小化当前窗口;


3. 编辑器中大部分数值类型的输入框都可以输入数值运算,拾色器内的输入框也不例外;


4. 新版本的 Unity 中可以在 Create 菜单中可以快速创建三角形,圆形等形状的 Sprite;


5. 重命名 GameObject 导致动画中对象引用丢失时,修改动画内的名字可以修复;


6. Rect Tools 对 3D 物体也起作用


7. CTRL + ALT + 数字键 保存当前 Hierarchy 选中方案,CTRL + SHIFT + 数字键恢复保存的 Hierarchy 选中方案;


8. 编辑器 Inspector 中颜色是可以复制的;


9. 依次点击 暂停 -> 播放 -> 下一步 按钮可以从第一次帧开始调试程序;


10. Asset Store 是个宝库,有很多免费插件可以增强 Unity 编辑器。比如这款免费插件可以快速打开 Unity 的特殊文件夹:
------------------华丽的分割线---------------------
想更全面的学习Unity游戏开发技能?
猛戳:Unity5基础入门教程
免费实战Unity游戏开发案例视频,感兴趣的可以学下。
传送门:Unity3D初级实战项目之方块跑酷


关注微信公众号:yihuwang2012,更多软件资讯在等你,转身会员专区,可享更多的免费学习教程~
好了,今天的Unity游戏开发就介绍到这里,后面继续补充。

本帖子中包含更多资源

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

×
发表于 2020-12-31 17:08 | 显示全部楼层
低成本多开工程
windows下:符号链接Assets、ProjectSetting、Library/metadata、Library/AtlasCache、Library/ShaderCache
osx下:Assets不能是符号链接,so,创建一个Assets文件夹,然后链接主工程Assets下的所有文件夹跟文件,其他一样


非运行时驱动GameView窗口的OnGUI
一般情况下,非运行时GameView的OnGUI事件是不派发的。就是你在OnGUI里写了依赖了EventType.MouseDown之类的输入事件都是没法运行的。
但是如果一个带有Inspector的场景对象数据改变了的话,GameView就会刷新一帧。所以,在OnGUI里修改一下position再改回来,GameView就会刷新啦
            //hack:触发一次position的修改->引发inspector更新->引发GameView刷新->驱动OnGUI事件派发
            {
                var old = this.transform.position;
                var dirtyPos = old + Vector3.one;
                this.transform.position = dirtyPos;
                this.transform.position = old;
            }
非运行时GameView交互

本帖子中包含更多资源

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

×
发表于 2020-12-31 17:15 | 显示全部楼层
2018里拍案叫绝的操作真的太多了。
首先是对“老年C++开发者”非常友好的Unsafe C#,亦可以称之为Safe C++,加上PC端IL2CPP的普及,可以使游戏在runtime达到真正Native C++的水平,以及新版C# 7的引用,比如ref local和return ref之类的操作,也提高了Native编码的水平,比如这里直接使用C++的方式访问NativeArray的值的引用,避免了繁重的value copy操作(本人正在开发一个底层渲染的开源,对性能要求比较苛刻,其中DrawingPolicy是一个体型很庞大的struct):
我个人认为,在足够有经验的,对性能有很高要求的程序手里,绝对称得上是拍案叫绝了。不仅做到完全没有GC,而且还达到了原生C++的效率。
有人问,游戏引擎本来就对性能要求很高鸭,拥有Native Performance不是很正常的吗?之前才不正常好吧。
诶,这另一个特点就来了,Unsafe保留了Unity自古以来的优良传统,编辑器极其强大。各种Debug系统,所以我会称之为Safe C++。
而且Unity在Editor里还是使用虚拟机,所以开发的时候还是该怎么爽就怎么爽的。
写完代码不用重启编辑器啊~不用编译等半天啊~
写完Shader不用等编译啊~~更不用等什么联合编译啊~~而且官方还见缝插针的修复了Shader runtime compiling的问题,现在一边玩着一边改Shader代码简直美滋滋……
至于其他的,SRP,Progressive GPU,Vulkan API,Job System之类的更偏向于实际技术实现而非“技巧”了,为了不偏题就不说了。
其实今年在看GDC的时候,就感觉Unity的发布会和其他的一些同行比起来虽然不那么酷炫,但是要更加接地气,比如说行业内大火的光线追踪,Unity带来的Progressive GPU目前看来是可以确确实实的提高游戏开发的质量和效率的。
虽然很多操作还是Preview,而且也不如Unity 5那种更新轰动性强,但是带来的提升是全方位的,接地气的,技术比较熟练的高级开发者确实可以选择更新一波。

本帖子中包含更多资源

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

×
发表于 2020-12-31 17:23 | 显示全部楼层
在网络游戏开发中,unity很多建议是让你build一份,然后editor和build测试。其实有个取巧的办法。

1. 有Unity网络游戏项目文件夹Networking
2. 用rsync同步到本地另一个文件夹NetworkingClone(你也可以用File Watching来监控文件变化,并同步)
3. 用Unity同时打开这两个项目。

你就可以在俩editor中debug啦。

rsync在windows可能比较麻烦,传送门:
http://rclone.org/

用Golang写的类rsync工具。只有一个bianry,方便携带。
发表于 2020-12-31 17:32 | 显示全部楼层
很多,先写一些

  • Unity 启动时执行参数,-executeMethod <ClassName.MethodName>,这种技巧可以使得通过写Python 或者 shell脚本去做一些自动化的操作,比方说自动打包工具,打包的流程通过编写编辑器插件完成,在外部通过脚本去做更新本地工作区,自动启动Unity调用编辑器插件的 <ClassName.MethodName>方法执行打包流程。比方说unity装在"C:\Program     Files (x86)\Unity\Editor\Unity.exe" 下面,那么可以在CMD 下面输入 C:\Program     Files (x86)\Unity\Editor\Unity.exe -executeMethod <ClassName.MethodName>工程越做越大之后,很多时候想要查看一个script或prefab被哪些prefab或scene引用,正确的姿势是:
首先确认EditorSettings 里面AssetSerialization的Mode设置为Force Text,这样Unity对Asset的序列化方式通过yml文本格式。然后写一个编辑器插件,Unity的对象引用关系是通过guid实现的,每个对象的guid保存在对象meta文件中,将guid 读出来,然后搜索工程下面的所有.prefab和.unity后缀结尾的文件文本内容,如果在其中找到相同的guid,则表明该该对象引用了它。
    如果一些逻辑同时要被客户端和服务端用到,比方说游戏战斗的数值计算部分,而服务端的编程语言是c/c++,可以将这些代码用c/c++编写,客户端将这份代码分不同平台编译为相应的可以通过DotNet的PInvoke方式来调用的库,然后在代码中将c/c++库中的接口DllImport进来调用。 这种做法的好处是客户端和服务端对于这部分逻辑只用维护一份代码,减少两端不一致出错的可能性。
 楼主| 发表于 2020-12-31 17:38 | 显示全部楼层
谢邀。脚本编译可以不用mono编译器。而编译的dll和il都可以在mono上跑。从而规避老版本编译器的一些生成问题。不知道算不算。
另外,shader lab支持自定义对应版本的bytecode。可以用别的shader编译器来编译shader。也是挺灵活的。
发表于 2020-12-31 17:43 | 显示全部楼层
Unity官方论坛推荐,不用谢哥,哥只是大自然的搬运工。。。
1、Unity小技巧介绍(一)
2、Unity小技巧介绍(二)
3、Unity小技巧介绍(三)
4、Unity小技巧介绍(四)
发表于 2020-12-31 17:44 | 显示全部楼层
技巧老多的了……
有个有点意思的,MonoBehaviour功能模块化。
比如有个角色,会 横向以固定速度移动,纵向按重力加速度下降。

第一级:
做一个横向移动模块 里面有个Update函数 传入Transform,就把Transform按固定速度横向移动。
做一个纵向移动模块 里面有个Update函数 传入Transform,就把Transform按重力加速垂直移动。

做一个角色的脚本 包含一个模块列表,把一个横向和一个纵向模块推入列表,然后角色每次Update就遍历就执行每个模块的Update。

下次要做一个 斜向固定速度的,就重用 横向移动模块。单独写一个纵向固定速度移动的模块。同样的角色脚本,推这两个组件进去,角色就斜着飞了。

第二级:
把一个模块列表做成状态机状态,加个进入模块和退出模块。
加点状态转换逻辑,你就有个状态机了。

第三级:
可以把Update函数,拿一个协程的iEnumerator代替;进入状态就启动协程。定时的,不用更新,或者其他特殊的状态都可以轻松搞出来了。

第四级:
状态里面定义个System.Action<String>之类的事件,模块可以随便抛出这个玩意。呵呵,这下动画关键帧也有了。

……

反正就是抛砖头引玉,有了这种模块化的想法,大部分功能都是排列组合的事情。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-22 06:40 , Processed in 0.095017 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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