如何再actor中获取USkeletalMeshComponent
时间: 2024-02-28 20:54:15 浏览: 29
在UE4中,要在`Actor`中获取`USkeletalMeshComponent`,可以使用以下代码:
```cpp
// 获取Actor的USkeletalMeshComponent
USkeletalMeshComponent* SkeletalMeshComponent = FindComponentByClass<USkeletalMeshComponent>();
```
在上面的代码中,`FindComponentByClass`函数被用于查找`USkeletalMeshComponent`。如果`USkeletalMeshComponent`不存在于该`Actor`中,它将返回`NULL`。
注意,你需要确保调用该代码的`Actor`已经拥有`USkeletalMeshComponent`,否则该代码将返回`NULL`。你可以在`Actor`的构造函数中添加该组件,或者在蓝图中添加该组件并设置它的属性。
相关问题
蓝图 获取 场景中的所有actor
您可以使用以下代码获取场景中的所有actor:
```
//获取当前场景
UWorld* World = GetWorld();
//获取场景中的所有Actor
TArray<AActor*> Actors;
UGameplayStatics::GetAllActorsOfClass(World, AActor::StaticClass(), Actors);
```
以上代码将在`Actors`数组中返回场景中的所有Actor。
USkeletalMeshComponent中没有SetBoneRotation
非常抱歉,我的回答有误。在USkeletalMeshComponent中确实没有SetBoneRotation函数来直接设置骨骼四元数。但是,你可以通过以下方式间接地设置骨骼四元数:
1. 获取_SkeletalMeshComponent对象。
2. 获取想要设置的骨骼的指针或名称。
3. 使用指针或名称获取USkeletalMeshComponent中的FTransform对象。
4. 更新FTransform对象中的Rotation属性,即可更新骨骼的旋转。
5. 调用USkeletalMeshComponent的SetBoneTransform函数,将骨骼指针或名称和FTransform对象作为参数传递。
下面是一个示例代码:
```cpp
USkeletalMeshComponent* SkeletalMeshComp = /* 获取_SkeletalMeshComponent对象 */;
int BoneIndex = /* 获取想要设置的骨骼的索引 */;
FName BoneName = /* 获取想要设置的骨骼的名称 */;
FQuat NewRotation = /* 创建一个FQuat类型的四元数对象,用于存储新的骨骼旋转信息 */;
// 通过索引获取骨骼指针
FCompactPoseBoneIndex CompactPoseBoneIndex(BoneIndex);
const FTransform& BoneTransform = SkeletalMeshComp->GetBoneTransform(CompactPoseBoneIndex);
FTransform NewBoneTransform = BoneTransform;
// 通过名称获取骨骼指针
if (BoneName != NAME_None)
{
FTransform BoneTransform = SkeletalMeshComp->GetBoneTransformByName(BoneName);
NewBoneTransform = BoneTransform;
}
// 更新FTransform对象的Rotation属性
NewBoneTransform.SetRotation(NewRotation);
// 设置新的骨骼变换
SkeletalMeshComp->SetBoneTransform(CompactPoseBoneIndex, NewBoneTransform, EBoneSpaces::WorldSpace);
```
在这个示例中,我们使用了EBoneSpaces::WorldSpace参数来指定骨骼旋转信息是在世界空间中指定的。你也可以使用EBoneSpaces::ComponentSpace或EBoneSpaces::ActorSpace参数来指定在组件空间或者actor空间中指定骨骼旋转信息。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)