[UE4]为Character创建插槽(socket)并绑定另一个actor

为Character创建插槽(socket)并绑定另一个actor(比如一个武器),打开角色骨骼后找到要创建的位置,右键add socket


 

创建好以后修改socket的name和transform:


 

 

然后就可以用C++代码绑定武器到这个socket,通过参数SocketName指定:


if (!UnitSelector)
{
	UnitSelector = GetWorld()->SpawnActor<AActor>(UnitSelectorClass);
}
if (UnitSelector)
{
	UnitSelector->AttachRootComponentToActor(SelectedHero, FName("LeftHandSocket"));
}

 

 
如果不传递SocketName,绑定的位置不太确定,可以进游戏看效果再设置SpawnActor()函数的transform参数:

/**
	 * Spawn Actors with g
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在UE4创建一个Actor并实现截图保存功能: 1. 创建一个继承自Actor的C++类,例如命名为MyActor。 2. 在MyActor.h中添加以下头文件: ```c++ #include "Engine/TextureRenderTarget2D.h" #include "Engine/Texture2D.h" ``` 3. 声明一个TextureRenderTarget2D成员变量和一个Texture2D成员变量: ```c++ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Screenshot") UTextureRenderTarget2D* ScreenshotRenderTarget; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Screenshot") UTexture2D* ScreenshotTexture; ``` 4. 在MyActor.cpp中重写BeginPlay()函数,创建RenderTarget和Texture: ```c++ void AMyActor::BeginPlay() { Super::BeginPlay(); ScreenshotRenderTarget = UGameplayStatics::CreateRenderTarget2D(GetWorld(), 1920, 1080); ScreenshotTexture = UTexture2D::CreateTransient(1920, 1080); } ``` 5. 在MyActor.cpp中添加一个截图函数: ```c++ void AMyActor::TakeScreenshot() { if (ScreenshotRenderTarget != nullptr && ScreenshotTexture != nullptr) { FTextureRenderTargetResource* RenderTargetResource = ScreenshotRenderTarget->GameThread_GetRenderTargetResource(); FReadSurfaceDataFlags ReadPixelFlags(RCM_UNorm); ReadPixelFlags.SetLinearToGamma(true); TArray<FColor> OutBMP; RHIReadSurfaceData(RenderTargetResource->GetRenderTargetTexture(), FIntRect(0, 0, ScreenshotRenderTarget->SizeX, ScreenshotRenderTarget->SizeY), OutBMP, ReadPixelFlags); ScreenshotTexture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE); uint8* TextureData = (uint8*)ScreenshotTexture->PlatformData->Mips[0].BulkData.Realloc(OutBMP.Num() * 4); for (int32 i = 0; i < OutBMP.Num(); i++) { TextureData[i * 4 + 0] = OutBMP[i].B; TextureData[i * 4 + 1] = OutBMP[i].G; TextureData[i * 4 + 2] = OutBMP[i].R; TextureData[i * 4 + 3] = OutBMP[i].A; } ScreenshotTexture->PlatformData->Mips[0].BulkData.Unlock(); ScreenshotTexture->UpdateResource(); FString FileName = FPaths::ProjectSavedDir() + TEXT("Screenshots/MyScreenshot.png"); FFileHelper::SaveArrayToFile(ScreenshotTexture->PlatformData->Mips[0].BulkData, *FileName); } } ``` 6. 在MyActor.cpp中添加一个函数,用于在按下某个按键时调用截图函数: ```c++ void AMyActor::CaptureScreenshot() { TakeScreenshot(); } ``` 7. 在MyActor的Blueprint中添加一个InputComponent,将某个按键与CaptureScreenshot函数绑定即可。 完成以上步骤后,你就可以在UE4创建一个Actor,并在其中实现截图保存功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值