如何建立互联网公司网站,html菜鸟教程导航栏,合水网站建设,小程序多用户商城系统一.总体思路#xff1a;
如果实时加载UE模型#xff0c;需要先将之前的模型删除。再生成出来#xff0c;放在根节点#xff0c;保持相对位置#xff0c;相对的俯仰角。
void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z)
{//m_weaponMap.Emp…一.总体思路
如果实时加载UE模型需要先将之前的模型删除。再生成出来放在根节点保持相对位置相对的俯仰角。
void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z)
{//m_weaponMap.Empty();//生成工厂if (m_weaponMap.Contains(ID)){AActorBase* ab CastAActorBase(*m_weaponMap.Find(ID));if (ab ! nullptr ab-IsValidLowLevel() !ab-IsPendingKill()){ab-Destroy();}m_weaponMap.Remove(ID);}ATargetFactory* TargetFactory GetWorld()-SpawnActorATargetFactory();//FString tmpWeaponPath UKismetSystemLibrary::GetProjectDirectory() Plugins/HMSCore/Saved/Config/ AG_300M .Json;FString tmpWeaponPath UKismetSystemLibrary::GetProjectDirectory() Plugins/HMSCore/Saved/Config/ m_WeaponType[Type] .Json;AActorBase* TargetActor TargetFactory-TargetSpawn(ETargetType::WEAPON_TYPE, tmpWeaponPath);TargetActor-SetID(ID);TargetActor-AttachToComponent(CastUSceneComponent(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor-SetActorRelativeLocation(FVector(X, Y, Z));//UE_LOG(LogTemp, Warning, TEXT(%f, %f , %f), it.PositionX, it.PositionY, it.PositionZ);TargetActor-SetActorRelativeRotation(FRotator(0, 0, 0));TargetActor-SetScale(FVector(1, 1, 1));m_weaponMap.Add(ID, TargetActor);TargetFactory-Destroyed;
}
二.管理Map
TMapint, UObject* m_weaponMap; //组件字典
首先看武器的Map里是否包含之前加载的武器模型。如果包含这个ID的武器。找到并拿到它销毁。然后在Map里移除这个指针。 if (m_weaponMap.Contains(ID)){AActorBase* ab CastAActorBase(*m_weaponMap.Find(ID));if (ab ! nullptr ab-IsValidLowLevel() !ab-IsPendingKill()){ab-Destroy();}m_weaponMap.Remove(ID);}
重新生成m_WeaponType在构造时初始化工厂然后通过工厂生成武器。 TMapint32, FString m_WeaponType; //武器字典2321F
ATargetFactory* TargetFactory GetWorld()-SpawnActorATargetFactory();
//FString tmpWeaponPath UKismetSystemLibrary::GetProjectDirectory() Plugins/HMSCore/Saved/Config/ AG_300M .Json;
FString tmpWeaponPath UKismetSystemLibrary::GetProjectDirectory() Plugins/HMSCore/Saved/Config/ m_WeaponType[Type] .Json;
AActorBase* TargetActor TargetFactory-TargetSpawn(ETargetType::WEAPON_TYPE, tmpWeaponPath);
武器生成后,就可以了然后销毁工厂。
设置ID,让它们绑定到组件上将根组件变为USceneComponet组件就有位置信息。
AttachToComponent(USeneComponnet,FAttachmentTransformRules::KeepRelativeTransform).
让后设置相对于根节点的相对位置。
TargetActor-SetID(ID);TargetActor-AttachToComponent(CastUSceneComponent(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor-SetActorRelativeLocation(FVector(X, Y, Z));//UE_LOG(LogTemp, Warning, TEXT(%f, %f , %f), it.PositionX, it.PositionY, it.PositionZ);TargetActor-SetActorRelativeRotation(FRotator(0, 0, 0));TargetActor-SetScale(FVector(1, 1, 1));m_weaponMap.Add(ID, TargetActor);TargetFactory-Destroyed;
如果想要不在跟组件上就使用如下代码。 int WeaponID FCString::Atoi(*it.NodeID);TargetActor-SetID(WeaponID);if (m_childComponentMap.Contains(it.ParentName))TargetActor-AttachToComponent(CastUSceneComponent(m_childComponentMap[it.ParentName]), FAttachmentTransformRules::KeepRelativeTransform);elseTargetActor-AttachToComponent(CastUSceneComponent(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor-SetActorRelativeLocation(FVector(it.PositionX, it.PositionY, it.PositionZ));UE_LOG(LogTemp, Warning, TEXT(%f, %f , %f), it.PositionX, it.PositionY, it.PositionZ);TargetActor-SetActorRelativeRotation(FRotator(it.RotationPitch, it.RotationYaw, it.RotationRoll));TargetActor-SetScale(FVector(it.ScaleX, it.ScaleY, it.ScaleZ));m_weaponMap.Add(WeaponID, TargetActor);
删除map,可以用for(auto itMap).逐个Destroy。再Reset重置。
void HMSTargetManager::RemoveTarget(int targetID)
{AActorBase* ab *m_TargetMap.Find(targetID);if (ab ! nullptr){ab-Destroy();}m_TargetMap.Remove(targetID);
}void HMSTargetManager::RemoveAllTarget()
{for (auto it:m_TargetMap){AActorBase* ab it.Value;if (ab ! nullptr){ab-Destroy();}}m_TargetMap.Reset();
}