Unity开发
文章平均质量分 68
漫漫之间n
hap
展开
-
Unity URP渲染管线下体积光的实现
随着手机硬件的提高、主流手游厂商也逐渐以3D游戏为主,游戏也开始更注重3D场景渲染氛围,对渲染技术的要求也越来越高,PBR渲染、环境光遮蔽、阴影优化、场景反射、体积光等华丽的效果也逐渐成为优质画质手游的标配,特别是去年《原神》的大火、用上了上了各种对于手游来说“高大上”的渲染技术,也让很多小游戏公司开始意识到要积累3D渲染技术。作为场景氛围渲染上的利器效果之一的体积光。在《原神》上当然有使用游戏《Inside》甚至从头到尾都有体积光的运用、整个游戏中营造出诡异的氛围。因此,参考了一些资料,在Uni原创 2021-09-12 10:52:30 · 3119 阅读 · 2 评论 -
xlua使用VS2019编译第三方库lua-protobuf
xlua github地址lua-protobuf github地址xlua官网编译第三方库教程xlua作者编译好第三方库的项目示例官网教程是讲了主要部分,没有环境搭建等步骤。之前用VS2017编译过xlua第三方库lua-protobuf,之后再编译一次,步骤有些忘了还是做个笔记。步骤一:1、下载xlua项目和lua-protobuf项目,将lua-protobuf放到xlua项目的xlua/build文件夹下:2、打开xlua/build/CMakeLists.txt,如图加入#b原创 2021-02-25 17:50:05 · 1740 阅读 · 0 评论 -
基于物理的体积光实现
序言在上一个项目中,美术的同学有在场景中实现体积光的要求,当时因为时间紧迫关系,第一反应就是在Assetstore找插件,找了一阵没找到适合的插件,后来使用了网格简单实现。再后来然后注意到github上Unity有一个VolumetricLighting的实现,好开心啊果断clone下来,打开Unity一看,效果大体还可以,其实却有好多细节没有实现。阅读了一阵 VolumetricLighting的 源码,发现它只支持延迟渲染,不能用于移动平台,除了AreaLight其它类型Light没有实现阴影体积原创 2020-11-25 22:57:42 · 1396 阅读 · 1 评论 -
Unity Bloom更可信的实现
Unity Bloom的效果实现网上也有蛮多例子,但它们多数都是传承与高斯模糊,用一个限定的阀值,提取出屏幕上超过阀值亮度的像素,用卷积核运算对周围像素按照一定的比例差值颜色值叠加,这种实现方式性能可以。但在配合HDR实现发光效果其实并不理想,因为太粗鲁的将高亮度像素和它们的邻居卷起来叠加,会误伤了不少应该在较暗区域的像素,较暗区域被高亮度区域过度污染了。表现为如场景上几个招牌大字霓虹灯等,灯的轮廓和周围较暗的区域混在一起,过于浑浊,丢失了霓虹灯管本应清晰的轮廓。包括《xxshader》书籍上的bloom原创 2020-08-29 17:32:49 · 887 阅读 · 0 评论 -
Unity景深Depth of field优化,得到清晰边界
Unity景深模拟的实现大都是,1、先获取屏幕后期纹理,然后复制出来进行高斯等方式模糊。2、 再根据场景物体的深度纹理, 在着色器中对景深需要清晰的目标为切割获取0-1的深度插值。3、将屏幕后期模糊过的纹理和原本后期纹理根据插值进行混合模拟出景深效果。当然还有其他更真实的基于物理的形式实现,但这种实现更真实,但也更吃性能。然而模拟景深的效果,网上也有不少例子。但他们的实现,因为是2章纹理混合差值,混合像素, 多数导致清晰物体轮廓会污染背景模糊的颜色,导致聚焦的清晰物体和身后的背景模糊色有一层混合色原创 2020-08-29 17:33:16 · 5005 阅读 · 3 评论 -
Unity Gerstner Waves水面波浪
根据《GPU Gems》的Gerstner 公式,实现水波的效果。参考文档地址 https://developer.nvidia.com/gpugems/gpugems/part-i-natural-effects/chapter-1-effective-water-simulation-physical-modelsGersterWaves公式定点偏移:法线计算:波长和速度的关...原创 2020-02-05 14:21:44 · 2166 阅读 · 1 评论 -
Unity HilightingSystem屏幕后实现物体外发光描边效果
Unity实现物体外发光描边效果方式有好几种,如重叠放大模型描边Pass、卷积核描边、屏幕后处理等。HIightingSytem使用了屏幕后期效果实现,效果如下:整理出核心代码如下,主要分为4个步骤。1 ,根据场景上所有需要描边的物体轮廓,将它们画到一张RenderTexture上,其中黑色部分A通道值为0。实现着色器为HighlightingOpaque.Shader。2,将Rend...原创 2020-01-29 23:18:35 · 2711 阅读 · 0 评论 -
lua puremvc UI框架(unity)
Unity中使用lua来做UI部分开发时,如果项目规模较大的话,整一套合适的UI框架,提高共同开发效率和保证代码质量,统一规范开发人员的代码还是有必要的。避免各自关门按自己的风格行事,导致项目代码风格各异,模块功能代码冗余杂乱,诡异bug增加。puremvc就是mvc框架中的一种,是前辈大佬们多年经验的结果,也发展了很多个编程语言版本,但一直没有lua版,所以使用lua按照puremvc c#版...原创 2019-12-23 23:08:05 · 2085 阅读 · 0 评论 -
Unity UGUI ScrollView性能优化,滑动列表的item/cell重复利用
unity中利用ugui制作scrollview有多个格子滑动时,最直接的做法是创建对应数量个格子节点,利用GameObject.Instanate创建节点本身就是性能开销很大的,如果有500个,1000个或者更多数据要显示,要创建这么多个节点,那么这卡顿一定很明显,这个数量级用这个做法实为下策。如果接触过安卓/iOS原生app开发的应该记得它们的Scrollview / Tableview是有...原创 2019-11-10 09:33:12 · 5543 阅读 · 3 评论 -
用熵值法求对战游戏结束后玩家之间的评分
熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。目前已经在工程技术、社会经济等领域得到了非常广泛的应用。熵权法的基本思路是根据指标变异性的大小来确定客观权重。参考数据:https://login.sina.com.cn/sso/login.php?useticket=0&returntype=META&service=blo...原创 2019-10-23 09:57:56 · 548 阅读 · 0 评论 -
导航动态避让算法RVO的优化ORCA(Optimal Reciprocal Collision Avoidance)
来源于文档的主要内容:本文要解决的问题:n(n>0)n(n>0)n(n>0)个个体导航向目标点移动过程中,对于其它个体或者障碍物进行动态避让,并寻找最佳路径向目标点移动。我们在本文中讨论的问题正式定义如下:在一个共享的空间环境下有n(n>0)n(n>0)n(n>0)个机器人,为了简单起见,我们假设机器人都是圆形,空间环境则...原创 2019-04-19 12:44:08 · 26921 阅读 · 14 评论 -
二分法查找
二分法查找用于大小有序数组,对于包含n个元素的列表,找到目标值最多只需要Log2nLog{_{2}}^{n}Log2n步,而简单查找需要n步。举例,从数组中找出45在数组的索引,数组中没有45则返回-1:using UnityEngine;public class BinarySearch : MonoBehaviour{ [ContextMenu("Do")] priv...原创 2019-05-01 19:25:18 · 169 阅读 · 0 评论 -
Unity shader的StencilTest、ZTest与半透明渲染
着色器完成顶点编程和片元编程操作之后得到的颜色值,最后像素能不能够渲染出来还要经过最后一步逐片元操作,其中包括模板测试,深度测试等,只有通过了测试的像素点颜色才有资格进入颜色缓冲进行覆盖写入或者与已有颜色进行混合,从而被GPU渲染出来进入我们的视野。其实Stencil Buffer和Z Buffer就是一类东西,其目的都是为这个像素点的颜色缓冲区值服务,不过是其记录的数值作用目的不同。模板缓...原创 2019-03-24 11:45:02 · 1828 阅读 · 0 评论 -
unity ugui自定义Text字体描边优化性能
**在unity的ugui的用于Text描边的组件outline中,其中的实现是将字体copy出几份往外放置形成背景黑边,随之带来的是性能的高消耗。如果是一两个Text描边还好,如果同屏有大量Text在使用其在描边时,其性能消耗提高十分明显,甚至直接影响到了游戏FPS。因此,同屏Text描边多时有必要优化一下,因此写一个可以实现Text描边的shader。一样的道理,shader中有2个Pas...原创 2019-03-22 10:39:08 · 18686 阅读 · 11 评论 -
Unity 的CommandBuffer基础
CommandBuffer,上 官方文档。依照官方解释:CommandBuffer携带一系列的渲染命令,依赖相机,用来拓展渲染管线的渲染效果。而且可以指定在相机渲染的某个点执行本身的拓展渲染。如下图,我们可以根据参数指定CommandBuffer在绿色的点上添加执行命令。Command buffers也可以结合屏幕后期效果使用。那CommandBuffer是个什么鬼,先来实现一个最简...原创 2019-03-25 15:09:35 · 19676 阅读 · 3 评论 -
Unity使用波函数坍缩 (Wave Collapse Function)算法生成随机地图
List item在游戏领域和人工智能领域有一个随机生成地图用的比较多的算法叫做波函数坍缩 (Wave Collapse Function)算法,这个算法可以根据自己定制的规则生成随机地图。根据波函数坍缩算法的源码 Wave Collapse Function C#版,我将源码修改适配到了Unity上使用。这种随机生成地图或者说图片纹理,在做Roguelike游戏地图或者生成地板纹理横版...原创 2019-03-20 19:48:24 · 13278 阅读 · 10 评论 -
Unity中NullReferenceException: (null) UnityEditor.SerializedObject..ctor (UnityEngine.Object[] 问题
unity4..6.5中删除一些prefab,然后重新新建了一个同名字的prefab之后,又删了一些文件夹等操作后,点击运行发现unity会报错,但运行一切正常但有报错,错如下: 双击报错的log定位错误,跑到了这里: insector引用的资源空了!啥情况?搞了大半天,一运行还是冒这个错,后来…办法: 重启unity,搞定!完好如初。这个估计是unity的小小问题,没啥好说的 - -。原创 2015-07-08 21:25:29 · 16026 阅读 · 6 评论 -
Unity基于TCP/IP的小聊天室实现
要发送字节数组封装类 现在的功能只是发送字符串,也可以改造成传输更多数据类型的类using System;using System.Net.Sockets;//为了避免粘包半包情况//这个类用来封装字节流,主要分为header+body,header:记录信息包的长度,body:要发送的信息//TCP每次先读取流中的4个字节,了解到这条信息的长度后,读取同长度的字节流public clas原创 2015-07-25 14:47:23 · 5185 阅读 · 1 评论 -
Unity Assetbundle的加载方式的效率和内存占用
一,三加载的Assetbundle文件对象22.2MB,unity自带压缩的ab文件 二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩url指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。一,WWW.LoadFromCacheOrDownload(string url): 异步方法 从指定路径开始loa原创 2015-07-14 16:08:16 · 12836 阅读 · 0 评论 -
为iOS应用/游戏内建购买项目(IAP)
一,前提: 1,注册有iOS开发者账号Apple ID(是注册过开发者账号的Apple ID,非普通Apple ID)。 2,用上述账号Apple ID登录苹果开发者官网为在开发的iOS应用注册一个Bundle identifier(将正在开发的应用注册到iTunes Connect管理时用到)。 注册的字符串和对应应用XCode中的Bundle Identifier字符串原创 2015-07-15 15:09:07 · 1163 阅读 · 0 评论 -
iOS游戏IAP数据服务器验证
我上一篇博客《为iOS应用/游戏内建购买项目(IAP)》对于CP有自己游戏服务器的从安全性来讲并不适用,有自己服务器则需要进一步对数据进行校验。如果CP具有自己的游戏服务器, Apple建议在服务器端存储产品ID,而不要将其存储在客户端本地。 这样就可以在不升级程序的前提下添加新的产品,这只需要我们向客户端发送哪个产品的ID。如果要申请商品ID,可参考《为iOS应用/游戏内建购买项目(IAP)》原创 2015-08-10 12:23:58 · 2954 阅读 · 3 评论 -
<Stealth>游戏中的动画与寻路控制
最近玩了下Unity AssetStore上《Stealth》游戏,感觉很有意思,所以花了好些时间来读它的代码,感觉最让我值得学习的是其中机器人守卫的动画与寻路控制,所以记录一下:其中大体思路是: 敌人按给定的四个点巡逻,如果玩家进入视线范围内就转身停下,然后追赶或者射击玩家。敌人守卫使用了带位移的动画,而其寻路导航却是用了NavMeshAgent。 所以做法是: 位移: 不直接使用动画所带原创 2015-08-13 12:03:44 · 2039 阅读 · 1 评论 -
Unity自定义窗体插件工具
模拟一个打包游戏工具吧。 但只有UI,并不具实际的打包游戏功能,自己可以扩展的,把具体功能加进去。 这个类一定要放在Asset下的任何一个Editor文件夹才生效。using UnityEngine;using System.Collections;using UnityEditor;using System.Collections.Generic;//这个类只实例化一次后,将序列化原创 2015-07-31 17:16:45 · 1420 阅读 · 0 评论 -
DOTween教程
DOTween起始上手起来很快,当然前提也是用心看一下哈。 可以在Unity AssetStore下载得到。 使用方法: 准备:在导入DOTween后,你需要设置dotween额外的库设置基你的Unity版本。Tools—–>DOTween Utility Panel——>点击SetupDoTween即可。DOTween只是为了对应Unity的版本不需关心更多。一,最先简原创 2015-08-06 13:34:39 · 24504 阅读 · 0 评论 -
Unity关于2D角色序列帧8个方向动作资源优化
前提:这里使用的是Unity内置的Animator制作2D序列帧动画,不介绍制作过程。 在用Unity制作2D游戏时,如果动画是用图片序列帧来做,那么有的游戏一个角色动作通常会有八个方向,所以一套动作的图片资源是非常多的。 有些角色动作如向左走和向右走的图片是左右镜像对称的,因此可以只用向左走反转Y轴坐标180度来表示向右走的动作。 如此算来,可以省去8个方向中的3个有镜像对称原创 2016-12-18 22:11:30 · 11865 阅读 · 0 评论 -
Unity lua行为树实现(可实现rpg挂机自动战斗)
在使用Unity开发手游项目中,用Lua作为热更脚本时,也许有的RPG项目会有连战斗也要求热更,对于角色挂机自动战斗,Unity有行为树插件Behavior Designer可以实现,但不能实现战斗逻辑热更,所以我用Lua对着Behavior Designer重新实现了部分基础功能,这样,使用Lua版的行为树实现挂机自动战斗,就可以热更啦!前提说明: 1,本文假设读者对树插件Behavior...原创 2020-01-06 10:15:13 · 7372 阅读 · 2 评论 -
Unity打包AssetBundle自动分析资源依赖关系(包括UGUI图集打包)
前提说明:本文只是针对Unity5.x及以上版本打包AssetBundle。Unity5.x虽然说打包时会处理好资源的依赖关系,但前提依然要我们设置好目标资源的AssetBundleName,如果设置资源AssetBundleName时忽略了资源之间的依赖关系,那么打包AssetBundle时,依然会产生重复打包的资源,所以我写了一套脚本来自动分析资源的依赖关系,并根据资源的依赖关系来设置A...原创 2018-02-25 21:58:19 · 18096 阅读 · 2 评论 -
unity调用Android通过编译 java jar包出现问题解决和简单支付流程
1,unity使用导出的jar编译通过了,运行就崩,可能是AndroidManifest.xml中配置了package,然后指定的默认打开Activity包使用了简写 ”.”,所以在unity中找不到这个Activity,在U3d应该把Activity的package写全保险。 2,运行时,报这个错强行关闭:未能够自动生成supoort-v4.jar,拖一个到libs下,或者P原创 2015-07-08 20:53:29 · 1795 阅读 · 0 评论