UE 学习笔记-04

简介: UE 学习笔记

前言:每日记录自己学习UE的心得和体会,小弟才疏学浅,如有错误的地方,欢迎大佬们指正,感谢~

image.png

蓝图案例

射线检测

使用的重要节点

Convert Mouse Location To World Space(鼠标屏幕坐标转世界坐标)

Line Trace By Channel(射线检测)

界面操作

Add to Viewport 加载到界面


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6UnQF0s-1681438840906)(null)]


UI图片修改

ui面板上的笔刷或者样式等等是可以修改图片的,可以通过蓝图SetBrush或者SetStyle


通过Tag读取模型

给模型设置tag后,可以通过tag获取

材质

按住3,点击面板可以创建颜色节点

模型

C++


相机控制脚本

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<USceneComponent>(TEXT("RootComponent"));

myStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("myStaticMesh"));

myStaticMesh->SetupAttachment(GetRootComponent());

static ConstructorHelpers::FObjectFinder<UStaticMesh>staticMeshAsset(TEXT("StaticMesh'/Game/s_Models/test1.test1'"));

static ConstructorHelpers::FObjectFinder<UMaterialInterface>materialAsset(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<UCameraComponent>(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);

}


相关文章
|
10月前
|
编解码 缓存 定位技术
《3D开放世界地形开发:动态LOD与智能融合的轻量化实战路径》
本文围绕宋代山水背景开放世界3D地形开发,针对“细节呈现”与“加载性能”的矛盾,分享“动态LOD分层+地形智能融合”的轻量化方案。作者按视距将地形分近、中、远三层,配差异化建模与纹理,加10米过渡带解决断层,PC端加载时间缩至5秒;通过凹陷槽、过渡纹理等优化地形与植被、水体、道具的融合;从模型压缩、纹理优化、流式加载降资源消耗,移动端内存占比大减;依PC、移动、主机特性做适配,各平台帧率达标率超95%。
616 5
|
9月前
|
自然语言处理 数据可视化 小程序
2025零代码平台终极对比:免费试用+系统搭建+扩展能力一网打尽
孙睿团队指出,企业数字化面临技术人力不足、开发成本高等难题,零代码平台应运而生。本文通俗解析2025年五大主流平台:LynxAI、速建云、轻栈、数流平台、万能盒,从适用场景、优缺点到实战对比,帮你选对工具,快速落地业务系统,降本增效。
|
11月前
|
数据采集 运维 供应链
数据资产是什么?一文讲清数据资产入表全流程!
2024年1月1日起,企业数据资源可有条件计入资产,标志着数据从资源迈向资产新阶段。本文详解数据资产入表的定义、常见误区及四大核心步骤,涵盖确权、价值证明、成本归集与后续管理,剖析其战略价值与现实挑战,助力企业实现数据资产合规入表,释放数据价值。
数据资产是什么?一文讲清数据资产入表全流程!
|
JSON Java Maven
SpringBoot整合gRPC踩坑回顾
本文回顾了作者在引入gRPC过程中遇到的挑战与解决方案。首先,由于SpringBoot 3.0暂不支持相关starter,导致初期预研不足,项目无法启动。接着,在编写代码时因对微服务架构理解不清,出现多个设计错误。最后,解决依赖冲突问题,特别是`protobuf-java-util`与现有依赖的冲突,通过Maven Helper插件有效排查并修复问题。此次经历加深了作者对微服务架构的理解,并为后续项目拆分打下基础。
840 2
|
消息中间件 存储 数据采集
4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)
本文介绍了基于状态机驱动的MQTT客户端快速接入OneNet平台的实现方法,通过4步完成模块设计。文章以开源项目`Sparrow`为基础,引入`OneNetMqtt`业务模块,采用事件驱动模型和双层状态机设计,实现设备状态管理、消息处理及定时任务等功能。模块分为三层:`OneNetManager`负责核心逻辑,`OneNetDevice`管理设备信息,`OneNetDriver`处理Socket与MQTT通信。验证结果显示设备连接、数据上报及下线功能正常,稳定性良好。该设计简化了复杂条件判断,增强了系统灵活性与可扩展性,适用于实际项目参考。文末提供源码获取方式,助力读者实践与学习。
854 116
|
传感器 存储 Ubuntu
一步一步学会蓝牙开发之 ESP-IDF GATT Server 示例解析
学习蓝牙的 GATT 开发,我们从示例代码,一段代码一段代码进行详细分析说明
3538 2
一步一步学会蓝牙开发之 ESP-IDF GATT Server 示例解析
|
机器学习/深度学习 缓存 人工智能
一文了解DeepSeek及应用场景
本文详细介绍了DeepSeek及其应用场景,涵盖了大模型的发展历程、基本原理和分类(通用与推理模型)。文章分析了DeepSeek的具体特性、性能优势、低成本训练与调用特点,以及其技术路线(如MoE、MLA架构),并与竞品进行了对比。此外,还探讨了DeepSeek在金融风控等领域的应用前景。
一文了解DeepSeek及应用场景
|
人工智能 前端开发 API
一种基于通义千问prompt辅助+Qwen2.5-coder-32b+Bolt.new+v0+Cursor的无代码对话网站构建方法
本文介绍了当前大模型应用的趋势,从单纯追求参数量转向注重实际应用效果与效率,重点探讨了结合大模型的开发工具,如Bolt.new、v0、Cursor等,如何形成完整的AI工具链,助力开发者高效构建、优化和部署应用。通过实例演示了从项目创建、前端优化到后端代码改写的全过程,强调了提示词设计的重要性,并推荐了适用于不同场景的工具组合方案。
|
SQL 弹性计算 安全
阿里云服务器租用价格:包年包月收费标准与最新活动价格参考
本文为大家分享阿里云服务器包年包月收费标准,云服务器最新活动价格,以及后续费挂载数据盘、设置密码和安全组等操作教程,以供参考。
|
机器学习/深度学习 人工智能 自然语言处理
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章

热门文章

最新文章