Unreal Engine学习
创始人
2024-03-29 19:19:06
0

1,什么是组件?

继承于Uobject的为了给actor以及其他在场景中显示出来的类增加新的功能的一个东西

2,可以自己创建一个蓝图,然后将蓝图拖到场景中,也可以直接在c++ class中将蓝图拖到场景中 

3,创建一个组件:

UStaticMeshComponent * StaticMesh(组件在蓝图中的名字) = CreateDefaultSubobject(TEXT("MyStaticMesh(组件标志)"));

4,设置Actor的位置:

SetActorLocation(Vectorxxx);

5,设置偏移量

//第二个参数:去检查移动的轨迹上是否有可以发生碰撞的物体
AddActorLocalOffset(Vectorxxx, true);

6,宏 

meta=(ClampMin=-5.0f, ClampMax = 5.0f, UIMin = -5.0f, UIMax = 5.0f)

ClampMin=-5.0f, ClampMax = 5.0f表示输入范围:-5~5

UIMin = -5.0f, UIMax = 5.0f表示鼠标拖动范围:-5~5

7,如何查找函数的头文件,用法等

(1)搜索Unreal doc,点击进入,在搜索框中填入函数,回车

(2)点击c++ API

 ps:AddActorLocalOffset这个函数,ue5中木有

8,如何添加头文件

(1)在.cpp文件中添加

 (2)在.h文件中添加

要添加在  #include "MyActor.generated.h" 之前 

9,如何穿透一个物体(如何不与一个物体发生碰撞)

碰撞是相互的,我们只要使一个物体忽略掉另一个物体的碰撞,碰撞就不会 发生

比如:

物体A:   碰撞 --> 碰撞预设 --> 改为custom

                对象类型改为physicsbody(任选一个就行)

物体B:   碰撞 --> 碰撞预设 --> 改为custom

                 碰撞响应 --> 物体响应 --> 忽略的那竖行勾上physicsbody(物体A的对象类型)

10,如何在不开启模拟重力的情况下,产生碰撞,并且获取碰撞的坐标

		FHitResult HitResult;/*第二个参数:* https://www.bilibili.com/video/BV1Ce4y1e7PE?p=35&vd_source=9861d52a3c015d8d0859fa02af9dd6bd*检查移动的轨迹上是否有可以发生碰撞的物体,我测试了,*在设置为TRUE的情况下,无论有没有模拟物理都一样,在物体碰撞之后,就会停住*如果设置为false,没有模拟物理的情况下,那么就不会发生碰撞*						    有模拟物理的情况下,碰撞了,但是会擦着另一个物体表面继续运动*///TickLocationOffset是一个偏移量,类型是vectorAddActorLocalOffset(TickLocationOffset, true, &HitResult);UE_LOG(LogTemp, Warning, TEXT("X: %f, Y: %f, Z: %f"), HitResult.Location.X, HitResult.Location.Y, HitResult.Location.Z);

11,创建根组件,并且将静态网格组件附加到其上

	RootComponent = CreateDefaultSubobject(TEXT("RootCompnent"));StaticMesh = CreateDefaultSubobject(TEXT("MyStaticMesh"));StaticMesh->SetupAttachment(GetRootComponent());

12,在tick函数移动

按键映射函数只是修改值,真正调用移动函数的是tick

这样是为了不同帧率的玩家,在一秒钟移动的位置相同,具体看13条

//只是修改值,真正调用移动函数的是tick
void AMyPawn::MoveForward(float Value)
{Velocity.X = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}void AMyPawn::MoveRight(float Value)
{Velocity.Y = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}
void AMyPawn::Tick(float DeltaTime)
{Super::Tick(DeltaTime);AddActorLocalOffset(Velocity * DeltaTime, true);
}

13,为什么移动的时候,要乘deltatime

 

14,更改附着关系之后,蓝图没有更新怎么办

蓝图右击--->资产操作---->重新加载

15,player start与game mode的作用

玩家出生点PlayerStart 继承于AActor,因此可以被放置到场景中。它的作用就是标记玩家出生的位置,游戏开始后,程序会查找玩家出生点的位置,并生成一个GameMode中配置的APawn,放置到该处,如果关卡里没有PlayerStart ,那么系统会在世界坐标(0,0,0)出产生一个APawn。
PlayerStart 这个设计的初衷其实就是为了让关卡设计师和角色设计师的工作解耦合

虚幻引擎图文笔记:玩家出生点(PlayerStart)_开发游戏的老王的博客-CSDN博客_ue4 playerstartPlayerStart`这个设计的初衷其实就是为了让关卡设计师和角色设计师的工作解耦合https://blog.csdn.net/ttm2d/article/details/107082951

 16,如何添加映射?

(1),添加轴映射 

(2)添加映射函数

pawn.h文件中添加void MoveForward(float Value);
void MoveRight(float Value);pawn.cpp文件中添加
void AMyPawn::MoveForward(float Value)
{Velocity.X = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}void AMyPawn::MoveRight(float Value)
{Velocity.Y = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}

(3)注册玩家

AMyPawn::AMyPawn()
{// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;AutoPossessPlayer = EAutoReceiveInput::Player0;MaxSpeed = 100.0f;Velocity = FVector::ZeroVector;
} 

(4)绑定映射函数

// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{Super::SetupPlayerInputComponent(PlayerInputComponent);//玩家没有按下对应的键的时候,也会每一帧都调用以下映射函数PlayerInputComponent->BindAxis(TEXT("MoveForward"), this, &AMyPawn::MoveForward);PlayerInputComponent->BindAxis(TEXT("MoveRight"), this, &AMyPawn::MoveRight);
}

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...