UE4----C++调用蓝图类生角色加入场景和用纯C++生成角色加入场景中

一、用纯C++生成角色加入场景中

c++创建蓝图类继承ACharacter

在构造函数中添加如下代码:

AXbNpcCharacter::AXbNpcCharacter()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	static ConstructorHelpers::FObjectFinder npcSkeletalMesh(TEXT("SkeletalMesh'/Game/Mannequin/Character/Mesh/SK_Mannequin.SK_Mannequin'"));
	static ConstructorHelpers::FObjectFinder npcAmin(TEXT("AnimBlueprint'/Game/Mannequin/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP'"));
	UAnimBlueprintGeneratedClass* AminClass = LoadObject(UAnimBlueprintGeneratedClass::StaticClass(),TEXT("AnimBlueprint'/Game/Mannequin/Animations/ThirdPerson_AnimBP.ThirdPerson_AnimBP'"));	
	m_pMeshComp= CreateDefaultSubobject(TEXT("NpcMesh"));
	m_pMeshComp->SetSkeletalMesh(npcSkeletalMesh.Object);
	m_pMeshComp->SetAnimationMode(EAnimationMode::AnimationBlueprint);
	UClass* ap= (UClass*)npcAmin.Object->GeneratedClass;
	m_pMeshComp->SetAnimInstanceClass(ap);
	m_pMeshComp->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName);
  //	RootComponent = m_pMeshComp;
	m_pMeshComp->AttachTo(RootComponent);
}
在当前控制角色PlayerCharacher添加代码

void AboostCharacter::addPlayers()
{
	AXbNpcCharacter * npc_p = NewObject();


    if (FindActor(npc_p->GetName()))
    {	
		//TODO
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("the npc is exist"));
	}
	else {
		AXbNpcCharacter * npc_2 = GetWorld()->SpawnActor(npc_p->GetActorClass(), FVector(300, 34, 300), FRotator(0, 0, 0));
		// 下面可以动态替换mesh网格
		//npc_2->GetMesh()->SetSkeletalMesh(mesh);
	}
   
}
头文件设置蓝图调用

UFUNCTION(BlueprintCallable, Category = "MYGAME")
void addPlayers();
然后在打开关卡蓝图,直接蓝图调用。


二、C++调用蓝图类生角色加入场景
新建蓝集成刚建好的C++ ACharacter

玩家控制的Character 构造函数中添加代码

static ConstructorHelpers::FObjectFinder XbNpc(TEXT("Blueprint'/Game/boost/BP/npc.npc'"));
	npc = (UClass*)XbNpc.Object->GeneratedClass;
修改addPlayers函数

void AboostCharacter::addPlayers()
{
    if (FindActor(npc->GetName()))
      {	
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("the npc is exist"));
      }
     else {
		GetWorld()->SpawnActor(npc); //添加第一个
		GetWorld()->SpawnActor(npc); //添加第二个
		GetWorld()->SpawnActor(npc);	//...
     }   
}




你可能感兴趣的:(UE4,c++)