- 博客(37)
- 资源 (4)
- 收藏
- 关注
原创 Unity Shader 一句话带过(简单点学那么复杂干啥)
这篇文章主要的内容是渲染相关的知识,是最基本的常用的知识,以unity 的shader 脚本为例,结合图形渲染流程记录各个部分,个人接触shader已有几年的时间,从最初的无从下手,到现在随便添油加醋,深知初学者的不易下面是一个在网上找到基本的渲染流程图应用阶段:渲染数据准备,以及传入GPU渲染接口几何阶段:顶点着色器,曲面细分着色器,几何着色器、//可以控制的逻辑,常用的就是顶点函数,曲面细分函数和几何函数在个别平台不支持光栅化阶段:像素着色器其实就是对应的unity shader模板中的顶点函数和片元函
2025-03-26 12:22:57
221
原创 14. EntitiesSample_StateChange
我要设置鼠标范围的方块,通过spin组件标识在鼠标范围内的方块,鼠标外的方块没有spin组件,然后在作业逻辑中,需要执行两段代码,一个是查找有spin标识的实体,一个是查找没有spin标识的实体,这个是一个示例说明:对于不同的实体,拥有不同的标识,然后执行不同的job,上面代码完合成一个job,对于所有的实体,整体进行判断。SetStateSystem功能:设置颜色,旋转,添加旋转,移除旋转,激活旋转,不激活旋转,这些功能通过Mode枚举进行切换,调度不同的实体作业。
2024-06-23 23:51:19
153
原创 shaderlab 关键点记录
CanUseSpriteAtlas” = “[state]”使用此子着色器的精灵是否与 Legacy Sprite Packer 兼容。“RenderPipeline” = “[name]” //向 Unity 告知此子着色器是否与 URP 或 HDRP 兼容。“DisableBatching” = “[state]” Unity 是否对使用此子着色器的所有几何体阻止动态批处理。“PreviewType” = “[shape]” Unity 编辑器用于显示使用此子着色器的材质预览的形状。
2024-06-09 14:21:43
808
原创 2D图片的描边
UGUI已经开源了,特意扒了一下源码,outline组件中是通过ModifyMesh接口改变的顶点偏移,然后outline组件是继承自shadow组件,可以说是outline和shadow实现原理一样的,就是把图像进行偏移然后设置颜色,然后在渲染原图,也就是这个效果需要渲染两次,这面是顶点处理的回调函数。原理是找到边缘像素,然后设置颜色,边缘像素的特点是像素的八个方向的邻像素不全是透明或者不全是不透明,这样的像素就是边缘上的像素,下面是找到的shader源码,很简单。
2024-06-09 13:53:50
356
原创 EntitiesSample_12. FixedTimestep
这个系统标签标识这,系统在FixedStepSimulationSystemGroup这个组里面执行更新逻辑,FixedStepSimulationSystemGroup是一个固定真速度的仿真系统组。托管代码中使用World.DefaultGameObjectInjectionWorld这个接口和ecs进行通讯,查看源码可以知道,可以通过这个接口拿到ecs世界中的实体,组件 和 系统。2.给实体身上的组件设置数据时,可以使用这面的这个api设置数据。ok,就是个这,别的代码逻辑不需要在说了,之前都注释过。
2024-06-09 02:17:40
299
原创 EntitiesSample_11. FirstPersonController
因为相机是托管对象,需要像之前给托管对象赋值一样,函数不能打这个BurstCompile标签,主要的逻辑是获取实体,然后通过人物的位置和键鼠的数组,计算相机的位置,代码中采用了一种新的查询方式,使用ComponentLookup组件获取实体的位置组件。通过查看源码知道,Input类调用的是InputUnsafeUtility类,也就是键鼠的输入是一个非托管代码的封装,所以在ecs中可以直接调用,并且在函数中可以加上BurstCompile这个标签,下面是Input类的源码。3.控制System执行的顺序。
2024-06-09 01:54:07
382
原创 EntitiesSample_10. RandomSpawn
5.SpawnSystem的主要逻辑是:查找所有的NewSpawn组件的实体,删除这个组件,然后克隆新的预制体,然后调用job设置实体位置,这个调度是针对那些新生成的物体,新生成的物体都带有NewSpawn这个组件(也就是标签)2.如果需要在Job中对实体世界进行修改,那在job中需要ECB的ParallelWriter对象,通过源码可以看到出来ParallelWriter是ecb的一个内部构造体,里面包含了很多ecb的api。
2024-06-09 01:14:46
238
原创 EntitiesSample_9. CrossQuery
1.URPMaterialPropertyBaseColor:Unity.Rendering空间下的材质组件,该结构体拥有一个float4颜色的变量,赋值和其他的组件一样。在Chunk作业中,需要使用ArchetypeChunk chunk获取当前要操作的变量值,示例代码是这样的没什么好解释的,就是双循环判断距离。2.EntityQuery转数组。3.IJobChunk的使用。
2024-06-09 00:42:13
337
原创 EntitiesSample_8. GameObjectSync
1.UNITY_DISABLE_MANAGED_COMPONENTS:示例中使用这个宏,表示系统中是否需要托管组件的支持,在该示例中是需要访问托管组件的,所以这个值是false,在unity中,有的时候需要宏定义来区分代码,比如对应不同的平台编译不同的代码,通常在一下的位置添加脚本的宏定义。如果我们要在ISystem中控制托管世界中的对象,就需要找到上面创建的实体,然后获取引用设置组件的值,特别注意的是在所有的访问托管的函数中,都不可以加上爆发编译的标签。// 托管组件引用复制到非托管组件。
2024-06-08 23:57:30
473
原创 EntitiesSample_7. EnableableComponents
容易忽略的点是EntityQueryOptions.IgnoreComponentEnabledState,这个查询选项忽略组件的状态,都可以查询到,就像的Mono中,物体不激活,GameObject.Find是查询不到的。ValueRW的值和ValueRO的值有很大的关系也就是说,在修改组件的数据的时候,要看这个组件只读(RO)状态是不是true。1.早baker的时候使用这个api设置组件的状态 SetComponentEnabled,这个是baker类中的一个api。
2024-06-08 23:03:21
238
原创 Unity Standard shader 修改(增加本地坐标裁剪)
打开这个文件,发现里面引用的文件太多了,没办法全部复制到你的shader pass中,为了防止影响到原standard shader,我全部重新创建,最终的文件是这样的。找到这个文件打开,打开发现里面啥也没有一个判断,根据宏判断然后引用不同的文件里面的顶点片元函数,我需要的是在下面的文件里修改。注意点就是,找到对应的pass,不要复制错位置,要是不知道当前使用的pass,把pass注释掉,测试使用的pass。之后就能跑起来了,为了方便调试,修改shader的界面布局脚本,把需要裁剪的位置暴露给编辑器。
2024-06-08 13:56:19
530
原创 EntitiesSample_5. IJobChunk
/当区块中的一个或多个实体具有禁用的查询组件时,useEnableMask参数为true。//以上是百度的翻译,我的理解是 state.Dependency 类似于函数的回调,该系统依赖于事 务调度的完成。//创建一个事务,这个事务针对于LocalTransform,RotationSpeed组件的实体。//在执行中,需要判断一下,当前的实体的组件是不是禁用状态。//(这种传递和分配状态的模式。/// 通过成员变量的句柄确定实体。/// 函数的参数是固定的。
2024-06-02 22:14:52
364
原创 EntitiesSample_3. Aspects
SystemAPI.Query<RefRW<LocalTransform>, RefRO<RotationSpeed>>()的作用是一模一样的。//查询的条件就是包含这两个组件的RefRW<LocalTransform> ,RefRO<RotationSpeed>的实体。该示例重点是解释Aspects接口的使用,定义的VerticalMovementAspect结构体,只能是只读的结构体,成员也是只读的。//此方面的实例包装单个实体的LocalTransform和RotationSpeed组件。
2024-06-02 20:17:44
276
原创 EntitiesSample_2. IJobEntity
该示例主要说明的是: IJobEntity是实体处理事务的一个接口,在Execute函数中编写事务逻辑,通过参数对应操作的实体对象上的组件数据,然后在ISystem中的Update函数调度该事务,每帧执行,IJobEntity是处理事务的一个接口,之后还有其他的接口和该接口类型。// PostTransformMatrix是实体的一个变换矩阵数据,LocalTransform是实体本地变换,类似于Mono的Transform和Matrix.TRF(pos,rot,scale);//总累计运行的时间。
2024-06-02 19:41:28
343
原创 EntitiesSample_1. MainThread
/等待ExecuteMainThread存在了之后,才会执行OnUpdate,不想Mono一样,只能通过这种方式控制OnUpdate执行的顺序,官方示例HelloCube 注释理解:这是一个旋转逻辑的脚本,场景中存在一个挂载LocalTransform, RotationSpeed脚本的对象,控制该对象旋转。//查找每一个具有RefRW, RefRO组件的实体,然后遍历,跟新位置。
2024-06-02 16:48:12
321
原创 理解知识点和关键API
c:为了不影响主线程的性能,有时也会使用多线程处理一些事务,比如本地批量的文件处理,网络数据通讯等,但是使用线程的时候,我们无法访问Mono的对象,是因为线程本身是不安全,而Mono是安全的,所有在操作的时候会创建数据类,Mono去访问数据类,线程去访问数据类,隔断Mono与Thread线程之间的交互,如果遇到需要开启大量的线程,那程序的性能也会下降,因为多线程之间的通讯会产生大量的垃圾,然后触发多次GC,造成程序卡顿,假死等。上面代码的意思的创建一个长度500的数组,每个元素的类型是Entity。
2024-06-02 16:35:35
858
原创 unity 鼠标控制物体旋转
思路:获取物体当前的旋转(四元数)乘以 旋转的四元数(鼠标的方向以相机的坐标系生成旋转四元数,然后 转到物体坐标系下)
2024-05-23 22:38:19
729
1
原创 unity坐标转换
碰到过的坐标系:局部坐标系,世界坐标系,相机坐标系,ndc坐标系,屏幕坐标系,视口坐标系,极坐标系,重心坐标系。通过坐标系的描述类型分为:左手坐标系,右手坐标系,极坐标系,重心坐标系。大概就这么多,之后会继续补充,解释一下以上都是自己的理解!e:在ndc坐标系下,构建重心坐标系,计算三个点的重心坐标系的值。d:通过重心坐标系,三个的点的权重值,计算射线碰撞点的uv坐标值。c:获取当前坐标所在的三角面的三个点的局部坐标和uv坐标。//获取本地转世界矩阵乘以局部坐标。b:坐标转换到物体的局部坐标。
2024-05-19 13:27:12
1504
原创 UGUI无限滚动列表
正在忙别的东东,突然公司来了个需求,要加个什么无限滚动列表需求,再三确认,没错他就要这个(心想这玩意都烂大街,分分钟给你复制粘贴一个),然后就找啊找,找了一堆,没有找到正好对应需求的,然后找了个靠近需求的源码,改啊改,改啊改..... 我吐了!!!思路:1.无限滚动,Object肯定得重复利用 (位置循环)2.保证循序正确,如果当前界面显示3个image,那我就生成9个image,canvas左边三个,右边三个,一摸一样的(因为我就三个数据,如果要是做成游戏那种无限滚动用来显示不用数据的,需要加
2021-04-18 20:35:17
604
原创 Kinect Sensor Devices 和 LibusbK USB Devices驱动切换
在使用kinect for windows 开发时,我们安装完sdk ,我们发现使用的是Kinect Sensor Devices 这个东东,然后可以通过Kinect v2 Examples with MS-SDK 中间件,在unity调用kinect,或者官方的WPF的示例那样调用kinect1.安装完kinect for windows的sdk,设备管理器是这个样子的----------->2.然后我们右键驱动--->属性--->>查看驱动的状态 ...
2021-01-05 15:22:06
4054
1
原创 openframework 数字时钟
吹牛+注解: 开发了好几年的unity,偶然从游戏开发跳到现在的互动类的软件开发,虽然薪酬没有做游戏高,但是感觉对做这一行很感兴趣,一直到现在有两年,从kinect,雷达,leapmotion,等等各种传感器的接触,感觉做这种轻量型的互动软件很有意思!!! . , 在这个过程中经常会做一些非托管的调用和传值,刚开始做的时候真的是抓耳挠腮,渐渐的发现接触的一些帖子都是C++的,资料不是一般的全,之后就对C++产生的很深的兴趣,然后才想学习C++,看了几本C++的书,pdf,视频教程,发现没什么卵用
2020-12-31 14:29:24
343
原创 ShaderToy2Unity Shader 知识点记录
长途慢慢,唯剑作伴内容全部摘抄的,写在这是为了方便查阅类型对应 HLSL <-------> CGvec<n> float<n>mat<n> float<n>fract fracmix lerpmod ...
2019-12-12 11:48:35
369
原创 Unity与串口通讯
Unity与硬件交互的时候通常会用到串口,经常会遇到和硬件工程师对通讯协议,前段时间做这块的时候发现了好多的问题,踩了好多的坑,So,记录一下那些坑爹的东西1,unity使用的.Net的版本需要设置到4.0以上,2.0的.net是没有串口这个api的2,我们在查看SerialPort的文档的时候会发现,哇!这个和socket有点类似好多的函数都差不多,但是其实不是这样,串口发送数据的时候可...
2019-08-22 16:37:30
1384
原创 Visual Effect Graph 学习记录
程序之路,负重前行,端正态度,稳重,不骄不躁离上次记录过去好长时间,这段时间工作的很是压抑,一直找不到方向,往往自己干的都不是自己想要做的! 希望借这个帖子可以稳住自己的心态吧, 废话不多说了!!想了想写什么,,根据最近的工作涉及到的知识选择了VisualEffectGraph这块,说一说自己的理解1.VisualEffectGraphvxf是一个基于HDRP(高清渲染)的特效工具,...
2019-07-29 14:42:26
1810
转载 Kinect v2 Examples with SDK 例子解析资料
https://www.jianshu.com/p/c88bbc58a7bb 简书上一位高手翻译的,非常感谢,收藏了!!https://rfilkov.com/2015/01/25/kinect-v2-tips-tricks-examples/#t15aSDK 案例的原地址,多谢作者!!哎,好不容易才找到的两篇资料,实在不想吐槽国内的环境,心累!!!...
2019-03-19 17:04:55
860
原创 Computer Shader的理解记录
最近在做群聚项目,用到了Computer Shader,前前后后一个星期才弄明白computer shader是一个什么东西,(每次想到这,不是科班出身的我真的有这么菜么);1.Computer Shader是什么?度娘说这是Dx11的新技术,然后巴拉巴拉一大堆,看完之后好像度娘说的都很对,但是对我们没啥帮助0.0Unity里面有shader,着色器是啥,就一个GPU程序片段,那Com...
2019-02-02 13:36:05
4100
2
原创 Unity资源下载思路
最近一直在弄资源更新这块,前前后后用了一个星期,由于没有这块的经验和本身是一名小白,在做的过程中真的是很痛苦,反复的查找各种资料,看别的帖子总是理解的不是透彻,容易发生思路跑偏,不过最后终于弄出来了,实现的逻辑是参考的github上的 类似项目案例,这个帖子只是为了总结一下资源更新的大体思路1.资源打包:更新的资源是打成AssetBundle的(好像没毛病),也就是更新沙盒目录的Asset...
2018-07-21 18:00:19
624
翻译 运行前合并网格
[MenuItem("EditorToolDemo/CombineMesh")] public static void CombineMesh() { //找到需要处理的模型对象,层次面板中的模型哦 GameObject root = GameObject.Find("Root"); if (root) { //得到模型所有的网格...
2018-06-16 02:38:49
302
原创 Tcp多人聊天C#,Unity实现
C#模拟服务器,Unity模拟客户端效果图:思路:客户端连接服务器发送上线消息,服务器记录所有user,然后广播给已经在线的玩家,同时发送所有玩家的名字给上线的用户,实现同步好友列表,这里用的是PopList制作的用户列表,更新显示上线消息的,这用的是TextList(NGUI制作的UI),在客户端异步发送环节,并没有在messagecenter中写派发发送消息的方法,因为懒呗,只写了
2018-01-12 17:02:32
2040
3
libusbk(zadig2.5软件)
2021-01-04
openframework 数字时钟
2020-12-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人