
Unity
unity相关的技术分享
水曜日鸡
死宅程序员,守护最好的二次元
展开
-
【物理篇】从零搭建2D物理系统③——物体相交测试(完结)
如何进行相交测试在第一期文章中,我们最后留下来一个问题:如何判断一条射线和哪些物体相交?这个问题分为两步来解决:使用空间场景划分找到可能相交的物体(粗测阶段)。(找到1,2,3这三个物体)对上一步找到的物体进行逐个遍历,判断出是否相交(精测阶段)。(对1,2,3进行遍历,最终只有1是相交的)粗测阶段粗测阶段首先需要用一个AABB把射线包裹起来。这一步很简单,注意当射线完全垂直或者水平时需要有一个最小宽度和最小高度。/// <summary>/// CreateRect B原创 2020-08-17 00:02:27 · 669 阅读 · 0 评论 -
【物理篇】从零搭建2D物理系统②——用松散四叉树结合网格法来划分场景
从一道字节跳动面试题说起在开始今天内容之前,我想先讲一道前几天看到的字节跳动面试题:玩家在场景中放了一个AOE技能,场景中有10万个敌人,如何知道AOE技能打到哪些敌人?这道题的解法肯定不可能是挨个遍历,那样复杂度会爆炸。这道题想考察的是空间划分的知识。空间划分指的是使用特定的数据结构来划分场景空间中的物体,从而在碰撞检测的时候能够快速过滤掉不需要的部分。比如图中使用了四叉树的数据结构划分场景,绿球要想知道它和哪些红球进行相撞,它只需要进行三次过滤就能把范围缩小到K区域,然后与K区域内的红球进行挨个原创 2020-08-11 23:49:22 · 1520 阅读 · 0 评论 -
【物理篇】从零搭建2D物理系统①——刚体和碰撞检测事件
公司上一个项目做的是2D横版动作游戏,由于unity的2D物理系统功能有限,不能满足策划的需求,所以我们程序组自己实现了一套物理系统。这个系列文章分享的是如何不依赖unity从头自己手撸一个物理系统。 (这里再提一句外话,网上关于Gameplay相关的博客实在是太少了,绝大部分博客无外乎是在分享图形学、UI、热更新、打包、优化等方面的知识。像我们Gameplay程序员什么时候才能站起来啊?气·抖·冷·哭! 这也是我打算写这篇博客的初衷之一。)在正式开始之前,需要先分析物理系统里都有什么功能:刚体运动原创 2020-08-10 01:19:08 · 1385 阅读 · 0 评论 -
【整合篇】如何提升游戏感?
Jan Willem Nijman 是《废土之王》的设计师。他在这个视频里Jan Willem Nijman - Vlambeer - "The art of screenshake"分享了他在 《废土之王》用到的用于提升游戏手感的手法 。这篇文章会对视频里提到的技巧进行归纳,同时给出程序实现上的注意点,如果你是个策划,可以跳过这个部分。 《废土之王》,最早13年出现的俯视角射击Rougulike地牢游戏。后来被很多游戏借鉴之所以写这篇文章,是因为这是凉屋游戏的面试题之一原创 2020-06-07 00:14:42 · 2071 阅读 · 0 评论 -
【音频篇】Unity中使用wwise的常见问题及解决方案
”音频篇“系列文章记录了我在平时工作中遇到的音频相关的问题。Wwise,是一种音频中间件。关于音频中间件的可以看这篇文章:什么是音频中间件?。本文内容不是介绍wwise,也不是教大家怎么用它,因为这些东西,上网搜都能搜到。本文内容是水鸡我在游戏中使用wwise时遇到的问题以及解决方案。所以如果没有用过wwise的,这篇文章可以先收藏以后再看。没有声音1. 报错信息:Wwise: Event ID not found: xxxxxxxxxxxx是一段数字,出现这个报错,说明在bank还没有被加载,原创 2020-06-07 00:09:25 · 11211 阅读 · 0 评论 -
【功能开发篇】游戏中的时间系统&修改Unity自带组件运行速度
”功能开发篇“系列文章记录了我在平时工作中遇到的问题以及一些和游戏功能相关的项目经验。时间系统,是几乎每个游戏都会有的一个功能。水鸡我今天带大家学习的是 Chronos这个时间控制插件。它包含时间加速、减速、暂停、回溯四大功能,并且有 全局对象控制、单组对象控制、单体对象控制、区域对象控制 四种控制方式。能够满足游戏里的各种关于时间的复杂需求。这篇文章会介绍插件里的功能,但是不会面面俱到,只是单纯讲插件怎么用对个人能力的提升并没有用,所以本文还会花相当的篇幅分析这个插件是如何实现这些复杂功能的。最终目原创 2020-06-06 21:58:18 · 5477 阅读 · 2 评论 -
【功能开发篇】使用对象池的注意事项
”经验分享·功能开发篇“系列文章记录了我在平时工作中遇到的问题以及一些和游戏功能相关的项目经验。对象池是一个老生常谈的东西。根据我的经验,使用对象池时需要注意以下问题:1. 如果对象在多个场景经常使用,那么这个对象所在的对象池不应该在过场景的时候清空。典型的跟玩家相关的东西就需要保留,比如脚步烟啊,攻击特效啊这些,如果进入每个场景都重新生成,显然浪费内存。而每个场景很有可能不一样的东西,比如每关刷出来的敌人,它的对象池就应该清空。具体的做法是在对象池的类里加一个属性:public bool r原创 2020-05-17 23:48:48 · 642 阅读 · 0 评论 -
【编辑器扩展篇】使用GUIStyle让编辑器更好看
”经验分享·编辑器扩展篇“系列文章旨在写出更好看,更好用,更能提升团队开发效率的编辑器扩展功能。在GUILayout和EditorGUILayout里面经常能看到GUIStyle这个参数。GUIStyle主要作用就是让编辑器更好看一点。下面两张图,一个使用了GUIStyle,一个没有使用。当然如果你对美观没有什么追求的话完全可以不用了解GUIStyle。使用GUIStyle有两种方法,一种是使用Unity内部定义好的样式,一种是自己新建。先讲默认的样式。1. 使用字符串当成GUIStyle原创 2020-05-17 23:43:35 · 1675 阅读 · 0 评论 -
【Lua运行时热重载功能实现②】重载Lua模块、替换函数
上篇说到检测Lua文件发生变化,这篇来讲怎么重载lua模块。请配合github工程来看。关于重载lua的功能在Hotfix.lua脚本上。这个脚本有三个函数,hotfix、update_table、update_func。hotfixfunction hotfix(filename) print("start hotfix: ",filename) local oldModule if package.loaded[filename] then oldModu原创 2020-05-11 00:02:23 · 2215 阅读 · 0 评论 -
【Lua运行时热重载功能实现①】检测Lua文件发生变化
这几天由于项目组需要一直在琢磨一个功能,就是如何在unity编辑器下不需要重启游戏就能让lua文件改动后立刻生效。如果能够实现这个功能,那会大幅提高开发效率。查了一圈,网上的结果都不太满意,要么只有理论没有源码,要么有源码但是考虑的情况过于简单。所以自己打算写博客告诉大家,我是怎么实现的,并且提供完整源码。github工程地址使用的unity2019.3.0 + xlua。改成其他lua也是可以用,只要在传入luaEnv的时候做相应改动就可以了。这个功能大体分为两大步:检测哪些lua文件发生变化原创 2020-05-10 21:31:55 · 2532 阅读 · 0 评论 -
Unity 动画方面的优化
原视频:https://v.qq.com/x/page/s05175xbjvd.html。不得不说UWA团队真的厉害。以下内容都是从视频里的概括而来。UWA团队网络上还有很多博客,有兴趣的童鞋自己搜索。optimize gameobject针对Mecinam新版动画系统的优化选项,默认情况下会将动画网格下的所有骨骼结点隐藏,但是,你可以通过“Extra Transform to Expose”查看...原创 2018-03-01 18:05:42 · 4143 阅读 · 0 评论 -
防御式编程之Unity断言的使用
断言是被用来检查非法情况而不是错误情况,即在该程序正常工作时绝不应该发生的非法情况,用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理,增强程序的健壮性、容错性,减少程序使用中对用户不有好的行为,不让(通常也不必)用户知道发生了什么错误。通常在Unity开发过程中,经常有一堆外部参数需要配置,但是总会有时候忘记配置一部分参数,这个时候运行起来就会报错。稍微好点的做法是在代码中写...原创 2018-04-23 14:57:15 · 1937 阅读 · 0 评论 -
Unity批量压缩图片的功能实现
在不同平台下开发时,可能会遇到改变图片压缩格式的需求。这里把我之前实现的功能分享给各位。可以学到的知识点如下:拿到原始图片的大小判断一个数是不是2的次幂编辑器扩展之增加菜单按钮、显示对话框、显示进度条安卓和IOS平台的图片压缩格式public class TextureCompressOnPhone{ private const string AndroidPlatfor...原创 2020-03-19 21:33:24 · 856 阅读 · 0 评论 -
Unity2019生成xLua的wrap代码时报错
Type.IsSZArray没有找到Dictionary的部分构造方法报错解决办法:给xLua生成代码的配置文件(xLua里默认是叫ExampleConfig的文件)加入对应的黑名单,使用BlackList的特性。IsSZArray是属性,可以直接使用官方的方法。Dictionary那个是泛型而且是构造方法,比较复杂。具体参考下面的写法。 //黑名单 [BlackLi...原创 2020-04-22 20:43:04 · 2547 阅读 · 2 评论