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;
AttachToComponent(Parent,AttachmentRules,SocketName)将组件附加到另一个组件
->DetachFromComponent()从组件上分离。
MyComponent->AttachToComponent(ParentComponent, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, true), TEXT("SocketName"));
->SetHiddenInGame()设置组件是否在游戏中可见。
从资源管理器查找资产
ConstructorHelpers构造函数文件中:
static ConstructorHelpers::F(Object||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,SetActorRotation,GetActorForwardVector,GetActorUpVector,GetActorRightVector,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->SetCollisionProfileName(TEXT(“例如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基础伤害值,EventInstigator(GetInstigatorController()),DamageCauser(this),DamageTypeClass(GenericDamageType))应用伤害
和->OnTakeAnyDamage相互呼应,
ApplyPointDamage(DamagedActor伤害目标,BaseDamage基础伤害值,NormalImpulse,FHitResult撞击点 GetInstigator()->Controller,DamageCauser(this),DamageTypeClass(DamageType))
//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->ClipX,ClipY当前画布右下角
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()获取该矩阵的单位长度
从……获取
GetAllActorsOfClass(GetWorld()获取世界上下文,Acalss::StaticClass(),引用数组负责存储)要查找的 Actor 类型)
会遍历当前世界中的所有 Actor,并将所有与指定类匹配的 Actor 添加到一个数组中。
GetAllActorsOfClassWithTag(GetWorld()世界上下文,Acalss::StaticClass(),FName("……"),引用数组负责存储)要查找的 Actor 类型)
SpawnEmitterAtLocation(ContextObject,UParticleSystem,Location,Rotation,EPSCPoolMethod::AutoRelease自动释放)从指定位置生成特效