快捷键
快捷键 | 描述 |
---|---|
F | 定位关一卡对象:双击游戏对象名字或选游戏对象名字 |
鼠标中键 | 移动视野 |
alt+鼠标左键移 | 旋转视野 |
滑动鼠标滚轮 | 缩放视野 |
alt+鼠标右键拖动鼠标 | 缩放视野 |
鼠标左键移动鼠标 | 前后漫游 |
WASD+鼠标右键 | 自由漫游 |
漫游时滑动鼠标滚轮 | 调节漫游速度 |
选中要克隆的对象,按住Alf键拖动 | 克隆游戏对象 |
选中游戏对象,按END | 下落到平台 |
在默认情况下,UI控件蓝图不会渲染到关卡中,需要通过创建控件蓝图实现创建:
第一步:通过创建控件节点创建指定控件蓝图
第二步:通过添加到视口节点将控件蓝图显示到关卡
在默认情况,当我们点击游戏区域后,会将鼠标隐藏,这样就就不能很好的操作UI,这时就需要默认显示鼠标指针来控制。
多格式文本又称富文本,主要表述了在单-文本段中出现多种文本样式(字体,大小,颜色,格式)并且还可以掺杂图像内容
创建文本块数据表格;选择数据表格→RichTextStyleRow箭头第一行命名必须为Default。
使用示例 这是个
我们自己创建控件也可以作为其他UI控件的子控件
自定义控件的步骤为:
当用户创建的UI成为其他UI的子控件时,默认情况下是不能拥有子控件的,要想拥有子控件,就必须给U|添加一个命名插槽,这样这个UI就可以拥有子控件
实现步骤为:
用于给用户提供输入文本的控件
用于实现下拉选项
用于让U控件一-层- -层的叠在一起。可以有多个子控件之间的堆叠
用于显示指定索引的子元素
为多个子控件打包的盒子,当子控件在包裹框中放不下时自动换行
管理多个子元素,子元素的尺寸一样大,默认所有子元素都堆叠在一-起, 可以通过调节.上下左右控制元素位置。
管理多个子元素,子元素的尺寸可以单独设置尺寸,默认所有子元素都堆叠在一起,可以通过调节上下左右控制元素位置。
用于在水平方向管理多个子元素,子元素的尺寸可以单独设置尺寸,子元素类型可以不同,子元素的位置只能左右切换
用于在垂直方向上管理多个子元素,子元素的尺寸可以单独设置尺寸,元素类型可以不同,子元素的位置只能上下切换
用于设置子控件尺寸,只能有一个子控件
当子控件的总宽度或总高度超出滚动框时,超出部分隐藏,显示滚动条
用于表明一个特定的状态是选中还是未选中,为用户提示True/False或是/否的选择
有两种状态
绑定值:可以给选择框添加一个布尔值,用于控制选中与取消
注释
选中相应的节点,按c键注释
断开连线
atl+鼠标左键
每一个关卡对应一个关卡蓝图,关卡蓝图无法新建,只能打开默认的关卡蓝图并使用。
切换关卡时不会被销毁的一种数据管理类蓝图。
存储全局游戏信息。
●事件节点
●功能节点
●变量节点
●引用节点
序列节点(Sequence)的作用就是可以将一个长的顺序执行代码划分成段, 更便于管理。注意:序列节点是单线程的。分段会按照引脚(pin)的顺序执行。
分支(Branch) 节点:用于判断指定条件是否满足,如果条件为true, 执行true输出节点的逻辑,如果条件为false,执行false节点的逻辑。
ForLoop节点: 执行指定次数的功能的节点。需要传入循环开始值与结束值
ForLoopWithBreak节点: 在没有执行break时,与ForLoop节点功能- 样,当执行break时,循环终止
WhileLoop节点:只要满足循环条件,-直执行节点
Do N节点:当执行到第N次后,功能将不再执行。要想再次执行,需要执行一-次Reset复位
Do Once节点:只执行一-次,要想再次执行需要执行Reset
Flip Flop节点:又称翻转节点,可以输出两个功能,第- -次执行A功能, 第二次执行B功能,第三次再次执行A功能
Gate节点:又称门节点,即当门打开时,随时可以执行功能,当门被关闭后,就不能执行功能
**Multi Gate(多门)**节点:默认情况下会依次执行出输出,当所有输出完成后,不再执行输出。输出节点可以添加,还可以循环与随机
ForEachLoop:针对数组的的ForLoop
ForEachLoopWithBreak:针对数组的ForLoopWithBreak
时间轴节点(Timeline) 是蓝图中的特殊节点,功能是在指定的时间内将指定值变化到目标值
插值(Lerp) 节点:根据Alpha的值返回A到B之间的值, Alpha的取值范围为0-1
Deactivata:禁用组件
Activate:启用组件
Delay: 延迟
**打开关卡(Open Level)**打开一个新的关卡
**从类生成Actor(Spawn Actor from Class)**生成一个Actor
暂停游戏(Set Game Paused)
添加控制操作映射
获取与设置变量:
获取变量:按住ctr将变量拖到事件图表中
设置变量:按住alt将变量拖到事件图表中
查找项目(Findltem) :查找指定元素的下标
获取数组长度 (Length)
获取数组最后一-个元素下标: lastindex
插入数组元素(insert)
判断数组是否存在元素(Contains)
移除元素()
相同点:
是可以将- -段逻辑封装为功能
都可以接收参数
其他蓝图都可以直接调用
不同点:
选择:
蓝图宏整体功能与函数类似,都是对一-些功能算法进行了封装,可以根据情况添加多个输入弓|脚与输出引脚
用于将多个宏管理起来库文件,由于是文件,所以需要创建宏库,我们可以在所有的蓝图中调用宏库中的宏
类似委托的用法
定义事件分发器
赋值事件分发器
调用事件分发器
事件分发器在ui中的用法
创建ui控件时,需要将ui的触发方法继承下去,这时就可以用事件分发器。
读取界面方法
创建四元数(Make Quat)
欧拉角转四元数(Make from Euler(Quat))
拆分四元数(Break Quat)
四元数旋转向量(Rotate Vector(Quat))
一般蓝图写到特殊的蓝图可以直接得到,并进行类型转换。
比如:GetPlayPawn,GetPlayCharacter,GetPlayController
转换为动画蓝图时,需要先得到动画蓝图的实例,而这个实例的目标是在动画的Mesh上获得。
游戏优先度是最高的。可以直接得到GetGameMode
通过碰撞得到Actor,从而进行类型转换。
包括射线检测
在所有的引用类里面寻找
包括:
补充:
当寻找UICalss时,使用 Get All Widgets Of Class
通过get寻找
通过For Each Loop with Break
就是把需要用的蓝图存到变量里,然后在通过调用这张蓝图的时候,引用。
案例是在关卡里拿到两个需要通信的蓝图,将蓝图变量赋值给通信蓝图
使用的重要节点
Convert Mouse Location To World Space(鼠标屏幕坐标转世界坐标)
Line Trace By Channel(射线检测)
Add to Viewport 加载到界面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6UnQF0s-1681438840906)(null)]
ui面板上的笔刷或者样式等等是可以修改图片的,可以通过蓝图SetBrush或者SetStyle
给模型设置tag后,可以通过tag获取
按住3,点击面板可以创建颜色节点
AMyPawn.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "MyPawn.generated.h"
UCLASS()
class XZ_PROJECT_API AMyPawn : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
AMyPawn();
UPROPERTY(VisibleAnywhere, Category = "My Pawn Component")
class UStaticMeshComponent* myStaticMesh;
UPROPERTY(VisibleAnywhere, Category = "My Pawn Component")
class UCameraComponent* myCamera;
UPROPERTY(EditDefaultsOnly, Category = "My Pawn|Vector")
FVector CameraLocation;
UPROPERTY(EditDefaultsOnly, Category = "My Pawn|Vector")
FRotator CameraRotation;
UPROPERTY(EditAnywhere, Category = "My Pawn|Vector")
float MaxSpeed;
FORCEINLINE UStaticMeshComponent* GetStaticMeshComponent() { return myStaticMesh; }
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
void MoveRight(float Value);
void MoveForward(float Value);
void MouseLeft(float Value);
void MouseRight(float Value);
void MouseX(float Value);
void MouseY(float Value);
void MouseWheelAxis(float Value);
float VelocityRight;
float VelocityForward;
FVector Velocity;
FVector VelocityMouse;
FVector VelocityMouseForward;
float getMouseRight;
float getMouseLeft;
float getMouseX;
float getMouseY;
float getMouseWheelAxis;
float MouseMoveSpeed;
};
MyPawn.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyPawn.h"
#include "Components/StaticMeshComponent.h"
#include "Camera/CameraComponent.h"
// Sets default values
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;
RootComponent = CreateDefaultSubobject(TEXT("RootComponent"));
myStaticMesh = CreateDefaultSubobject(TEXT("myStaticMesh"));
myStaticMesh->SetupAttachment(GetRootComponent());
static ConstructorHelpers::FObjectFinderstaticMeshAsset(TEXT("StaticMesh'/Game/s_Models/test1.test1'"));
static ConstructorHelpers::FObjectFindermaterialAsset(TEXT("Material'/Game/s_Models/Materials/black.black'"));
if (staticMeshAsset.Succeeded() && materialAsset.Succeeded())
{
myStaticMesh->SetStaticMesh(staticMeshAsset.Object);
myStaticMesh->SetMaterial(0, materialAsset.Object);
myStaticMesh->SetWorldScale3D(FVector(1.0f));
}
myCamera = CreateDefaultSubobject(TEXT("myCamera"));
myCamera->SetupAttachment(GetStaticMeshComponent());
CameraLocation = FVector(-300.0f, 0.0f, 300.0f);
CameraRotation = FRotator(-45.0f, 0.0f, 0.0f);
myCamera->SetRelativeLocation(CameraLocation);
myCamera->SetRelativeRotation(CameraRotation);
AutoPossessPlayer = EAutoReceiveInput::Player0;
MaxSpeed = 100.0f;
VelocityRight = 0.0f;
VelocityForward = 0.0f;
Velocity = FVector(0.0f);
VelocityMouse = FVector(0.0f);
VelocityMouseForward = FVector(0.0f);
getMouseRight = 0.0f;
getMouseLeft = 0.0f;
getMouseX = 0.0f;
getMouseY = 0.0f;
getMouseWheelAxis = 0.0f;
MouseMoveSpeed = 0.0f;
}
// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyPawn::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
MouseMoveSpeed = -FMath::Clamp(myCamera->GetRelativeLocation().X * 0.02f, -1000.0f, -10.0f);
Velocity = RootComponent->GetRightVector() * VelocityRight + RootComponent->GetForwardVector() * VelocityForward;
if (getMouseLeft == 1)
{
Velocity = RootComponent->GetRightVector() * -getMouseX * MaxSpeed * MouseMoveSpeed + RootComponent->GetForwardVector() * -getMouseY * MaxSpeed * MouseMoveSpeed;
AddActorWorldOffset(Velocity * DeltaTime, true);
}
if (getMouseRight == 1)
{
FRotator PitchRotation = myCamera->GetComponentRotation();
PitchRotation.Pitch = FMath::Clamp(PitchRotation.Pitch += getMouseY, -80.0F, 0.0F);
myCamera->SetWorldRotation(PitchRotation);
FRotator YawRotation = RootComponent->GetComponentRotation();
YawRotation.Yaw = YawRotation.Yaw += getMouseX;
RootComponent->SetWorldRotation(YawRotation);
}
if (getMouseWheelAxis != 0)
{
VelocityMouseForward.X = getMouseWheelAxis * MaxSpeed * MouseMoveSpeed;
myCamera->AddLocalOffset(VelocityMouseForward * DeltaTime, true);
}
}
// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("s_MoveForward"), this, &AMyPawn::MoveForward);
PlayerInputComponent->BindAxis(TEXT("s_MoveRight"), this, &AMyPawn::MoveRight);
PlayerInputComponent->BindAxis(TEXT("s_MouseLeft"), this, &AMyPawn::MouseLeft);
PlayerInputComponent->BindAxis(TEXT("s_MouseRight"), this, &AMyPawn::MouseRight);
PlayerInputComponent->BindAxis(TEXT("s_MouseX"), this, &AMyPawn::MouseX);
PlayerInputComponent->BindAxis(TEXT("s_MouseY"), this, &AMyPawn::MouseY);
PlayerInputComponent->BindAxis(TEXT("s_MouseWheelAxis"), this, &AMyPawn::MouseWheelAxis);
}
void AMyPawn::MoveRight(float Value)
{
VelocityRight = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}
void AMyPawn::MoveForward(float Value)
{
VelocityForward = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}
void AMyPawn::MouseLeft(float Value)
{
getMouseLeft = Value;
}
void AMyPawn::MouseRight(float Value)
{
getMouseRight = Value;
}
void AMyPawn::MouseX(float Value)
{
getMouseX = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseY(float Value)
{
getMouseY = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseWheelAxis(float Value)
{
getMouseWheelAxis = FMath::Clamp(Value, -1.0f, 1.0f);
}
windows打包后,拖拽窗口分辨率比例不能改变,Project Settings->Project description->settings->should window preserve aspect ratio ->false;
开发模式
运行发布包后点击~键,可以对发布设置进行更改。
比如修改分辨率
窗口模式
r.setres 1920x1080w
全屏模式
r.setres 1920x1080f
void AMyPawn::MouseX(float Value)
{
getMouseX = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseY(float Value)
{
getMouseY = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseWheelAxis(float Value)
{
getMouseWheelAxis = FMath::Clamp(Value, -1.0f, 1.0f);
}
## 发布
#### 宽高比变化设置
windows打包后,拖拽窗口分辨率比例不能改变,Project Settings->Project description->settings->should window preserve [aspect](https://so.csdn.net/so/search?q=aspect&spm=1001.2101.3001.7020) ratio ->false;
#### 选择发布模式
##### **windows**
**开发模式**
运行发布包后点击~键,可以对发布设置进行更改。
比如修改分辨率
**窗口模式**
r.setres 1920x1080w
**全屏模式**
r.setres 1920x1080f