当前位置: 首页 > news >正文

UE(C++API)

C++基础API:

Camera&SpringArm

UGameplayStatics::GetPlayerController(this, 0)获取当前游戏世界中第一个玩家的控制器。

GetPlayerController::GetViewTarget()获取玩家控制器的视角目标

APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);

SpringArm: 模拟了一个物理弹簧臂,将相机连接到角色的某个点上,使其能够平滑地跟随角色移动。

SetViewTarget() 立即设置到视口目标

SetViewTargetWithBlend()平滑过度到视口目标

->FieldOfView设置视口大小

->TargetArmLength弹簧臂长度

USpringArmComponent* SpringArm = GetComponent<USpringArmComponent>();  
if (SpringArm)  
{  SpringArm->SetTargetArmLength(100.0f);  SpringArm->SetViewTargetWithBlend(GetTarget(), 0.5f);  
}

创建组件,设置层级

Type* name = CreateDefaultSubobject<TYPE>(TEXT("名称")):动态创建和初始化Actor或组件

TSubobjectPtr<USceneComponent> MyComponent = CreateDefaultSubobject<USceneComponent>(TEXT("MyComponent"));

SetupAttachment(Parent, AttachmentRules, SocketName): 在两个组件之间建立父子关系。

->UpdatedComponent = RootComponent;与pawn关联(非scene component)

RootComponent = 每个Actor的根组件,所有其他组件都直接或间接附加到此组件上。

RootComponent = MyComponent;  

AttachToComponentParentAttachmentRulesSocketName将组件附加到另一个组件

->DetachFromComponent()从组件上分离。

MyComponent->AttachToComponent(ParentComponent, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, true), TEXT("SocketName"));

->SetHiddenInGame()设置组件是否在游戏中可见。

从资源管理器查找资产

ConstructorHelpers构造函数文件中:

static ConstructorHelpers::FObject||class……)Finder<type>name(TEXT(“Path“)); 用于从资源管理器查找并加载资产。

返回类型为TObjectPtr<T> 对象指针|| 模板类继承T:TSubclassOf<T>

static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshFinder(TEXT("StaticMesh'/Game/Meshes/MyMesh.MyMesh'"));  
if (MeshFinder.Succeeded())  
{  MyMeshComponent->SetStaticMesh(MeshFinder.Object);  
}
GameModeBase

DefaultPawnClass =  设置玩家使用的默认Pawn类别。

APawn

AutoPossessPlayer = EAutoReceiveInput::Player0; 控制哪个Pawn自动接受玩家控制。

bUseControllerRotationPitch = false;bUseControllerRotationYaw = false

bUseControllerRotationRoll = false;;控制玩家控制器旋转是否影响Pawn的旋转。

AddMovementInput(Direction, Strength): 添加移动输入。

ACharacter

GetCapsuleComponent(): 获取碰撞组件,通常用于角色。

GetCharacterMovement(): 获取控制角色移动的组件。

AActor

Tags.Add(FName("...")): 为Actor添加标签。

Destroy(): 销毁Actor。

Super::

BeginPlay()

TickComponent(DeltaTime, TickType, ThisTickFunction)

Tick(DeltaTime)

Destroyed()

RestartPlayer(AController*)

GetLifetimeReplicatedProps()函数负责复制你使用 Replicated 说明符指派的任何属性

UPawnMovementComponent

SafeMoveUpdated(): 安全地更新Pawn的位置。

SlideAlongSurface(): 处理沿表面的滑动。

FVector

Set(x, y, z): 设置向量的坐标。

ConsumeInputVector(): 接收玩家输入向量。

GetClampedToMaxSize(): 限制向量长度。

IsNearlyZero(): 检查向量是否接近零向量。

FVector::Dist(): 计算两个向量之间的距离。

FVector Start = FVector(0, 0, 0);  
FVector End = FVector(100, 100, 100);  
float Distance = FVector::Dist(Start, End);  
FVector LerpResult = FMath::Lerp(Start, End, 0.5f);
FVector Clamped = FMath::Clamp(LerpResult, Start, End);
Input

SetupPlayerInputComponent(Pawn中接受输入设置的函数)->BindAction||->BindAxis绑定(”name“,this,自定义func)绑定输入动作和轴。

GetActor……继承AActor

GetActorLocation,GetActorRotation,SetActorLocation,SetActorRotationGetActorForwardVectorGetActorUpVectorGetActorRightVector,GetActorScale3D

bPressedJump: 跳跃输入标志。

GET

GetActorEyesViewPoint获取camera变换

Vector()返回单位向量

UWorld

GetWorld()获取世界

->GetAuthGameMode()获取游戏模式

计时器

GetWorldTimerManager()从演员世界获取计时器实例

GetWorldTimerManager().SetTimer设置一个计时器调用本地函数。

:参数:

FTimerHandle计时器句柄id(可以通过它来取消、暂停或检查定时器的状态),本地obj(this)被调用方法的对象,本地函数(定时器到期时将调用的方法)定时器持续的时间,单位为秒,inbLoop 为 true 时,以速率间隔持续触发;为 false 时,只触发一次。inFirstDelay 计时器循环的间隔时间

……)

.ClearTimer句柄id清理计时器

FTimerHandle MyTimerHandle;  
GetWorldTimerManager().SetTimer(MyTimerHandle, this, &AMyClass::MyTimerFunction, 2.0f, true);  void AMyClass::MyTimerFunction()  
{  }  GetWorldTimerManager().ClearTimer(MyTimerHandle);
ProjectileMovementComponent发射物移动组件

