unreal怎么设置碰撞_unreal碰撞体 - CSDN
精华内容
参与话题
  • 一、在HUD中显示消息 1) 在MyHUD.h中定义一个结构来表示我们的消息: #pragma once#include "GameFramework/HUD.h"#include "MyHUD.generated.h"//该结构体表示我们要显示的消息属性struct Message{ FString m...

    202113vt63aqp262up1rt1

    一、在HUD中显示消息

    1) 在MyHUD.h中定义一个结构来表示我们的消息:
    1. #pragma once
    2. #include "GameFramework/HUD.h"
    3. #include "MyHUD.generated.h"
    4. //该结构体表示我们要显示的消息属性
    5. struct Message
    6. {
    7. FString m_Message; //消息内容
    8. float m_Time; //显示的时间
    9. FColor m_Color; //文本的颜色
    10. Message() : m_Time(6.0f), m_Color(FColor::White) //默认属性
    11. {
    12. }
    13. Message(FString message, float time, FColor color)
    14. :m_Message(message), m_Time(time), m_Color(color)
    15. {
    16. }
    17. };

    2) 添加消息数组。UE4中用TArray来表示动态数组,因此将我们的AMyHUD类修改成:
    1. UCLASS()
    2. class DEMO1_API AMyHUD : public AHUD
    3. {
    4. GENERATED_UCLASS_BODY()
    5. public:
    6. // 下面这个重载函数每帧会被调用一次,在这个函数的定义里面来渲染字体
    7. virtual void DrawHUD() override;
    8. void AddMessage(Message msg);
    9. // 添加字体属性(随后我们在蓝图编辑器中设置字体类型)
    10. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = HUDFont) UFont* hudFont;
    11. private:
    12. TArray<Message> m_Messages;
    13. };
    上面定义了一个表示消息的TArray数组,当有消息要被显示的时候,将其添加到该数组中。当该消息经过了一段时间后消息,就会从TArray数组中删除。有关TArray的知识,后面也会继续介绍。

    在AMyHUD.cpp中添加如下代码:
    1. #include "Demo1.h"
    2. #include "MyHUD.h"
    3. AMyHUD::AMyHUD(const class FObjectInitializer& PCIP) : Super(PCIP)
    4. {
    5. }
    6. void AMyHUD::DrawHUD()
    7. {
    8. // 先调用父类DrawHUD()函数
    9. Super::DrawHUD();
    10. // 从后往前迭代数组,这样做的好处是可以避免删除一个元素引起因为当前的迭代器无效引起的错误
    11. for (int i = m_Messages.Num() - 1; i >= 0; --i)
    12. {
    13. float outputWidth, outputHeight, pad = 10.0f; //pad是文本和消息框的间距
    14. //下面的函数根据字体和字体大小计算当前这段消息的宽度、高度,用于计算其消息框的宽度和高度
    15. GetTextSize(m_Messages[i].m_Message, outputWidth, outputHeight, hudFont, 1.0f);
    16. float messageH = outputHeight + 2.0f*pad;
    17. float x = 0.0f, y = i*messageH;
    18. //黑色背景
    19. DrawRect(FLinearColor::Black, x, y, Canvas->SizeX, messageH);
    20. DrawText(m_Messages[i].m_Message, m_Messages[i].m_Color, x + pad, y + pad, hudFont);
    21. // 消耗显示时间
    22. m_Messages[i].m_Time -= GetWorld()->GetDeltaSeconds();
    23. //如果显示时间已消耗完,将其移除
    24. if (m_Messages[i].m_Time < 0)
    25. {
    26. m_Messages.RemoveAt(i);
    27. }
    28. }
    29. }
    30. void AMyHUD::AddMessage(Message msg)
    31. {
    32. m_Messages.Add(msg);
    33. }

    二、在NPC中添加触发事件

    为了让我们靠近NPC才显示对话框,我们需要创建一个比角色原来的碰撞体要大一点的碰撞盒用来检测是否靠近NPC。我们会创建一个大的球体包围住NPC,这样当我们靠近NPC它就会作出反应并显示消息出来。

    1) 在NPC.h文件中添加如下代码:
    1. #pragma once
    2. #include "GameFramework/Character.h"
    3. #include "NPC.generated.h"
    4. UCLASS()
    5. class DEMO1_API ANPC : public ACharacter
    6. {
    7. GENERATED_UCLASS_BODY()
    8. public:
    9. //在目录Collision下创建球体属性(随处可见,蓝图只读),用于靠近NPC的碰撞体检测
    10. UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Collision)
    11. USphereComponent* ProxSphere;
    12. //在目录NPCMessage下创建字符串属性(随处可见,蓝图可读写)
    13. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NPCMessage)
    14. FString NpcMessage;
    15. //接近NPC时调用该函数
    16. UFUNCTION(BlueprintNativeEvent, Category = "Collision")
    17. void Prox(AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 otherBodyIndex, bool bFromSweep,
    18. const FHitResult & SweepResut);
    19. };

    2) 在NPC.cpp中添加如下代码:
    1. #include "Demo1.h"
    2. #include "NPC.h"
    3. #include "Avatar.h"
    4. #include "MyHUD.h"
    5. ANPC::ANPC(const class FObjectInitializer& PCIP)
    6. : Super(PCIP),
    7. ProxSphere(PCIP.CreateDefaultSubobject<USphereComponent>(this, TEXT("Proximity Sphere"))),
    8. NpcMessage("Hi!!") //设置默认消息,而且它是可以在UE4中被编辑的
    9. {
    10. //把球体贴合到根组件,这样球体就会跟随着NPC
    11. ProxSphere->AttachTo(RootComponent);
    12. //设置球体半径
    13. ProxSphere->SetSphereRadius(200.0f);
    14. //将检测靠近球体跟Prox函数进行重叠绑定。当球体与其他actor有交叉时就会调用Prox函数
    15. ProxSphere->OnComponentBeginOverlap.AddDynamic(this, &ANPC::Prox);
    16. }
    17. //注意!虽然我们的头文件中声明是ANPC::Prox(),但是这里要写ANPC::Prox_Implementation
    18. //当球体与其他actor发生重叠时就会调用该函数
    19. void ANPC::Prox_Implementation(AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep,
    20. const FHitResult & sweepResult)
    21. {
    22. //通过强制转换成AAVatar是否成功来判断是否玩家角色
    23. if (Cast<AAvatar>(otherActor) == nullptr)
    24. {
    25. return;
    26. }
    27. //获得第一人称控制器
    28. APlayerController* PController = GetWorld()->GetFirstPlayerController();
    29. if (PController)
    30. {
    31. //获得HUD界面
    32. AMyHUD* hud = Cast<AMyHUD>(PController->GetHUD());
    33. hud->AddMessage(Message(NpcMessage, 5.f, FColor::White));
    34. }
    35. }

    三、运行

    最后你可以编译看看自己的代码是否没有问题,如果没有问题,在打开的UE4编辑器中点击运行,每当你靠近一个NPC,左上角就会显示其消息,如下图所示:


    转自:http://www.52vr.com/article-565-1.html

    展开全文
  • Unreal Engine——碰撞系统 在游戏的开发之中,玩家和场景的交互,有一点就是碰撞,这里讲解最基础的碰撞 一、碰撞的删除与添加 游戏会使用到许多的模型,有的时候,有的模型不想和玩家碰撞就要取消,例如:草。(UE...

    Unreal Engine——碰撞系统

    在游戏的开发之中,玩家和场景的交互,有一点就是碰撞,这里讲解最基础的碰撞

    一、碰撞的删除与添加

    游戏会使用到许多的模型,有的时候,有的模型不想和玩家碰撞就要取消,例如:草。(UE4的植被系统可以自动解决)如果草的模型不取消碰撞,会出现下面这种人物站立在草上方的情况在这里插入图片描述
    我们只需要打开草的这个模型
    在这里插入图片描述
    在Collision中选择移除碰撞在这里插入图片描述
    添加碰撞,按照给出的碰撞模式添加即可
    编译保存后,再进入就不会再有碰撞产生
    在这里插入图片描述

    展开全文
  • UE4从菜鸟到高手13:Unreal Engine碰撞讲解(上) 01 前提 Sphere、Cube、Floor都是StaticMeshActor类型 02 力与碰撞 02 01 Simulate Physics 现阶段直观觉得Simulate Physics是加重力的,对WorldStatic类型打勾...

    UE4从菜鸟到高手13:Unreal Engine碰撞讲解(上)

    01 前提

    Sphere、Cube、Floor都是StaticMeshActor类型
    在这里插入图片描述

    02 力与碰撞

    02 01 Simulate Physics

    现阶段直观觉得Simulate Physics是加重力的,对WorldStatic类型打勾“忽略”或“重叠”的话。
    在这里插入图片描述
    Sphere、Cube、Floor都会往下掉
    在这里插入图片描述

    02 02 不同类型的reget、overlap、block

    只有Sphere开启Simulate Physics,并且穿Cube(WorldStatic类型),不穿Floor(默认WorldDynamic类型)
    在这里插入图片描述
    在这里插入图片描述

    03 OnActorHit方法(谁打了我)

    1. 在“02 02 不同类型的reget、overlap、block”的基础上,Sphere开启“Simulation Generates Hit”,并且对Cube和Floor两种类型都会变“硬”(block)。
      在这里插入图片描述
    2. 碰了Sphere的对象“Other Actor”的名字会被打印

    在这里插入图片描述

    1. Cube碰了Sphere,Cube被打印

    在这里插入图片描述

    04 总结

    在这里插入图片描述

    展开全文
  • Unreal3 碰撞参考指南

    千次阅读 2013-10-22 20:48:33
    碰撞参考指南 碰撞参考指南 概述创建骨架网格物体碰撞外壳创建静态网格物体碰撞外壳 使用构建画刷创建碰撞外壳使用 K-DOP 工具创建碰撞外壳使用球体简化碰撞创建碰撞外壳使用自动凸面碰撞工具...

    碰撞参考指南


    概述


    当创建图形细节时,保证游戏中的碰撞简洁是非常重要的。其中有两个原因,计算碰撞比计算多边形来说速度要快很多,而且对玩家来说加了碰撞,游戏体验就会流畅很多,玩家也不会卡在细小的缝隙中。碰撞响应分为两个不同的部分:虚幻碰撞和Physx 这篇文档主要讲解虚幻碰撞,请参阅 click here 获取更多关于Physx的信息。要了解更多有关碰撞的技术性信息,请参阅碰撞技术指南页面。

    创建骨架网格物体碰撞外壳

    请参阅 PhAT 用户指南 学习如何使用骨架网格创建碰撞外壳。

    创建静态网格物体碰撞外壳

    使用构建画刷创建碰撞外壳

    把您想添加碰撞外壳的网格物体放置到关卡中。然后在它的周围放置一个您想的碰撞外壳的形状的构建画刷。请尽量保持形状的简单性!

    Collision_CreateCollisionHullWithBrush_0.jpg

    然后选中静态网格物体,右击并从关联菜单中选择 Set Collision From Builder Brush(通过构建画刷设置碰撞)。这将会考虑您应用到静态网格物体上的任何缩放比例。

    Collision_CreateCollisionHullWithBrush_1.jpg

    注意到这个碰撞将会被添加到您已经选中的静态网格物体的所有实例上是很重要的。要看到保存画刷为碰撞的效果,您必须保存包含那个静态网格物体的包。

    Collision_CreateCollisionHullWithBrush_2.jpg

    使用 K-DOP 工具创建碰撞外壳

    K-DOP 是静态网格物体编辑器中的一个工具,用于生成简单的碰撞。K-DOP 是一种包围盒体积类型,它代表 K discrete oriented polytope(K 离散定向多面体)(这里的 K 是按照坐标轴排列平面的数量)。一般它有 K 个按照坐标轴平行排列的平面,并且使它们和网格物体尽可能的近。最终得到的形状用做碰撞模型。在静态网格物体编辑器中,K 可以是:

    • 6 - 轴对齐长方体。
    • 10 - 有四个边进行倒角处理的长方体—您可以选择按照 X-Y 或 Z 平行排列的边。
    • 18 - 在所有边上进行倒角处理的长方体。
    • 26 - 在所有边和角上进行倒角处理的长方体。

    请查看以下实例。这个工具对于包含很多管道、柱子及栏杆的包是非常便利的:

    kdop_sizes.jpg

    使用球体简化碰撞创建碰撞外壳

    该工具会轻松地用一个球体将这个静态网格物体保卫,这样可以使这个静态网格物体的每个部分都在球体的内部。当然这种方法最适用于那种有点像球体的静态网格物体。

    Collision_CreateCollisionHullWithSphere.jpg

    使用自动凸面碰撞工具创建碰撞外壳

    该工具会尝试为这个静态网格物体构建一组凸面碰撞外壳。通过调整这些参数,您可以调整凸面外壳的创建方式。

    Collision_CreateCollisionHullWithAutoConvex_0.jpg

    • Depth - 可以确定进入到这个网格物体的深度。调整这个参数可以帮助确认与这个静态网格物体更靠近的碰撞外壳。
    • Max Hull Verts - 碰撞外壳顶点的最大数量。增加这个值会增加碰撞外壳的复杂程度。
    • Allow Splits - 允许分割的最大值。增加这个值会增加创建的碰撞外壳的数量。

    Collision_CreateCollisionHullWithAutoConvex_1.jpg

    正如你所看到的那样,自动凸面碰撞相当准确,而多边形数量持续降低。

    Collision_CreateCollisionHullWithAutoConvex_2.jpg

    使用您的 3D 内容创建包创建碰撞外壳

    请参阅FBX 静态网格物体通道了解如何在 3D 内容创建包中创建静态网格物体碰撞外壳。

    体积

    这些是可以与游戏中的 actor 发生碰撞的不可见 BSP。下面的示例将会向您显示如何生成一个阻挡体积。Volumes can be both blocking collision and non blocking collision.

    如何创建阻挡体积

    首先使构建画刷的形状是正确的。

    Collision_Volume_CreateBrush.jpg

    在虚幻编辑器中右击 Volume(体积)按钮,然后从列表中选择 BlockingVolume。

    Collision_Volume_RightClickMenu.jpg

    这些通常用来阻挡 actor,使他们无法到达关卡中的某些特定区域。

    Collision_Volume_CreatedVolume.jpg

    示例


    这里是一些如何为一般的碰撞情境设置各种碰撞标记的例子。我们的目标是为物理情景正确地设置碰撞检测及标记。

    玩家移动和武器开火

    对于适当的玩家运动,尤其是将碰撞柱应用于 Pawn 运动及和其它 Pawn 的碰撞,同时使用运动骨骼来精确地进行碰撞检测(比如射枪时的光线跟踪)的情况下,请考虑以下设置:

    • 虚幻物理(比如 PHYS_Walking)将会清除 CollisionComponent(碰撞分量)的按照坐标轴排列的包围盒。当应用 PHYS_Walking 时,使用 SkeletalMeshComponent 作为 CollisionComponent 是一个糟糕的主意,因为当人物进行动画时,它的形状改变了很多。
    • 如果您将 CollideActors 和 BlockZeroExtent 设置为 true(真),线性检测将会检测附加到 Actor 上的所有 PrimitiveComponents。
    • 您没有必要使 PhysicsAssetInstance 和运动骨骼对骨骼进行线性检测。简单地分配一个 PhysicsAsset(物力资源)并设置 CollideActors 和 BlockZeroExtent 为 true(真)将会是您获得线性检测的结果(假设附加了分量)。
    • RBChannel/RBCollideWithChannel 仅影响物理引擎碰撞。如果您的玩家使用 PHYS_Walking,那么它将不会产生效果。

    基本上,您的 Pawn 需要一个 CylinderComponent 和一个 SkeletalMeshComponent。CollisionComponent 引用应该被分配给 CylinderComponent,并且 SkeletalMeshComponent 应该设置 CollideActors 和 BlockZeroExtent 为 true,您的 CylinderComponent 应该适当地设置 BlockZeroExtent 为 false,从而可以阻止它干扰武器踪迹。

    在游戏中检查碰撞


    在游戏中您可以使用几个控制台命令来检查碰撞设置。这里使其中的一些命令。输入它们并切换它们的开关状态。

    • show collision - 这将会在关卡中描画所有的碰撞模型及阻挡体积。
      Collision_ShowCollision.jpg
    • show zeroextent - 在关卡中显示碰撞,假设您是一个零粗细(线)跟踪。不可见对象没有碰撞。
      Collision_ZeroExtent.jpg
    • show nonzeroextent - 在关卡中显示碰撞,假设您是一个非零粗细(线)跟踪。
      Collision_NonZeroExtent.jpg
    • show rigidbody - 在关卡中显示碰撞,假设您是一个刚体(注意,它不会显示 RBCC 滤镜组,只显示 BlockRigidBody 和 UseSimpleRigidBodyCollision)。
      Collision_ShowRigidBody.jpg
    • nxvis collision - 这将显示关卡中的 PhysX 碰撞信息,所以您可以看到正在和哪个钢体进行碰撞。
      Collision_NxvisCollision.jpg
    • stat game - 这将为您显示各种不同碰撞类型所占用的时间的有用的统计数据。
      Collision_StatGame.jpg
    展开全文
  • Unreal 入门-Collision和Physics,碰撞检测

    千次阅读 2017-03-22 23:55:29
    Collision仅仅掌管碰撞发生的检测和回调,而Physics仅仅模拟碰撞发生之后位置速度等等的变化。 Collision 可以设置persets,里边的标签都是不同的碰撞处理逻辑。Collision仅仅检测是否碰碰撞和回调一些碰撞处理...
  • 设置物理效果: 碰撞设置
  • 如何在Unreal里给角色绑定碰撞

    千次阅读 2014-07-25 17:54:23
    如果碰撞体要绑定到已经存在的Bone上,请略过此步骤。 2. CharacterBP的Component里,按照希望的形状,添加BoxComponent\SphereComponent\CapusuleComponent,并注意调整它们的大小,也尽量调整到合适的位置。 3. ...
  • 1、碰撞组件基本属性碰撞组件的属性如图 属性简要介绍: Simulation Generates Hit Events:是否对碰撞事件进行通知 Phys Material Override:指定该Mesh的物理材质 Generate Overlap Events:是否对重叠事件进行通知 ...
  • 教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的物理现象 2创建子弹抛射 3自动追踪 4碰撞事件...
  • Unreal Engine 4 C++ 射线碰撞

    千次阅读 2014-09-26 01:12:52
    Unreal Engine 4 C++ 射线碰撞
  • UE4蓝图碰撞检测解析

    万次阅读 多人点赞 2020-02-04 16:44:10
    虽然UE4官方文档对碰撞好像讲的很清楚,但是尝试的时候发现有很多问题,而且和官方文档描述的总会出现一些差异,所以自己总结一下所有有关碰撞的内容,持续更新吧~ 下面总结了一般的碰撞以及多组件碰撞的一些...
  • Unreal Engine 4 初学者教程:开始

    万次阅读 多人点赞 2018-06-14 16:11:14
    Unreal Engine 4 初学者教程:开始 原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A ...
  • ue4内植物碰撞和风力设置

    千次阅读 2018-05-11 15:30:33
    首先是这种碰撞用需要骨骼绑定实现,一根枝干上不要有太...可以单独设置下面是物体碰撞设置,默认我们需要植物与植物之间不要有碰撞避免过密的时候抖动先锁定轴向,避免倒掉统一草的碰撞体,忽略自身相互碰撞就是一...
  • 一、在HUD中显示消息 1) 在MyHUD.h中定义一个结构来表示我们的消息:   #pragma once   #include "GameFramework/HUD.h" #include "MyHUD.generated.h" ... ...
  • 这个算是第一个比较深入到Unreal引擎编码的例子,这个例子中,可以通过A,S,D,W控制球体的移动,通过鼠标控制转向,有燃烧的火球,非常的逼真。 下面是运行的示例图,跑动的时候效果会更赞,可以看到燃烧的火球: ...
  • Destructive Mesh下面介绍了在 Unreal Engine* 4 (UE4*) 项目中正确设置 PhysX* Destructive Mesh (DM) 的快速指南。该指南主要基于个人的反复试验,其他方法可能更适合您的项目。 如需深入了解 Destructive Mesh ...
  • 简单的碰撞几何体对于优化游戏中的碰撞检测是很重要的。虚幻引擎4在 静态网格物体编辑器 中提供了创建碰撞几何体的基本工具。但是,某些时候,最好还是通过在您的3D建模应用程序中创建自定义的碰撞几何体然后再将...
  • 使用Unreal Engine 开发车辆组装,碰撞,模拟的插件的细节技术
  • UE4中的简单碰撞与复杂碰撞

    千次阅读 2019-12-04 10:43:00
    物体碰撞形状分为简单碰撞和复杂碰撞,简单碰撞的形状比较简单,方便计算,可以由用户自己添加和编辑,复杂碰撞紧贴物体表面,形状精确但是计算量大。 将引擎下的球体模型复制到工程的Content目录下,双击在模型...
  • 2018 Unreal Open Day参会总结

    千次阅读 2018-05-26 11:59:21
    今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。 首先是行程: 会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏...
1 2 3 4 5 ... 20
收藏数 1,553
精华内容 621
关键字:

unreal怎么设置碰撞