Unity
文章平均质量分 72
xdedzl
心有猛虎,细嗅蔷薇
展开
-
unity控制台 -- 动态编译c#
在游戏开发过程中,调试是一件很让人头痛的事情,使用unity和c#开发的时候,总是会打开游戏----->发现有问题----->关游戏----->加log----->加测试代码----->开游戏----->测试,看log。或者打断点,在IDE里调试代码。又或者是有一个GM系统可以执行各种已经写好的指令,总之,很麻烦就是了,且没有时效性。 使用脚本语言开发的时候,可以直接在控制台中输入一行代码,就可以查看数据,或者执行一个命令,于是就想,能不能用c#实现类似的功能呢.原创 2021-07-28 22:21:37 · 1225 阅读 · 0 评论 -
unity在后处理中实现投影效果
其实这个效果是偶然中发现的,可能也没有什么可以实际运用的地方,只是个人觉得比较好玩,记录一下。1.先看效果 除了投影以外,也可以做成一个范围外不可见的效果,但和投影一样,都有其他更方便的解决方案,所以也就是图个乐了。 大体思路就是在shader中还原世界空间,再利用sdf函数将空间分为多个部分,最后对不同部分进行不同的处理就可以得到下面的效果了。下图是使用的是球的sdf,球型范围内的区域也就是投影区域了。sdf可以参考3D SDF2.在shader中还原世界空间 要还原世界空间需要.原创 2021-03-19 22:44:24 · 1509 阅读 · 0 评论 -
unity在URP中实现自定义Volume
在unity默认bulit-in管线中,后处理效果一般可以在在相机上挂一个脚本加上OnRenderImage函数,并使用Graphics.Blit用某个材质对最后相机展现的画面进行处理。 在URP中OnRenderImage不生效了,并且有了一个专门做后处理的Volume。但由于相关代码都写在了一个叫PostProcessPass的脚本中,除非修改源码,否则无法仅通过扩展一个VolumeComponent来实现一个自定义后处理。好在URP提供了一个RendererFeature的功能,我们可以通过.原创 2021-03-13 18:20:52 · 5365 阅读 · 2 评论 -
Unity Surface Shaders 表面着色器备忘
输出结构1.Standardstruct SurfaceOutput{ fixed3 Albedo; // diffuse color fixed3 Normal; // tangent space normal, if written fixed3 Emission; half Specular; // specular power in 0..1 r...原创 2020-09-20 09:42:04 · 157 阅读 · 0 评论 -
【c#消息机制】自动注册和反注册
随着项目代码量的增长,原创 2020-09-19 19:54:20 · 1322 阅读 · 1 评论 -
Unity 游戏红点系统(Reddot System)
游戏中按钮上经常会有一些用于提示玩家点击的小红点,显示方式可能不同,统称为红点系统。这里结合unity的GraphView做了一个通用的红点系统。 源码在这里红点系统,里面实现了一个简单demo一.红点树编辑器 进入菜单 XFramework—>UI—>ReddotEditor 编辑红点树二.ReddotManager1.红点显示规则 需要显示红点的UI会注册一个节点的Key,可以是叶子结点也可以是非叶子结点。 在合适的时候会标记结点的状态(只能编辑叶子结点,非.原创 2020-08-02 15:58:32 · 5255 阅读 · 2 评论 -
由UnityEngine.Object该怎么判空引发的一些思考
先给出一组测试数据,分别用三种比较方式进行100万次比较。GameObjectComponent(组件)obj == null43obj is null4System.Object.ReferenceEquals(obj, obj2)4原创 2020-07-25 12:46:43 · 2666 阅读 · 2 评论 -
unity剧情系统开发
从去年三月份到现在,《匣》断断续续的也经历一年多的开发原创 2020-06-21 23:09:04 · 3882 阅读 · 0 评论 -
unity 模拟三体运动
以一个三体迷和码农的身份确定一下三体问题的无解ThreeBody DemoDemo1.轨迹预测 首先在运行之前得预测一下运行轨迹,修改参数得到不同的轨迹2.三体问题的特殊解 通过维基百科链接到一篇相关论文A remarkable periodic solution of the three-body problem in the case of equal masses。里面给出了在特殊解情况下的初始值。图中的速度以及位置使用复数形式表示,映射到unity中,实数部分为x轴,虚数部分为z轴.原创 2020-05-12 22:51:10 · 3273 阅读 · 5 评论 -
Unity JobSystem和Mathematics数学库性能测试
先说结果,在不使用Job做优化的前提下,Mathematics数学库着实惊到我了,矩阵乘法快了近十倍1.测试结果 下图的测试数据是在2019.3.6环境下,模拟100万次4x4矩阵运算得出的,后面两个使用了job进行了优化,可以看到,新数学库的float4x4在不使用jobsystem的情况下就可以达到和Matrix4x4使用jobsystem计算时相当的速度。Mathematics使用...原创 2020-04-04 12:15:06 · 4342 阅读 · 0 评论 -
Unity GPU Instance 大量物体的合批处理
官方文档 GPU Instance结果展示1.演示10000条鲨鱼全部在镜头下时150帧 2.不同数量的数据对比数量GUP InstanceFPSBatches1000on/off800/4607/100310000on/off150/6033/1000350000on/off25/10108/50003Shader编写...原创 2020-03-29 20:38:55 · 2839 阅读 · 0 评论 -
Unity 更新dll后的引用丢失问题
asD原创 2019-10-22 22:45:45 · 1417 阅读 · 0 评论 -
【XFramework】—— 模块和入口
一、IGameModule 框架不建议使用继承Singleton的单例,当你需要新增一个模块或者叫管理器的时候,建议继承IGameModule并在Game脚本中添加静态引用。/// <summary>/// 模块接口/// </summary>public interface IGameModule{ /// <summary> /...原创 2019-09-01 18:05:01 · 359 阅读 · 0 评论 -
【XFramework】—— 介绍
这是一个轻量级的Unity开发框架,包含了Entity,FSM,Graphics,Pool,Messenger,Procedure,Resource,Task,Terrain等模块,另外还提供了一系列开发工具,本篇是对XFramework的一个整体介绍,后续会按照模块逐一添加文档。放上自己的博客链接,以后会在这里持续更新xdedzl的博客1. 启动流程在场景新建一个空物体命名为GameMa...原创 2019-08-18 13:38:14 · 2786 阅读 · 0 评论 -
Unity Addressable Assets ——可寻址资源系统
前段时间Unity官方发布消息称,可寻址资源系统已经脱离预览阶段,并将在Unity2019.3作为已验证资源包发布,同时在Unity 2018.4 LTS版本中得到支持。花了点事件研究了一下这个系统。官方文档入门介绍还是不错的。本文翻译自官方文档并加入一点自己的理解。原文链接标记资源为可寻址的 这里有两种方式将资源标记成可寻址的,在安装好可寻址资源包后,你可以在属性面板进行标记或者将其拖...翻译 2019-07-30 11:08:22 · 10513 阅读 · 2 评论 -
UGUI 源码研究及扩展 :利用Graphic做UI折线图
近日项目中需要用到一些数据分析的功能,查阅资料后发现了UGUI有一个用来显示图像抽象类Graphic,另外一个用来显示可遮罩图形的MaskableGraphic就是派生自Graphic, Image,Text等组件都是派生自MaskableGraphic。利用这两个类我们可以做一些自定义组件。本文利用Graphic来做一个简易的折线图。下图是利用这个组件分析地形高度的图片1.Graph...原创 2019-07-24 09:38:10 · 965 阅读 · 10 评论 -
unity Color的缺省参数
开发过程中可能会经常碰到Vector3和Color等类型无法使用缺省参数的问题,像Vector3这种,缺省参数的值通常是Vector3.zero,所以可以直接用default(Vector3),但是对于Color来说,default(Color)的值为new Color(0,0,0,0),而我们通常需要值的不会是这个。所以,如果需要的话,我们可以以int的形式代替Color传递颜色值。 u...原创 2019-06-21 22:56:35 · 3326 阅读 · 1 评论 -
unity 目录树
最近项目上需要对一些编组信息进行树状展示,为了通用,将目录树写成一个组件,完整的代码包括测试代码已经上传到了github上目录树代码,代码需要配合RectTransform的锚点使用,所以写了一个编辑器扩展,可以像创建其他UI组件一样创建一个目录树编辑器代码1.树的节点 在大多数的时候外界并不需要对TreeNode进行直接控制,但是在初始化树的时候,要传入一个已经设置好父子关系的根节点,...原创 2019-05-23 20:44:47 · 1146 阅读 · 5 评论 -
unity直升机飞行模拟
本篇博客对直升机的飞行状态和攻击进行了简单的模拟,但是如果对仿真度没有太高的要求,这已经完全够用了。对于旋转方式有困惑的可以参考https://blog.csdn.net/xdedzl/article/details/814888941.简易状态机基类using UnityEngine;using System.Collections;public class FSM : Mo...原创 2018-09-11 20:48:04 · 3615 阅读 · 3 评论 -
Unity 曲线插值(Hermite插值和Catmull_Rom插值)
1.三次Hermite样条 埃尔米特插值时颇为常用的插值算法,其根本也是三次贝塞尔曲线,有关贝塞尔曲线的知识可以参考这篇文章,有动图,看起来非常直观https://www.cnblogs.com/hnfxs/p/3148483.html下面是三次贝塞尔曲线模拟和公式其中,P0和P3是一条曲线段的起点和终点,P1和P2是这个曲线段的两个外控制点。 ...原创 2018-12-10 22:45:46 · 5941 阅读 · 5 评论 -
Unity单例模式(普通单例和继承MonoBehaviour的单例)
单例类是开发过程中必不可少的东西。介绍完两个常用单例类型后会介绍一个简单却很实用的MonoEvent。 关于单例的写法网上有很多,这篇文章主要想介绍的是MonoEvent以及为之后的计时器做准备。1.普通单例 最普通的写法,加了个线程锁,通过属性访问,不光是Unity,所有的c#程序都能用。using UnityEngine;/// <summary>//...原创 2018-12-16 19:36:22 · 11039 阅读 · 0 评论 -
Unity 计时器
计时器是游戏开发的一个非常常用的功能,简单计时器的实现方式有很多中,可以每帧给一个float变量加Time.deltaTime,到一定时间的时候调用某个函数。也可以使用unity的协程和InvokeRepeating。但是简单的使用这些组合调用起来不是很方便,并且无法实现暂停,继续等功能,也无法在计时器运行到某个时间点的时候移除或者添加新的事件。1.计时器 这个计...原创 2018-12-17 20:25:25 · 4044 阅读 · 0 评论 -
高斯模糊
1.简介高斯模糊是图像处理中的常用算法,下图就是对一块区域以外的区域进行模糊处理以凸显这块区域。高斯模糊很多可能不大了解,但对于另外一个知识点,正态分布 ,相信大多数人都学过。维基百科中文页对高斯模糊有一这样的解释“从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作“高斯分布”,所以这项技术就叫作高斯模糊”。由于之后要介绍的Unity运行时动态编辑...原创 2018-12-23 21:03:20 · 1529 阅读 · 0 评论 -
双线性插值 - c#实现
1.双线性插值 线性插值是游戏Unity开发过程中非常常用的算法,在Unity中直接使用 lerp函数就可以实现。但对于双线性插值,Unity并没有给出可以直接使用了API,下面会给出一个利用C#对二维数组进行双线性插值的算法。下图是双线性插值的示意图(图片取自维基百科英文页),对于一个正方形的区域,已知四个顶点的值,我们希望通过这四个值获取正方形区域某一位置的值,就要用到双线性插值。我们...原创 2018-12-31 19:52:49 · 4627 阅读 · 5 评论 -
向量叉乘求三维空间中两直线(或线段)的交点
1.2D空间的直线相交在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点。并且由于利用叉乘最后可以的到一个比例值,这个值的大小还可以判断四个点所得到的两个线段是延长线相交还是线段相交。2.向量叉乘三维空间中,两个向量叉乘得到的是一个垂直于两向量组成的平面的向量,方...原创 2019-01-11 20:58:44 · 30279 阅读 · 15 评论 -
Unity Input输入事件策略
游戏的运行过程中会伴随各种各样的输入事件,很多时候我们需要在不同的状态下对相同的输入做不同的处理,本文提供一种处理输入事件的方式以供参考。一共涉及到了四个类,1.用于管理输入事件及状态的 MouseEvent(其实不应该叫MouseEvent,它不仅仅是处理鼠标事件)2.所有输入事件状态的基类MouseState3.MonoEvent和Singlenton在本文只扮演工具的角色,我...原创 2019-01-25 20:20:33 · 552 阅读 · 0 评论 -
Unity简易对象池
一、简述 对象池是游戏开发过程中常用的一种优化对象创建和销毁的方式,外界只关心什么时候创建对象,对象的获取方式完全交给对象池来做。在多线程开发中使用到的线程池实际上就是用到了对象池的思想。 对象的创建和销毁是比较耗费性能的,对于一些经常需要创建的物体如果进行频繁的实例化的话是不合适的,所以可以创建一个对象池来保存一定数量的对象,当需要用到这个对象的时候不是实例化而是直接...原创 2019-02-05 19:46:29 · 435 阅读 · 0 评论 -
Unity RuntimeHandle
在Unity的编辑器模式下,因为Handle的存在,编辑物体的位置方向以及大小非常方便,近期需要在运行时实现对物体的编辑,研究了一下,本文用unity的GL和Graphics两个类实现一个简易的Handle,最后效果图如下,左图为Unity编辑器下的效果,右图为运行时实现的效果。旋转和缩放都实现了,就不都截图了。不想看我废话的可以直接到我的Github上下载源码https://github.com...原创 2019-02-25 22:00:23 · 1960 阅读 · 0 评论 -
unity 载具多视角相机的实现
游戏开发中经常会有视角切换的需求,尤其是载具的行驶过程中,这篇博客实现了一个拥有多个视角和跟随目标方式的相机,不局限于使用在载具上,代码参考了汽车模拟插件Edy's Vehicle Physics的相机,附上官网地址https://www.edy.es/dev/vehicle-physics/一.不同跟随方式的相机类1.基类基类包含了不同跟随方式的相机需要实现的方法,其实...原创 2019-02-19 22:02:17 · 1385 阅读 · 1 评论 -
CSV文件读取
csv文件很适合于程序和策划之间的配合,csv文件可以直接由Excel导出,策划在Excel中更改后导出csv,程序可以在不做任何修改的情况下做到更改游戏内容。1.注意点这个简单的文件读取类需要传入一个string初始化,可以直接用File.ReadAllText(文件路径),获取,如果是在Unity中并且放在Resources文件夹下的话,打包后这个文件夹就没了,直接传入文件路径无法获取...原创 2019-03-11 19:31:24 · 1922 阅读 · 0 评论 -
替代transform.find的UI组件的找寻方式
一、transform.Find刚开始做Unity的时候,只会用transform.Find来找寻子物体,但这样做除了效率相对较低以外,还有一个对开发不太友好的事情,就是如果一个物体内子物体的层级发生了变化,就必须要修改代码路径,很麻烦。二、解决方案最后实现使用索引器,不需要路径,只要传入控件名,以Button为例。有两种方式注册事件(this[Name] as GUButton).Add...原创 2019-04-19 21:17:12 · 879 阅读 · 2 评论 -
Unity中的旋转
近期工作中不少功能用到了旋转,抽空整理了一下Unity中的旋转方式,首先要搞清楚的一点就是Inspector面板中的Rotation,在面板上它显示的是一个Vector3类型的参数,而我在代码中transform.rotation点出来的会是一个四元数,也就是面板上和代码中rotation不是同一个东西,其时只需要把Inspector面板的模式改成Debug就会发现,transform....原创 2018-08-07 23:10:47 · 5319 阅读 · 0 评论