- 博客(46)
- 资源 (2)
- 收藏
- 关注
原创 Unity2018 ECS框架Entities源码解析(一)框架的启动与循环
本文主题:ECS框架的启动和循环,System的OnUpdate函数在哪里被调用,运行时disable一个System先上个简约版的类图:World:保存着一个EntityManager和一堆ComponentSystem,默认情况下游戏启动时会为我们创建一个World并通过反射把所有的ComponentSystem类加进去。你要定义多个World也可以,像守望先锋那样有个普通游戏时的...
2018-12-07 11:28:58 13221 7
原创 提取lua代码的函数定义和调用信息(函数名、参数列表、返回值列表等)
最近想做个工具来做一些lua代码检测,比如统计某函数体里的a函数的调用次数,调用绑定事件后是否有把其返回值在某退出函数里解绑定,或者某函数调用的参数是不是和协议文档里的有对应上(这个还是建议直接从协议文档生成lua代码的好).大学时就用正则表达式做过java代码的解析了,这次想换个实现姿势,也想弄个通用点的,大致想法就是提取lua代码中的函数体和表达式信息,并转化成一些字符串列表方便查询。比如把一...
2018-04-19 18:04:35 20555 1
原创 Unity-UGUI提高开发效率的插件集合
项目源码都在github里:UIEditorPrefabWin窗口一般一些通用常用的资源我们都会做成prefab,比如某些按钮,文本样式等,然后用到时就在Project视图把它拉入场景,但project视图看不到prefab的预览图,都是蓝色的方块比较难辩认,所以可以用PrefabWin这个窗口拉控件出去,拉到场景时会判断控件落在哪个Canvas上,有则挂其上,无则自动生成一个Canvas...
2018-03-17 18:24:45 27413 21
原创 Unity2018 ECS框架Entities源码解析(四)System注入组件信息
我们上章谈过ComponentSystem需要为注入的字段找到符合条件的Archetype链表(m_FirstMatchingArchetype),有两种实现方式,一是每次Update前都遍历所有Archetype找一次,这样简单粗暴但过于低效;复杂点的是做法二,在创建好System时就找一次,之后有新的Archetype创建时就判断一下是否满足条件,是则加进来。我们先从最简单的例子看起:...
2018-12-28 10:23:02 7517 2
原创 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源码解析(二)组件与Chunk的内存布局
为了性能考虑,所有Entity里的组件数据都会存放在被称为Chunk的连续内存空间里,因为cpu访问某内存时会顺便加载附近的一段数据,所以数据的连续存放有利于提高缓存命中。当然,并不是所有的A组件的值都放在同一个Chunk里的,Chunk是按EntityArchetype分配的。EntityArchetype核心是Archetype类,其实就是一个组件的数组,拥有相同组件集合的Entity指向...
2018-12-20 16:43:03 12115 2
原创 在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 12628 3
转载 《守望先锋》中的网络脚本化的武器和技能系统
原文地址:《守望先锋》中的网络脚本化的武器和技能系统在GDC2017【Networking Scripted Weapons and Abilities in Overwatch】的分享会上,来自暴雪的Dan Reed介绍了《守望先锋》中网络化的脚本和工具相关技术。一起来看看吧。 嗨,大家好,我叫 Dan Reed, 是暴雪娱乐的游戏工程师(gameplay engineer,译注:游戏机制工程...
2018-05-26 11:35:38 11490 1
原创 用python做爬虫看图软件-RandomPicture
在多次向HR申请程序员鼓励师被无情拒绝后,我决定自力更生,奈何money不够只好代码来凑.我的需求很简单,就是打码打累了或工作闲余之时可以看点美女图陶冶下情操(其实不一样要女的...搞笑图也行),所以就用python做了这个sublime看图插件,图是通过爬虫在特定网页上抓来的,每按一次看图的快捷键就抓几张,目前只实现了抓取游民星空和居然搞笑网上的图。效果如下:使用步骤:1)把本目录复制到Subl...
2018-04-28 11:46:18 10779
转载 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
原创 Unity编辑器扩展-制作界面时引入外部的参考图
一般做界面,我们按美术出的图,那里拉个按钮,那里弄个文本,其坐标大小比例等肯定要严格按美术出的图来调节的,所以编辑界面时最好就有张参考图,添加方式如下:参考图的资源可来自项目外的目录,添加后,可以选中它后右键菜单->锁定,这样就不会碍着你了.关于在Scene视图显示右键菜单可以见:Unity编辑器扩展-在Scene视图添加右键菜单实现主要分三步:1弹出选择文件的界面,2选中某图片文件后加载成...
2018-04-03 19:55:10 12063
原创 Unity编辑器扩展-在Scene视图添加右键菜单
我用Unity前的界面编辑器是可以选中节点右键显示菜单的,所以现在也想在Unity上弄一个,需要做的也不多,一是知道什么时候在Scene视图右键单击了,二是在鼠标位置上显示菜单.对于拦截Scene视图的右键单击事件,可以给SceneView.onSceneGUIDelegate加个处理方法就可以了,Scene视图的大部分事件都可以统一在那里处理.菜单的话Unity也封闭得很好了,主要用Generi...
2018-04-02 19:49:44 13791 5
转载 帧同步(LockStep)该如何反外挂
原文地址:帧同步(LockStep)该如何反外挂在中国的游戏环境下,反挂已经成为了游戏开发的重中之重,甚至能决定一款游戏的生死,吃鸡就是一个典型的案例。目前参与了了一款动作射击的MOBA类游戏的开发,同步方案上选择了帧同步技术(LockStep而非snapshots以下同)。那么就有很多人担心起来,客户端会跑全部逻辑帧同步该如何反外挂,和状态同步有什么区别呢?首先我们来分析一下手游的风险和外挂的分...
2018-03-29 14:41:38 10289
转载 Unity Shader-死亡溶解效果
简介原文地址:Unity Shader-死亡溶解效果游戏里面角色死亡的时候,有很多方式可以表现人物死亡效果。最简单粗暴的,播放完死亡动画直接删除或者直接Y轴逐渐降低,沉到地下;比较好的死亡效果就是今天要研究的这种效果-死亡溶解。个人印象比较深刻的就是《生化危机6》里面的克里斯篇,里面的功夫丧尸挂掉之后都是会有一个类似的死亡溶解效果。不过《生化危机6》这种3A大作的效果肯定不仅仅是一个shader能...
2018-03-28 09:28:32 12481 2
转载 Unity Shader-非主流纹理采样研究(流光,溶解,隐身效果)
简介原文地址:Unity Shader-非主流纹理采样研究(流光,溶解,隐身效果)今天来研究几个效果,最近比较忙,所以来弄几个比较简单的效果玩一下。不过也是游戏中常用的一些效果,流光效果,按照方向的溶解效果。其实这几个效果主要运用的就是世界空间坐标或者模型空间坐标用于采样的一个方法,总之就是有些非主流的纹理采样方式。不多说,下面进入正题。流光效果首先来看一下流光效果。流光效果是一个非常常见的效果,...
2018-03-27 09:48:50 9061
转载 描述编程语言的BNF
转:来自维基百科BNF 规定是推导规则(产生式)的集合,写为:<符号> ::= <使用符号的表达式>这里的 <符号> 是非终结符,而表达式由一个符号序列,或用指示选择的竖杠'|' 分隔的多个符号序列构成,每个符号序列整体都是左端的符号的一种可能的替代。从未在左端出现的符号叫做终结符。基本原理 BNF类似一种数学游戏:从一个符号开始(叫做起始标志,实例...
2018-03-23 15:32:47 15716
原创 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
原创 Unity编辑器扩展-拉UGUI的prefab入场景时挂在鼠标下的Canvas上
Unity的编辑器,你从Project视图拉图片或者prefab到Scene视图时,默认情况下它会挂在根节点上(起码我用的Unity5.4的是这样的),而每次都要手动地把新增节点挂到想要挂的Canvas上。还好Unity编辑器扩展可以让你自己自由定制,我想要的效果是这样的:实现思路:首先我们需要知道有什么东西拉进Scene视图了,一般来说插件系统会以Drag事件的形式给用户做定制处理的,Unity...
2018-03-21 11:03:31 12515
原创 Unity编辑器扩展-判断当前鼠标在scene视图下有哪些的节点
有时我们需要知道当前鼠标进入了Scene视图中的哪个控件区域,比如说要实现一功能:把prefab拉入Scene视图时判断拉入的位置是否有Canvas,有的话就挂在该Canvas上,无则生成一个。首先是获取鼠标的坐标:可通过Event.current.mousePosition;拿到但拿到的是基于Scene视图的坐标,需要转化为世界坐标:Event e = Event.current;Camera...
2018-03-19 10:07:34 12693
转载 iOS微信内存监控
原文地址:iOS微信内存监控WeTest 导读目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段。本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存问题。FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀。对用户而言,表现跟crash一样。Facebook早在2015年8月提出FOOM检...
2018-03-03 18:02:12 7292
原创 SVN技巧-制作批处理工具、锁和blame的用法
批处理-自动化操作我们的游戏有好几个服比如开发服、测试服、稳定服、繁体、英文、韩国、日本...反正好多个,有时修改了点东西就需要提交开发服然后再合并到某几个服,你可以想象到每次提交或合并前要先打开相应文件夹再等它update完然后再merge再commit会有多烦琐,所以我想弄个批处理帮我自动update某个服,update完后弹出merge界面,merge操作完成后自动弹出commit界面,这样...
2018-03-01 12:02:43 9369
转载 Unity Profiler中常见的WaitForTargetFPS、Gfx.WaitForPresent 和 Graphics.PresentAndSync
原文地址:扒一扒Profiler中这几个“占坑鬼”WaitForTargetFPS、Gfx.WaitForPresent 和 Graphics.PresentAndSync是我们经常会被问到的参数。想必正在读此文的你也经常在Profiler中遇到过这几项CPU开销过大的情况。对此,我们今天就来好好地聊一聊这几个参数的具体含义和触发规则。WaitForTargetFPS该参数一般出现在CPU开销过低...
2018-02-28 11:49:38 10654
原创 LeetCode算法题集-200. Number of Islands(岛的数量)
给定一个2维数字表格,其中'1'代表岛,'0'代表水,要求计算岛的数量。一个岛被水包围着,其上下左右的格子是1的话也算同一个岛。你可以假设表格的四个边外都是水。英语原文:200. Number of IslandsGiven a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island i...
2018-02-22 14:24:42 8000
转载 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
转载 Unity游戏中的图形渲染优化
Unity游戏中的图形渲染优化 转载自:Unity游戏中的图形渲染优化 技术文章翻译 原文链接 Unity官方教程中的一篇文章,虽然讲得不深,但是比较系统全面,对寻找问题,优化性能还是有帮助的,分享给大家把。英语渣,翻译有啥不对的地方,欢迎指正。 简介 在这篇文章中,我们将学习:在Unity渲染一帧画面背后发生的事;在渲染过程中可能发生的 一些性能问题以及如何去解决这些和渲染相关的性能问题。在阅读...
2018-02-20 10:29:48 14612 1
转载 在U3D中实现战争迷雾
原文地址:在U3D中实现战争迷雾一、简介RTS类型的游戏经常用到战争迷雾。一开始整个地形被迷雾遮蔽,只有Viewer的周围一定范围可见,随着Viewer的移动,未探索的区域变成了可见。二、实现方法本人之前也没有实现过战争迷雾,但是一提到战争迷雾,我的第一反应是用RenderTexture来实现,几乎所有运算都是在屏幕空间中进行,绘制出迷雾Texture后,再用Projecter将迷雾Texture...
2018-02-19 09:28:27 13528 4
原创 LeetCode算法题集-11. Container With Most Water(能盛最多水的水桶)
给定n个非负整数a1, a2, ..., an, 每个都代表坐标轴上的高,其坐标为(i,ai).可以根据这条数组构建一幅柱形图,每任意两条柱子形成一个水桶,要求找到能盛最多水的水桶的面积。大致如下图,红色的代表盛水的面积:英语原文:11. Container With Most WaterGiven n non-negative integers a1, a2, ..., an, where ea...
2018-02-11 10:38:56 7983
原创 LeetCode算法题集-739. Daily Temperatures(每日气温)栈的应用
给定一个每日温度的数组,生成一个数组,要求:对于新数组的每个元素,是你需要等待更暖和的天数。如果接下去没有更暖的天了,那就用0替代。比如,给定数组 temperatures = [73, 74, 75, 71, 69, 72, 76, 73], 你需要输出 [1, 1, 4, 2, 1, 1, 0, 0].原数组第1天是73度,第2天74度是更暖和的一天,所以新数组第1元素就是1.注: 数组 te...
2018-02-10 10:04:15 11574
转载 Unity3d-MMO游戏优化经验分享沙龙总结
原文地址:MMO游戏优化经验分享沙龙总结昨天去上海参加了UWA公司的张鑫和张强进行了一场关于MMO游戏开发和性能优化的沙龙,活动链接为:UWA优化日上海站|传统MMO手游性能该如何突围?。虽然第二场场景分块加载部分的内容没有预期中对目前的项目那么有帮助,再加上最后因为赶火车没有听完Q&A的环节就离开了(然而还是没有赶上火车,此中悲苦就不提了。。。),有些疑问没有提出来讨论,略有遗憾,但对于...
2018-02-10 09:36:39 9084
转载 重建 是UGUI优化的关键 -- Unite2017嘉宾杨怀忠分享《UGUI深度优化》
原文地址:重建 是UGUI优化的关键 -- Unite2017嘉宾杨怀忠分享《UGUI深度优化》关于UniteUnite大会是由Unity举办的全球开发者大会,至今已有10年的历史。Unite现已成为游戏行业,VR/AR行业中最具有权威性和影响力的活动。 杨怀忠:前面几位同事有点拖堂了,所以我可能今天讲的速度会快一点。我今天跟大家分享的是UI方面的经验。我先介绍一下UI的基础知识,会稍微提一下UI...
2018-02-09 10:08:00 10876 2
原创 LeetCode算法题集-513. Find Bottom Left Tree Value(找出左下角的叶子节点)
给定一颗二叉树,找到最后一行的最左边的叶子节点。英语原文:513. Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row of the tree.例子 1:Input: 2 / \ 1 3Output:1例子 2: Input: ...
2018-02-09 09:56:42 8791
转载 Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用
原文地址:Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用0. 前言项目技术测试结束之后,各种美术效果提升的需求逐渐成为后续开发的重点,角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感,于是可以提供动态效果的布料系统就作为了技术预研的方向。笔者在之前的端游项目中有较多使用布料系统制作布料效果的经验,这次也尝试了在Unity引擎中进行布料效果制作的几种方法...
2018-02-08 09:52:34 7310
原创 LeetCode算法题集-238. Product of Array Except Self(除自己外的数组项的乘积)
给定一个数组nums,有n个整数(n>1),返回一个数组output,要求output[i]是除nums[i]外的所有nums元素的乘积。不能用除法而且时间复杂度要为O(n).比如,给定nums=[1,2,3,4],返回output=[24,12,8,6].还有:你能不能只用常量的空间复杂度?(注:output数组所用的空间不算)英语原文:Given an array of n intege...
2018-02-08 09:50:32 9016
转载 《守望先锋》架构设计与网络同步 -- GDC2017 精品分享实录
原文地址:《守望先锋》架构设计与网络同步 -- GDC2017 精品分享实录《守望先锋》架构设计与网络同步Overwatch Gameplay Architecture and NetcodeTimothy FordLead Gameplay EngineerBlizzard Entertainment翻译:kevinan 在GDC2017【Overwatch
2018-02-07 10:17:38 6635
原创 推荐几个Lua实现原理的专栏
由于看的年代久远所以忘了哪篇更好,但都是看过觉得不错才收藏下来的,所以以下排名不分先后,建议都看看的:Lua5.0的实现(这个只有十来页的简短介绍,可以初步认识Lua内部实现)探索Lua5.2内部实现(这个只是比上面的稍微长一点而已)lichuang的详细的Lua内部实现超级详细的Lua内部实现云风的Lua解析Lua|技术奇异点如果你有更好的也请推荐
2018-02-07 10:14:12 12558 1
原创 LeetCode算法题集-406. Queue Reconstruction by Height(通过高重建队列)
假设你有条随机队列,每个人被描述为一对数字(h,k),其中h是该人的高,k是在该人前面且高大于等于h的人的数量。要求按以上规则去重建这条队列。英语原文:Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k
2018-02-07 09:38:33 7527
原创 LeetCode算法题集-547. Friend Circles(朋友圈)
有个班级,里面有N个学生,他们之中有些是朋友有些不是,比如如果A是B的朋友,B是C的朋友,那么A就是C的间接朋友,我们定义所谓的朋友圈就是由直系和间接朋友所组成的群体。给定一个N*N的矩阵M,代表这个班级里所有学生的朋友关系,如果M[i][j] = 1,那么第i个和第j个学生就是互为直系朋友,不为1的话就不是朋友。而你的任务就是输出整个班级里总的朋友圈数量。英语原文:There
2018-02-06 10:49:14 15851
转载 Unity渲染教程(十九):图形处理器的实例化技术
原文地址(推荐其系列文章):Unity渲染教程(十九):图形处理器的实例化技术译者:崔嘉艺(milan21)审校:王磊(未来的未来)渲染一大堆的球体。添加对图形处理器实例化技术的支持。使用材质属性块。让实例化技术和LOD组一起工作。这是关于渲染基础的系列教程的第十九部分。在前面的部分里我们涉及了全局光照,体积探测器还有LOD组
2018-02-06 10:37:26 9068
转载 OpenGL管线(用经典管线代说着色器内部)
原文地址:OpenGL管线(用经典管线代说着色器内部)图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性。OpenGL作为图形硬件标准,是最通用的图形管线版本。本文用自顶向下的思路来简单总结OpenGL图形管线,即从最高层开始,然后逐步细化到管线图中的每个框,再进一步细化到OpenGL具体函数。注意,这里用经典管线代说着色器内部,也就是Open
2018-02-05 11:56:13 8786
PhotoShop脚本教程及生成所有图层坐标的案例
2017-12-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人