首页 > 其他分享 >【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路

【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路

时间:2022-12-13 14:34:02浏览次数:72  
标签:涡流 特效 MeshEditor 向心力 vertex Unity factor 顶点


更新日期:2020年4月22日。
Github源码:​​​[点我获取源码]​

索引

  • ​​前言​​
  • ​​扩展​​
  • ​​Vortex​​
  • ​​使用​​
  • ​​参数​​
  • ​​原理及算法​​
  • ​​图像展示​​

前言

MeshEditor系列重整归来,算法更优,扩展性更强,开销更低,且之后将会在源码托管平台持续更新。

扩展

编写自己的MeshEffects组件:

1.继承至基类MeshEffectsBase

2.重写OnBeginEffect方法,当特效播放开始。

3.重写OnUpdateEffect方法,更新特效逻辑。

4.重写OnEndEffect方法,当特效停止。

通用网格数据对象MeshData,存储了经过优化后的网格数据,理论上就算要增删网格的顶点也不用直接操作其顶点数组Vertices,而是调用AddTriangleRemoveTriangle增删三角面,该操作会立即生效到网格。

Vortex

设置一个涡流中心,使得网格在涡流中心的引力和向心力的拉扯下逐渐扭曲变形直到被吸入涡流中心(基于上一版涡流特效优化升级而来)。

使用

Hierarchy界面选中一个带网格渲染组件(MeshRenderer或SkinnedMeshRenderer)的物体,在物体名字上单击右键,选择创建MeshEditor > Effects > Vortex

调用Play播放特效,Pause暂停特效,UnPause恢复特效,Stop停止特效。

参数

【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路_Effects


Vortex参数面板:

1.Play On Start:是否在Start时自动播放特效。

2.Gravitation:涡流中心引力大小。

3.Centripetal Force:涡流中心向心力大小。

4.Centripetal Direction:向心力方向。

5.Center:涡流中心世界坐标。

6.Radius:涡流中心半径。

原理及算法

MeshData是优化后的网格数据,在顶点的量级计算上会比原始数据低数倍(比如一个Cube,肉眼所见的顶点数量是8个,但原始顶点数量则为24),Vortex直接遍历其顶点数组,在每个顶点上施加向心力和引力。

引力算法:传入参数顶点位置vertex、系数factor(这里的系数为顶点与涡流中心的距离),返回施加引力后的新顶点位置。

//应用引力
private Vector3 ApplyGravitation(Vector3 vertex, float factor)
{
float gravitation = Gravitation / factor * Time.deltaTime;
return vertex + (_realCenter - vertex).normalized * (gravitation > factor ? factor : gravitation);
}

1.这里的Gravitation / factor x Time.deltaTime,将引力与系数、帧刷新时间计算,产生一个可变的引力值gravitation
2.(_realCenter - vertex).normalized求得实时引力方向(_realCenter为涡流中心坐标);
3.gravitation > factor ? factor : gravitation由于factor也表示顶点与涡流中心的距离,如果引力值已经超出距离,则以距离值替换引力值,防止顶点被吸入后反向穿透;

向心力算法:传入参数顶点位置vertex、系数factor(这里的系数为顶点与涡流中心的距离),返回施加向心力后的新顶点位置。

//应用向心力
private Vector3 ApplyCentripetal(Vector3 vertex, float factor)
{
return Quaternion.AngleAxis(CentripetalForce / factor, CentripetalDirection) * (vertex - _realCenter) + _realCenter;
}

1.这里的Quaternion.AngleAxis(CentripetalForce / factor, CentripetalDirection),将向心力除以系数,并与向心力方向合力计算出向心力旋转值(Quaternion);
2.x (vertex - _realCenter) + _realCenter求得旋转值基于涡流中心的偏移量。

图像展示

【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路_Vortex_02


【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路_Effects_03


【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader也玩Mesh之路_MeshEditor_04


标签:涡流,特效,MeshEditor,向心力,vertex,Unity,factor,顶点
From: https://blog.51cto.com/u_15911199/5934052

相关文章

  • Unity角色残影特效
    残影特效在网上有很多例子,比如​​这个​​,我参考着自己整合了一下,算是整合了一个比较完整且特别简单易用的出来,只需要一个脚本挂上去无需任何设定就能用。这里只针对Skinne......
  • 【Unity】 HTFramework框架(三十四)框架实用特性
    更新日期:2020年11月6日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​框架实用特性​​​​LnkTools特性(快捷工具)​​​​CSDNBlogURL......
  • Unity 资源管理插件
    之所以写这个插件呢,就是为了方便整理项目中的资源文件,我记得之前好像也用了这么一个插件,但是也没去找,还是自己动手写一个吧,需要什么功能就看自己的需求。在项目的过程中呢,已......
  • 【Unity】 HTFramework框架(三十三)XLua热更新
    更新日期:2020年3月20日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​XLua热更新简介​​​​使用XLua热更新​​​​创建XLua开发环境......
  • 【Unity】 HTFramework框架(三十二)授权验证
    更新日期:2020年3月2日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​授权验证简介​​​​使用授权验证​​​​取消永久授权​​​​......
  • Unity插件 - MeshEditor(八)模型镜像特效
    将静态模型(带MeshFilter)按指定轴向、指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之......
  • 【Unity】 HTFramework框架(三十一)全局设置
    更新日期:2020年3月2日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​全局设置简介​​​​使用全局设置​​​​打开全局设置面板​​......
  • unity使用ugui自制调色面板
    突然想实现一个调色面板,然后开工...首先找找有没有什么接口可调,木有找到,找到一些调用win32实现的本地颜色面板的调用,感觉不科学,反正多平台肯定是搞不定的。既然没找到,还是老......
  • Unity 自定义创建脚本模板
    Unity自定义创建脚本模板原理:以模板代码为底板,通过关键字替换来实现代码创建两种实现方案方案11.先准备好对应的代码模板,放到Assets\ScriptTemplates目录下usingSys......
  • Unity中实现A*寻路
    前言:最近没事儿没工作,计划每天写一篇博客,防止对Unity生疏,也可以记录学习的点点滴滴。A*寻路在很多面试里都会问到,但实际工作中根本用不着自己写,网上有成熟的插件,不容易错......