网站dedecms数据库,手机做网站的网站,百度免费推广怎么做,可以做app的网站1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数#xff0c;它会立即标记 Actor 为销毁状态#xff0c;并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程#xff0c;调用 Destroy() 后#xff0c;Actor 立即进入销毁过程。具体…1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数它会立即标记 Actor 为销毁状态并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程调用 Destroy() 后Actor 立即进入销毁过程。具体来说它会开始执行 BeginDestroy() 和 EndDestroy()并且会销毁 Actor 本身及其所有组件 Destroyed()函数是虚函数(或者是事件函数)它在 Actor 被销毁后被自动调用。你可以在 Destroyed() 中执行一些销毁后的清理工作Destroyed() 是一个回调函数当 Actor 销毁过程完成时通常是调用 Destroy() 后会被自动调用。可以重写Destoryed()函数完成Actor销毁后的一些操作 2.Actor在什么时候会被完全销毁 1.调用 Destroy() 时Unreal Engine 不会立即释放 Actor 的内存而是
标记 Actor 为待销毁状态 (bPendingKill true)。移除 Actor 及其组件停止它的 Tick 和物理模拟。触发 EndPlay() 事件如果 Actor 还在 BeginPlay() 之后。触发 Destroyed() 事件让子类可以在销毁前执行额外逻辑。Actor 从世界中移除停止 Tick 和物理模拟 2.调用Destroyed()
允许 Actor 在销毁前执行自定义逻辑 3.UE中的GC机制 当前阶段会释放掉Actor的内存。
2.移动Actor 1.使用MoveComponent()函数
void ASpawnActor::SetActorLocation()
{UStaticMeshComponent* RootComp CastUStaticMeshComponent(GetRootComponent());if (RootComp){// 定义你想要移动的偏移量FVector Offset(0.f, 0.f, -10.f); // 向Z轴移动10单位// 使用MoveComponent来平滑移动组件RootComp-MoveComponent(Offset, FRotator::ZeroRotator, true);//UE_LOG(LogTemp, Warning, TEXT(move ment component));}
} 我当前的RootComponent是UStaticMeshComponent类型的如果使用SetupAttachment附加到原本的RootComponent也可以实现MoveCompoennt是USceneComponent类中的成员函数只要继承自这个类都可以调用MoveCompoennt函数 2.创建一个UMoveMentComponent的组件 创建C类ActorMovementComponent继承自MoveMentComponent在,Actor中定义指针在Actor的构造中初始化这个指针
UPROPERTY(VisibleAnywhere, Category Move);
UActorMovementComponent* ActorMovementComponent;ActorMovementComponent CreateDefaultSubobjectUActorMovementComponent(TEXT(Move));
ActorMovementComponent类中实现(TickComponent是虚函数重写一份记得
void UActorMovementComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{//一定记得要写这行Super::TickComponent(DeltaTime, TickType, ThisTickFunction);// 速度和加速度可以从Actor 中设置也可以默认// 更新速度应用加速度FVelocity Acceleration * DeltaTime;// 限制最大速度if (FVelocity.Size() MaxSpeed){FVelocity FVelocity.GetSafeNormal() * MaxSpeed;}// 更新 Actor 位置FVector NewLocation GetOwner()-GetActorLocation() (FVelocity * DeltaTime);GetOwner()-SetActorLocation(NewLocation);// 重置加速度如果希望每帧都控制加速度可以在外部控制Acceleration FVector::ZeroVector;
}
3.制作一个简单的空气墙 1.创建一个UBoxComponent设置SetVisibility(false)将可视性为变成false设置碰撞类型
SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
SetCollisionResponseToAllChannels(ECR_Block); // 使得所有物体都会被阻挡
SetCollisionResponseToChannel(ECollisionChannel::ECC_Camera,ECollisionResponse::ECR_Ignore);2.创建对应蓝图拖拽到场景中调整大小。