->InitialLifeSpan = 发射物生命周期

碰撞事件 & 重叠事件 &伤害事件

启用碰撞:

spaceComponent->SetCollisionProfileNameTEXT(“例如OverlapAllDynamic”))为碰撞组件指定一个预定义的碰撞配置文件

spaceComponent->SetNotifyRigidBodyCollision(bool)与其他刚体发生碰撞时触发相关的事件

spaceComponent->SetGenerateOverlapEvents(bool)与其他组件重叠时触发重叠事件

//

注意在BeginPlay动态绑定

(类指针-》委托-》动态绑定(参数))

spaceComponent碰撞体->OnComponentHit(当击中物体时).AddDynamic(this,&class::funcname);

spaceComponent->OnComponentBeginOverlap.AddDynamic(this,&class::funcname);

spaceComponent->OnComponentEndOverlap.AddDynamic(this,&class::funcname)

AActor* GetOwner()获取此Actor组件的所有者->OnTakeAnyDamage委托:受到任何损坏时.AddDynamic(this,&class::funcname);

UGameplayStatics::ApplyDamage(Target, 100.0f, GetInstigatorController(), this, UDamageType::StaticClass());

注意动态绑定

ApplyDamage及参数DamagedActor伤害目标BaseDamage基础伤害值EventInstigatorGetInstigatorController()DamageCauserthisDamageTypeClassGenericDamageType))应用伤害

->OnTakeAnyDamage相互呼应,

ApplyPointDamageDamagedActor伤害目标BaseDamage基础伤害值,NormalImpulseFHitResult撞击点 GetInstigator()->ControllerDamageCauserthisDamageTypeClassDamageType

//OnComponentHit的回调函数参数

HitComponent,OtherActor被击中的实体,OtherComponent被击中的实体的组件,NormalImpulse,Hit受击点

//OnComponentBeginOverlap的回调函数参数

(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)

MyCollisionComponent->SetCollisionProfileName(TEXT("OverlapAllDynamic"));  
MyCollisionComponent->OnComponentHit.AddDynamic(this, &AMyClass::OnHit);  
MyCollisionComponent->OnComponentBeginOverlap.AddDynamic(this, &AMyClass::OnBeginOverlap);  void AMyClass::OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, FVector NormalImpulse, const FHitResult& Hit)  
{  }  void AMyClass::OnBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)  
{  }
cast

TYpe name =  Cast<UTYpe>(被转换obj)类型转换为UType,如果name != nullptr,则转换成功

controller控制器

GetControlRotation()获取玩家控制器的当前控制旋转,返回FR'o'tator

再生:

class type name = UWorld->SpawnActor<class type>()再生actor

HUD(详见Canvas.h文件)

Canvas->ClipXClipY当前画布右下角

FMath

平滑过度:Lerp<type>( 最小 A, 最大 B, 混合值 Alpha )根据alpha线性插值

限制:Clamp<type>(变量,最小 A, 最大 B)最小值和最大值之间

FMath::Cos弧度),FMath::Sin(),FMath::Tan()

FMath::DegreesToRadians度数转弧度

FMath::VInterpTo(Current,Target,DeltaTime,speed)在speed的时间平滑(缩放,旋转,位移)到target值,返回FVector当前时刻的值

FMath::Max()返回max值

matrix矩阵

GetUnitAxis()获取该矩阵的单位长度

从……获取

GetAllActorsOfClassGetWorld()获取世界上下文,Acalss::StaticClass()引用数组负责存储要查找的 Actor 类型

会遍历当前世界中的所有 Actor,并将所有与指定类匹配的 Actor 添加到一个数组中。

GetAllActorsOfClassWithTagGetWorld()世界上下文,Acalss::StaticClass(),FName("……"),引用数组负责存储要查找的 Actor 类型

SpawnEmitterAtLocation(ContextObjectUParticleSystemLocationRotationEPSCPoolMethod::AutoRelease自动释放)从指定位置生成特效


http://www.mrgr.cn/news/28931.html

相关文章:

  • 安全见闻-泷羽sec课程笔记
  • 使用python-Spark使用的场景案例具体代码分析
  • FASTLIO2建图学习笔记
  • 开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序
  • 搜维尔科技:Manus VR数据手套集成,遥操作五指灵巧手解决方案
  • css-50 Projects in 50 Days(4)
  • [Redis] Redis中的set和zset类型
  • Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞
  • 代码随想录:动态规划4-5
  • 安徽省建设工程企业资质管理新动向
  • 阿里OSS对象存储服务,实现图片上传回显
  • 2019-2023(CSP-J)选择题真题解析
  • 【Android】使用Room数据库解决本地持久化
  • 每日一题——第九十八题
  • 【 html+css 绚丽Loading 】000051 方寸轮回矩
  • java138-异常处理_java 138错误
  • 2022高教社杯全国大学生数学建模竞赛C题 问题二(1) Python代码
  • 2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码
  • linux 操作系统下的 declare 命令介绍和使用案例
  • 【零散技术】详解Odoo17邮件发送(一)
  • 【乐企】基础版本开票代码接口声明
  • 【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名
  • vue MVC设计模式与MVVM设计模式
  • 牛客周赛 Round 60(下)
  • C++:初始化列表
  • nginx服务器安装和部署代理