ue4粒子实现流血效果
动作/射击游戏中,击中角色时常常伴随着血花效果,增强打击感的同时,也方便了玩家对命中与否的判断。
血液效果分两块,首先是受伤部位在受击瞬间产生血雾粒子,然后在身体、地面、墙面等处附加血迹贴图。
本文讨论的是第一块。
先在项目文件夹右键新建一个particlesystem,默认是长这样的:

可以看到是一坨红绿蓝的东西袅袅升起。
这坨东西其实就是由一个个尖尖的小粒子,通过一系列运动规律展现出来的,每个单元的外观由required→emitter中的材质决定

于是我们要把材质替换为血雾的基本单元。
因此我们要先制作一个M_Blood1材质。
通过百度图片搜索“血”,我挑选出了一张比较合适的图片作为贴图

通过ps中反相一系列处理得到了大致的alpha贴图

(由于我不是美工,效果有限还请见谅)
接下来就是材质连线了,只实现了基本的贴图显示

blend mode选择translucent,两张贴图分别连到对应位置即可
然后将该材质设为粒子发射的材质
为了方便观察我们把它拖到场景中

依稀有点血雾的样子了,不过炊烟袅袅升起肯定不对
于是我们需要调整initial velocity

我是这么设置的

向自身x轴方向恒定速度喷出,并且有个向上的初速度
然后还会有向下的加速度(右键添加const acceleration)

加速度过大过小都不好,我设为-200

然后我修改了required→duration中的发射持续时间以及循环数(1表示不循环只喷一轮duration)

当然spawn中的发射速度也可以自行调整

下面就是如何在角色受击时显示粒子特效的问题了,倘若直接使用anim notify,无法让粒子恰好处于受击位置(伤口处),因此我们新建一个C++类MyParticleActor
MyParticleActor.h文件
#pragma once #include "GameFramework/Actor.h"
#include "MyParticleActor.generated.h" UCLASS()
class SANSHAOYESWORD_API AMyParticleActor : public AActor
{
GENERATED_BODY() public:
// Sets default values for this actor's properties
AMyParticleActor(); protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MyParticle, meta = (AllowPrivateAccess = "true"))
UParticleSystemComponent* particle = NULL;
public:
// Called every frame
virtual void Tick(float DeltaTime) override; };
MyParticleActor.cpp在构造函数中创建particle组件
AMyParticleActor::AMyParticleActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true; particle=CreateDefaultSubobject<UParticleSystemComponent>(TEXT("particle"));
particle->SetupAttachment(RootComponent);
}
然后进入编辑器,创建继承MyParticleActor的蓝图bp_blood1

将template设为我们刚才制作的血雾粒子即可
还需要对这个actor的life span进行设置,我设置的是1.5秒

最后我们进入receivedamage函数,也就是处理角色受击的代码,插入下列生成血雾粒子代码
//扣完血马上进行流血效果
if (particleactor_blood) {
FActorSpawnParameters SpawnParams;
AMyParticleActor* newblood_particleactor = GetWorld()->SpawnActor<AMyParticleActor>(
particleactor_blood,
hitlocation,//产生于受击位置
vct2sp((attacker->GetActorLocation()-hitlocation)).Rotation()
//hitlocation和attacker的中心连线的水平分量作为particle发射方向
, SpawnParams);//
newblood_particleactor->AttachRootComponentTo(GetMesh(),FName(*hitbonename),
EAttachLocation::KeepWorldPosition,true);//
}
else {
throw std::exception("流血粒子物体缺失!!!!");
}
当然在此之前要让Character类暴露给蓝图一个particleactor_blood
//用于受击时流血效果的
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MyParticle, meta = (AllowPrivateAccess = "true"))
UClass* particleactor_blood = NULL;
最后在Character蓝图中将particleactor_blood设为我们刚才制作好的bp_blood1就大功告成了

大致效果(截图看的不太明显其实明显有喷出来的动态过程):

