Unreal Engine 4 —— GAS系统学习 (五) 为主角武器添加碰撞体

2024-03-11 10:30

本文主要是介绍Unreal Engine 4 —— GAS系统学习 (五) 为主角武器添加碰撞体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

该人物使用的SkeletalMesh的模型是带有剑的碰撞体的,我们先在Physics里面进行删除,后再进行以下操作。

以下代码添加在角色头文件中:

 

1     UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TestProperties")
2     class UCapsuleComponent* capsuleBox;
3 
4     FScriptDelegate attackTouchDelegate;
5 
6     UFUNCTION()
7     void beginOverlap(UPrimitiveComponent* overlapComp,AActor* actor,UPrimitiveComponent* otherComp,int index,bool sweep,FHitResult &hit);

 

 

以下代码添加在CPP文件中:

 

 1 capsuleBox = CreateDefaultSubobject<UCapsuleComponent>("capsuleBox");2 capsuleBox->SetupAttachment(shibiSkeletal);9     capsuleBox->SetCapsuleHalfHeight(43.0f);
10     capsuleBox->SetCapsuleRadius(12.0f);
11 
12     capsuleBox->SetRelativeLocationAndRotation(FVector(0,-30,0), FQuat(FRotator(0,0,-90)));
13     attackTouchDelegate.BindUFunction(this,FName("beginOverlap"));
14     capsuleBox->OnComponentBeginOverlap.Add(attackTouchDelegate);
15 
18     capsuleBox->SetGenerateOverlapEvents(true);
19     capsuleBox->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
20     capsuleBox->SetCollisionObjectType(ECC_WorldDynamic);
21     capsuleBox->SetCollisionResponseToChannel(ECC_Pawn, ECollisionResponse::ECR_Overlap);
22 
23     capsuleBox->AttachTo(shibiSkeletal, "weapon_r");

 

我们想让添加的碰撞体随着剑挥舞动所以得将碰撞体关联到人物骨骼的socket上,这里使用了capsuleBox->AttachTo(shibiSkeletal, "weapon_r");方法进行关联。

第一个参数是父类,名为“weapon_r”的socket是在shibiSkeletal组件上的,所以,第一个参数为shibiSekeltal,第二个参数是要关联的socket的名字。具体名字取骨骼模型中寻找。

 

然后设置大小,相对位置。

 

capsuleBox->SetCapsuleHalfHeight(43.0f);
capsuleBox->SetCapsuleRadius(12.0f);

capsuleBox->SetRelativeLocationAndRotation(FVector(0,-30,0), FQuat(FRotator(0,0,-90)));

 

再用FScriptDelegte进行动态代理,被代理的函数需要UFUNCTION进行反射,勿忘。

 

 1 void AShinbi::beginOverlap(UPrimitiveComponent* overlapComp, AActor* actor, UPrimitiveComponent* otherComp, int index, bool sweep, FHitResult& hit)2 {3     auto parent = actor->GetClass();4 5     if (actor != this) {6         if (otherComp) {7             GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Blue, otherComp->GetName());8         }9     }
10 }

 

在代理方法中,打印出剑碰撞到的组件名字。

开启碰撞,进行碰撞属性设置。

1     capsuleBox->SetGenerateOverlapEvents(true);
2     capsuleBox->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
3     capsuleBox->SetCollisionObjectType(ECC_WorldDynamic);
4     capsuleBox->SetCollisionResponseToChannel(ECC_Pawn, ECollisionResponse::ECR_Overlap);

只对PAWN类型有碰撞反馈,反馈类型是OVERLAP。

 

效果如下:

这篇关于Unreal Engine 4 —— GAS系统学习 (五) 为主角武器添加碰撞体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797544

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用