游戏开发
文章平均质量分 74
liuhaopen
这个作者很懒,什么都没留下…
展开
-
Unity2018 ECS框架Entities源码解析(三)ComponentDataArray的实现
一个普通的System大体是这样的:public class SampleSystem : ComponentSystem{ public struct Data { public readonly int Length; public ComponentDataArray<A> As; public Compon...原创 2018-12-23 21:28:00 · 8629 阅读 · 1 评论 -
Unity2018 ECS框架Entities源码解析(四)System注入组件信息
我们上章谈过ComponentSystem需要为注入的字段找到符合条件的Archetype链表(m_FirstMatchingArchetype),有两种实现方式,一是每次Update前都遍历所有Archetype找一次,这样简单粗暴但过于低效;复杂点的是做法二,在创建好System时就找一次,之后有新的Archetype创建时就判断一下是否满足条件,是则加进来。我们先从最简单的例子看起:...原创 2018-12-28 10:23:02 · 7517 阅读 · 2 评论 -
Unity2018 ECS框架Entities源码解析(二)组件与Chunk的内存布局
为了性能考虑,所有Entity里的组件数据都会存放在被称为Chunk的连续内存空间里,因为cpu访问某内存时会顺便加载附近的一段数据,所以数据的连续存放有利于提高缓存命中。当然,并不是所有的A组件的值都放在同一个Chunk里的,Chunk是按EntityArchetype分配的。EntityArchetype核心是Archetype类,其实就是一个组件的数组,拥有相同组件集合的Entity指向...原创 2018-12-20 16:43:03 · 12115 阅读 · 2 评论 -
Unity2018 ECS框架Entities源码解析(一)框架的启动与循环
本文主题:ECS框架的启动和循环,System的OnUpdate函数在哪里被调用,运行时disable一个System先上个简约版的类图:World:保存着一个EntityManager和一堆ComponentSystem,默认情况下游戏启动时会为我们创建一个World并通过反射把所有的ComponentSystem类加进去。你要定义多个World也可以,像守望先锋那样有个普通游戏时的...原创 2018-12-07 11:28:58 · 13221 阅读 · 7 评论 -
在windows上编译PC和Android平台的xlua库(并加入第三方lua库lpeg,sproto,lua-crypt)
添加第三方库:因为在项目里需要用到其它的lua库如lpeg,sproto,lua-crypt,所以要把它们编译进xlua里.复制几个库的源码到xlua/build目录里,然后按xlua官方教程(XLua增加删除第三方lua库)那样,先安装cmake,然后在xlua/build/CMakeLists.txt文件里添加几个库的引用如:编译windows平台的库:本来在CMakeLi...原创 2018-10-10 10:04:48 · 12629 阅读 · 3 评论 -
《守望先锋》中的网络脚本化的武器和技能系统
原文地址:《守望先锋》中的网络脚本化的武器和技能系统在GDC2017【Networking Scripted Weapons and Abilities in Overwatch】的分享会上,来自暴雪的Dan Reed介绍了《守望先锋》中网络化的脚本和工具相关技术。一起来看看吧。 嗨,大家好,我叫 Dan Reed, 是暴雪娱乐的游戏工程师(gameplay engineer,译注:游戏机制工程...转载 2018-05-26 11:35:38 · 11490 阅读 · 1 评论 -
Lua-continuation实现原理
原文地址:Programming in Lua(六)-Continuation在之前的 blog 中 (三、五) 讨论了 Lua C APIs 的 continuation 概念。可以说 Lua continuation 的 VM 实现和 APIs 设计是「inevitable and perfect design」,一个支持 coroutine 的 embeded/extendable 语言就得...转载 2018-04-26 09:01:33 · 8321 阅读 · 0 评论 -
在U3D中实现战争迷雾
原文地址:在U3D中实现战争迷雾一、简介RTS类型的游戏经常用到战争迷雾。一开始整个地形被迷雾遮蔽,只有Viewer的周围一定范围可见,随着Viewer的移动,未探索的区域变成了可见。二、实现方法本人之前也没有实现过战争迷雾,但是一提到战争迷雾,我的第一反应是用RenderTexture来实现,几乎所有运算都是在屏幕空间中进行,绘制出迷雾Texture后,再用Projecter将迷雾Texture...转载 2018-02-19 09:28:27 · 13528 阅读 · 4 评论 -
Unity Profiler中常见的WaitForTargetFPS、Gfx.WaitForPresent 和 Graphics.PresentAndSync
原文地址:扒一扒Profiler中这几个“占坑鬼”WaitForTargetFPS、Gfx.WaitForPresent 和 Graphics.PresentAndSync是我们经常会被问到的参数。想必正在读此文的你也经常在Profiler中遇到过这几项CPU开销过大的情况。对此,我们今天就来好好地聊一聊这几个参数的具体含义和触发规则。WaitForTargetFPS该参数一般出现在CPU开销过低...转载 2018-02-28 11:49:38 · 10654 阅读 · 0 评论 -
Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用
原文地址:Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用0. 前言项目技术测试结束之后,各种美术效果提升的需求逐渐成为后续开发的重点,角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感,于是可以提供动态效果的布料系统就作为了技术预研的方向。笔者在之前的端游项目中有较多使用布料系统制作布料效果的经验,这次也尝试了在Unity引擎中进行布料效果制作的几种方法...转载 2018-02-08 09:52:34 · 7310 阅读 · 0 评论 -
《守望先锋》架构设计与网络同步 -- GDC2017 精品分享实录
原文地址:《守望先锋》架构设计与网络同步 -- GDC2017 精品分享实录《守望先锋》架构设计与网络同步Overwatch Gameplay Architecture and NetcodeTimothy FordLead Gameplay EngineerBlizzard Entertainment翻译:kevinan 在GDC2017【Overwatch转载 2018-02-07 10:17:38 · 6635 阅读 · 0 评论 -
推荐几个Lua实现原理的专栏
由于看的年代久远所以忘了哪篇更好,但都是看过觉得不错才收藏下来的,所以以下排名不分先后,建议都看看的:Lua5.0的实现(这个只有十来页的简短介绍,可以初步认识Lua内部实现)探索Lua5.2内部实现(这个只是比上面的稍微长一点而已)lichuang的详细的Lua内部实现超级详细的Lua内部实现云风的Lua解析Lua|技术奇异点如果你有更好的也请推荐原创 2018-02-07 10:14:12 · 12558 阅读 · 1 评论 -
Unity渲染教程(十九):图形处理器的实例化技术
原文地址(推荐其系列文章):Unity渲染教程(十九):图形处理器的实例化技术译者:崔嘉艺(milan21)审校:王磊(未来的未来)渲染一大堆的球体。添加对图形处理器实例化技术的支持。使用材质属性块。让实例化技术和LOD组一起工作。这是关于渲染基础的系列教程的第十九部分。在前面的部分里我们涉及了全局光照,体积探测器还有LOD组转载 2018-02-06 10:37:26 · 9068 阅读 · 0 评论 -
Unity3d-MMO游戏优化经验分享沙龙总结
原文地址:MMO游戏优化经验分享沙龙总结昨天去上海参加了UWA公司的张鑫和张强进行了一场关于MMO游戏开发和性能优化的沙龙,活动链接为:UWA优化日上海站|传统MMO手游性能该如何突围?。虽然第二场场景分块加载部分的内容没有预期中对目前的项目那么有帮助,再加上最后因为赶火车没有听完Q&A的环节就离开了(然而还是没有赶上火车,此中悲苦就不提了。。。),有些疑问没有提出来讨论,略有遗憾,但对于...转载 2018-02-10 09:36:39 · 9084 阅读 · 0 评论 -
OpenGL管线(用经典管线代说着色器内部)
原文地址:OpenGL管线(用经典管线代说着色器内部)图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性。OpenGL作为图形硬件标准,是最通用的图形管线版本。本文用自顶向下的思路来简单总结OpenGL图形管线,即从最高层开始,然后逐步细化到管线图中的每个框,再进一步细化到OpenGL具体函数。注意,这里用经典管线代说着色器内部,也就是Open转载 2018-02-05 11:56:13 · 8786 阅读 · 0 评论 -
重建 是UGUI优化的关键 -- Unite2017嘉宾杨怀忠分享《UGUI深度优化》
原文地址:重建 是UGUI优化的关键 -- Unite2017嘉宾杨怀忠分享《UGUI深度优化》关于UniteUnite大会是由Unity举办的全球开发者大会,至今已有10年的历史。Unite现已成为游戏行业,VR/AR行业中最具有权威性和影响力的活动。 杨怀忠:前面几位同事有点拖堂了,所以我可能今天讲的速度会快一点。我今天跟大家分享的是UI方面的经验。我先介绍一下UI的基础知识,会稍微提一下UI...转载 2018-02-09 10:08:00 · 10876 阅读 · 2 评论 -
轩辕传奇场景优化笔记
原文:轩辕传奇场景优化笔记推荐作者的知乎专栏:MACK的游戏开发笔记最近在做一些优化相关的内容,每个版本的性能review。顺便翻了翻以前的优化笔记,找到了一篇写的还算正式的笔记。13年的工作生涯大半时间都在做渲染和优化相关的内容,优化这东西真的是扁鹊三兄弟的故事,只有痛了才知道它的重要性,而当它不是问题的时候却很少有人会注意到它。目的和需求:客户端安装包过大,玩家下载不方便,希望能减少安装包容量...转载 2018-02-03 10:46:26 · 6226 阅读 · 0 评论 -
Unity游戏中的图形渲染优化
Unity游戏中的图形渲染优化 转载自:Unity游戏中的图形渲染优化 技术文章翻译 原文链接 Unity官方教程中的一篇文章,虽然讲得不深,但是比较系统全面,对寻找问题,优化性能还是有帮助的,分享给大家把。英语渣,翻译有啥不对的地方,欢迎指正。 简介 在这篇文章中,我们将学习:在Unity渲染一帧画面背后发生的事;在渲染过程中可能发生的 一些性能问题以及如何去解决这些和渲染相关的性能问题。在阅读...转载 2018-02-20 10:29:48 · 14612 阅读 · 1 评论 -
MMO手游地图同步方案总结
1. 客户端地图格子的相关知识 原文地址:一款已上市MMO手游地图同步方案总结 在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系:a) 3D坐标系:所有需要3D渲染的角色和光效,都以3D坐标系中定位。b) 2D坐标系:用来定位和绘制固定的2D地图元素,比如草皮、马路等。c) 3D坐标里的格子坐标系:用来实现打掩码、自动...转载 2018-02-21 10:23:46 · 7944 阅读 · 0 评论 -
提取lua代码的函数定义和调用信息(函数名、参数列表、返回值列表等)
最近想做个工具来做一些lua代码检测,比如统计某函数体里的a函数的调用次数,调用绑定事件后是否有把其返回值在某退出函数里解绑定,或者某函数调用的参数是不是和协议文档里的有对应上(这个还是建议直接从协议文档生成lua代码的好).大学时就用正则表达式做过java代码的解析了,这次想换个实现姿势,也想弄个通用点的,大致想法就是提取lua代码中的函数体和表达式信息,并转化成一些字符串列表方便查询。比如把一...原创 2018-04-19 18:04:35 · 20555 阅读 · 1 评论 -
帧同步(LockStep)该如何反外挂
原文地址:帧同步(LockStep)该如何反外挂在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例。目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同)。那么就有很多人担心起来,客户端会跑全部逻辑帧同步该如何反外挂,和状态同步有什么区别呢?首先我们来分析一下手游的风险和外挂的分...转载 2018-03-29 14:41:38 · 10289 阅读 · 0 评论 -
Unity编辑器扩展-制作界面时引入外部的参考图
一般做界面,我们按美术出的图,那里拉个按钮,那里弄个文本,其坐标大小比例等肯定要严格按美术出的图来调节的,所以编辑界面时最好就有张参考图,添加方式如下:参考图的资源可来自项目外的目录,添加后,可以选中它后右键菜单->锁定,这样就不会碍着你了.关于在Scene视图显示右键菜单可以见:Unity编辑器扩展-在Scene视图添加右键菜单实现主要分三步:1弹出选择文件的界面,2选中某图片文件后加载成...原创 2018-04-03 19:55:10 · 12063 阅读 · 0 评论 -
Unity Shader-死亡溶解效果
简介原文地址:Unity Shader-死亡溶解效果游戏里面角色死亡的时候,有很多方式可以表现人物死亡效果。最简单粗暴的,播放完死亡动画直接删除或者直接Y轴逐渐降低,沉到地下;比较好的死亡效果就是今天要研究的这种效果-死亡溶解。个人印象比较深刻的就是《生化危机6》里面的克里斯篇,里面的功夫丧尸挂掉之后都是会有一个类似的死亡溶解效果。不过《生化危机6》这种3A大作的效果肯定不仅仅是一个shader能...转载 2018-03-28 09:28:32 · 12481 阅读 · 2 评论 -
Unity编辑器扩展-在Scene视图添加右键菜单
我用Unity前的界面编辑器是可以选中节点右键显示菜单的,所以现在也想在Unity上弄一个,需要做的也不多,一是知道什么时候在Scene视图右键单击了,二是在鼠标位置上显示菜单.对于拦截Scene视图的右键单击事件,可以给SceneView.onSceneGUIDelegate加个处理方法就可以了,Scene视图的大部分事件都可以统一在那里处理.菜单的话Unity也封闭得很好了,主要用Generi...原创 2018-04-02 19:49:44 · 13791 阅读 · 5 评论 -
Unity Shader-非主流纹理采样研究(流光,溶解,隐身效果)
简介原文地址:Unity Shader-非主流纹理采样研究(流光,溶解,隐身效果)今天来研究几个效果,最近比较忙,所以来弄几个比较简单的效果玩一下。不过也是游戏中常用的一些效果,流光效果,按照方向的溶解效果。其实这几个效果主要运用的就是世界空间坐标或者模型空间坐标用于采样的一个方法,总之就是有些非主流的纹理采样方式。不多说,下面进入正题。流光效果首先来看一下流光效果。流光效果是一个非常常见的效果,...转载 2018-03-27 09:48:50 · 9061 阅读 · 0 评论 -
Unity编辑器扩展-生成prefab的预览图并保存为图片
Project视图里的prefab文件都是一个蓝色的正方体,我想给它们加个预览图,暂时不知道怎么改Project视图的,但反正我想像NGUI那样有个专门的窗口存放一些常用的prefab,所以做成了如下效果:关于如何定制窗口,可以参考雨松的教程:Unity3D研究院之拓展自定义编辑器窗口实现思路:主要参考自:获取unity prefab的预览图像unity在2017.2版本可以使用官方自带API:A...原创 2018-03-21 14:38:59 · 19219 阅读 · 4 评论 -
Unity编辑器扩展-点击Projec视图的图片就赋给当前选中的Image节点
我所知道的,UGUI给Image赋上图片的方式有二:一是把图片拉去Image的监视器的Source Image处,一是在点其小圆点弹出选择图片的界面。两种方式我都觉得有点麻烦,我想如果我已经选中某Image节点了,这时再点击Project视图的图片时就要给我赋上该图,效果如下:实现思路:Selection.selectionChanged这个事件是Unity编辑器几个视图选中的东西变更时会触发的,...原创 2018-03-21 11:41:08 · 12197 阅读 · 0 评论 -
Unity编辑器扩展-拉UGUI的prefab入场景时挂在鼠标下的Canvas上
Unity的编辑器,你从Project视图拉图片或者prefab到Scene视图时,默认情况下它会挂在根节点上(起码我用的Unity5.4的是这样的),而每次都要手动地把新增节点挂到想要挂的Canvas上。还好Unity编辑器扩展可以让你自己自由定制,我想要的效果是这样的:实现思路:首先我们需要知道有什么东西拉进Scene视图了,一般来说插件系统会以Drag事件的形式给用户做定制处理的,Unity...原创 2018-03-21 11:03:31 · 12515 阅读 · 0 评论 -
Unity编辑器扩展-判断当前鼠标在scene视图下有哪些的节点
有时我们需要知道当前鼠标进入了Scene视图中的哪个控件区域,比如说要实现一功能:把prefab拉入Scene视图时判断拉入的位置是否有Canvas,有的话就挂在该Canvas上,无则生成一个。首先是获取鼠标的坐标:可通过Event.current.mousePosition;拿到但拿到的是基于Scene视图的坐标,需要转化为世界坐标:Event e = Event.current;Camera...原创 2018-03-19 10:07:34 · 12693 阅读 · 0 评论 -
Unity-UGUI提高开发效率的插件集合
项目源码都在github里:UIEditorPrefabWin窗口一般一些通用常用的资源我们都会做成prefab,比如某些按钮,文本样式等,然后用到时就在Project视图把它拉入场景,但project视图看不到prefab的预览图,都是蓝色的方块比较难辩认,所以可以用PrefabWin这个窗口拉控件出去,拉到场景时会判断控件落在哪个Canvas上,有则挂其上,无则自动生成一个Canvas...原创 2018-03-17 18:24:45 · 27414 阅读 · 21 评论 -
unite2017《Unity企业级支持案例与分析》
在今天举办的Unite2017开发者大会上,Unity大中华区技术支持总监张黎明以“Unity企业级支持案例与分析”为主题进行了分享。以下为演讲实录:张黎明:非常感谢大家来参加今年的Unite,其实我现在看到有的朋友已经不是第一次来参加Unite,我是第三次站在Unite讲台上面,感到非常荣幸。今天的题目是Unity企业级支持案例与分析,我们Unity在中国的业务已经开展五年时间了,最近一两年时间...转载 2018-01-15 14:03:55 · 6360 阅读 · 0 评论