Unity插件 - MeshEditor(十) 模型风力拉扯特效

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

 

先上几张效果图:

 

 

(导演:我们需要一个刮风的效果,道具组,上大风扇)

 

(导演:咔!!!行了,道具组你们明天不用来上班了)

 

(大风扇:怪我咯)

 

OK,进入今天的正题吧,我记得在PS或者是某些图片编辑工具里都有类似给目标添加一个大风的效果,虽然这样做最终图片也会被风刮得模糊不清了,但有时候就是需要这样的效果不是吗?所以我再次秉承了暴力解决一切的终极技巧,将大风扇搬了过来。

 

一、原理:

 

我的做法是首先确定风向,然后根据风向与每个顶点的法线计算点积,最终用点积来确定每个顶点将会受到风力的影响程度。

调用如下方法设置风向:

MeshBlow.SetDirection(Vector3 direction);

 

记录每个顶点将会受到风力的影响程度(计算风向与顶点法线点积):

 
        //计算每个顶点将会受到的风力影响
        _dots = new float[_vertices.Length];
        for (int i = 0; i < _vertices.Length; i++)
        {
            _dots[i] = Vector3.Dot(_mesh.normals[i], _blowsDirection);
        }
 
然后,直接开启大风扇(也就是让顶点开始根据风向偏移,主要是模型的边缘顶点以及背离风向的顶点):
 
        for (int i = 0; i < vertices.Length; i++)
        {
            if (_dots[i] <= 0)
            {
                vertices[i] += _blowsDirection * BlowsPower * _dots[i] * 
                    Random.Range(BlowsPowerMinRate, BlowsPowerMaxRate);
            }
        }
好了,代码简直简单暴力得无话可说。
 

二、属性面板如下:

 

 

Blows Direction:风向

Blows Power:风力

Blows Power Min Rate:风力变化最小速率(当为0时,风力为0)

Blows Power Max Rate:风力变化最大速率(当为1时,风力最大,再大则翻倍)

Update Blows:是否持续刮风?不的话就刮一次,模型保持被吹一次时的情景

Update Rate:持续刮风的速率,越小刮得越快(也就是刷新的越快,越小看着越不卡,只不过性能遭不住不怪我)

 

三、运行:

 

在任意静态模型上添加脚本MeshBlows,勾选UpdateBlows,然后直接运行场景就可以看到效果:

 

再上几张效果图:

 

(横向瞬移)

 

(垂直瞬移)

 

 

-----by MeshEditor

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神码编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值