ue4粒子实现流血效果的更多相关文章
- Particles.js基于Canvas画布创建粒子原子颗粒效果
文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫 ...
- iOS CAEmitterLayer 实现粒子发射动画效果
iOS CAEmitterLayer 实现粒子发射动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo 动 ...
- PS 软件操作应用处理——粒子化任务效果
前 言 JRedu 上次分享中,给大家介绍了一些图片的处理方法,主要是通过滤镜里的功能,把图片处理成素描效果或者水彩画效果,营造出不同的氛围. PS是一款非常强大的软件,包含了非常多的功能,合成 ...
- vue中使用动画vue-particles实现背景粒子酷炫效果
先来看我做的效果 我这个是用的背景色加上这个粒子效果实现的demo 平时我们做项目的话会添加背景图片这些,可能更加好看 看我的实现步骤 cnpm install -g vue-cli vue init ...
- 粒子拼字效果(getImageData方法)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 如何让Ue4画面产生振动效果
可以使用CameraShake蓝图类,对应的C++类为UCameraShake. 这个类是通过修改PlayerController来达到效果
- ANDROID模拟火花粒子的滑动喷射效果
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 年前换了一个手机,SONY的Z3C.这个手机在解锁屏幕时有一个滑动动画,类似火 ...
- Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果
Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果 使用忍者飞镖创建粒子效果 游戏中,诸如烟.火.水滴.落叶等粒子效果,都可以使用粒子系统(particle system)来实现.例如,<明 ...
- iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器
iOS 烟花撒花效果,图层渐变,图层倒影特效.CAEmitterLayer粒子发射器 上一节我写了一个关于视图图层的相关类,有关CALayer这个类的使用和一些使用方法,详细看这里,就是我们在处理视图 ...
随机推荐
- html锚点 点击跳转到页面指定位置
本来是在看阮大神写的ajax教程,突然发现点击目录文字会跳转到相对应的文本内容,于是乎激发了我的兴趣. 这个究竟怎么做的,刚开始看的时候一知半解,找度娘就是:"点击跳转到页面指定位置&quo ...
- c++字符串的输入的思考
字符串的输入,是学习c++的一个重点,也是一个极富有细节意味的知识点,如果你不了解这些细节,你可能会在写程序时犯错而一脸懵逼不知所措. 与此同时,我们要了解c++缓冲区的概念,程序的输入都建有一个缓冲 ...
- rsync的用法
一.用法例子 1.增量备份本地文件#rsync -av ebook/ tmp/ //注意:文件名中最好不要有 :#rsync -avzrtopgL --progress /src /dst 2.本地和 ...
- 多个项目MyEclipse中启动出现OutOfMemoryError: PermGen space如何解决
在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因. PermGen space的 ...
- Linux命令 文件备份归档恢复
cp [功能说明] 文件的备份 英文xxxx #cp命令将源文件复制到另外安全的地方,复制的文件和源文件是两个相互独立的文件,对认识一个文件的操作不影响另一个文件,但与符号链接文件中的硬链接是有区别 ...
- DB2简介和安装部署
一.DB2相关概念 1.DB2体系结构: DB2体系结构中的最高一层是系统,一个系统表示DB2的一个安装.在由很多机器组成 的网络环境中,我们有时=也称系统为数据库分区,一个系统可以包含多个DB2实例 ...
- 调用phprpc的时候出现Fatal error: Cannot redeclare gzdecode()
出现这个问题的原因是:php在5.4版本后,已经自包含了gzdecode()函数,开发者自己定义的gzdecode()函数会与其冲突. 在 ....\phpRPC\compat.php文件的第72行( ...
- 【Android Developers Training】 24. 保存键值对
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Object-C知识点 (二) 控件的实用属性
开发过程中的组件不常用但是很实用的属性!!!!!! p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Menlo; color: #78492a ...
- 利用CSS3新特性实现完全兼容的自定义滚动条。
背景:最近项目里面因为统一页面风格,用到了自定义滚动条,在完成之前的那个滚动条的时候,与网上各个滚动条插件实现的方法类似,相当于造了轮子,通过css3的 网上看到的滚动条插件多数是通过监听内容的滚动事 ...