我正在尝试使用 C++ 而不是蓝图来创建抓钩的视觉方面,但我一直在尝试渲染它。据我所知,这应该正确设置。这是我的代码:
// CharacterConstructor:
ADemoCharacter() {
...
Cable = CreateDefaultSubobject<UCableComponent>(TEXT("Cable"));
Cable->SetupAttachment(FP_MuzzleLocation);
Cable->SetAttachEndTo(this, RootComponent->GetDefaultSceneRootVariableName());
Cable->NumSegments = 1;
Cable->EndLocation = FVector(0.0f, 0.0f, 0.0f);
...
}
void OnGrapple() {
...
// Previous code does SphereTrace and finds a hit, the following code runs only if a hit is successfully found:
if (hit) {
FVector_NetQuantize impactPoint = outHit.ImpactPoint;
FVector HookPointPosition = FVector(impactPoint.X, impactPoint.Y, impactPoint.Z);
FRotator HookPointRotation = FRotator(0.0f, 0.0f, 0.0f);
FActorSpawnParameters SpawnParams;
AActor* HookActor = GetWorld()->SpawnActor<AActor>(HookPoint, HookPointPosition, HookPointRotation, SpawnParams);
Cable->SetAttachEndTo(HookActor, FName(TEXT("None")), FName(TEXT("None")));
}
...
}
在这个例子中,HookPoint 是一个没有功能的默认角色,它基本上只是用来存储第二个电缆连接点的位置。
当我运行上面的代码并触发抓钩时,我在中编码的物理会触发,但 CableComponent 没有出现在屏幕上。我是否错误地附加了端点?
我已经尝试记录 Cable->EndLocation 的位置,它似乎指向正确的位置。但是我找不到检查 CableComponent 是否仍然连接到 FP_MuzzleLocation 的方法,所以我怀疑第一个 SetAttachEndTo 可能没有正确设置初始附件,因此当电缆产生时,两个附件末端都位于挂钩点。