场景组件
从这篇文章开始,我们要实现物体的抓取功能。
我们先放置待抓取的物体,用于后续使用。我们在内容侧滑菜单中选取 SM_Gargoyle_Statue 素材,是一个石像鬼雕塑,将其放在角落。由于角落光线太暗,我们放置一个聚光灯。
调节雕塑的时候,会发现一个问题,雕塑是单面的。为此,我们选取 SM_Dirt_Mound_A 素材,是一块泥巴,调整大小和位置,将其放置在雕塑底部。具体的添加操作需要把 SM_Dirt_Mound_A 放置在雕塑的 StaticMeshComponent 下面。最终的效果如图 1 所示。

如果我们想要抓取这个物体,肯定和人物相关、和场景视角相关。可以基于场景组件实现这个功能。
和创建 Actor 组件类似,我们选择 工具 - 新建C++类,然后选择 场景组件,此处将其命名为 Grabber。接着将创建的 Grabber 场景组件添加到 BP_Player 下面。具体是在 First Person Camera Component 下面。
为了验证添加的场景组件是否生效,我们可以如代码清单 1 所示,在 TickComponent 中添加旋转信息的打印。
- // Called every frame
- void UGrabber::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
- {
- Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
- FRotator Rotation = GetComponentRotation();
- FString RotationString = Rotation.ToCompactString();
- UE_LOG(LogTemp, Display, TEXT("Grabber Rotation: %s"), *RotationString);
- }
运行游戏,调整人物视角,如图 2 所示,可以看到日志打印相对应的旋转信息。
