このチュートリアルは長いので先にやりたいものをやることにした
Simple Shooter をやれればいいので、さきにやってみた。UE4.25が必要だ。
Pythonは実務レベルだけどUEC++はあまちゃんです。まちがいもあるかも。。。
勉強したこと
1,あらかじめ”Gun”というクラスをUEエディタでC++クラスのActorとして作成しておく。
Gun.hにはAGun
class SIMPLESHOOTERCP2_API AGun : public AActor
{
~省略~
}
ここでAGunというアクターのサブクラスを作成したことになる
2,BP_Gunというブループリントを作成する。
3,BP_Gunの親クラスの設定をGunにする。画像参照
■Gun持たせたいキャラクターの.hで
クラス自体 とAGun型の変数を宣言
UnrealEngineで作ったサブクラスの参照を持ちたいときは
class AGun;//AGunというクラスをつかいますよ宣言
//UE用プロパティをデフォルトの時だけ編集する
//TClassType型を型安全性で渡すことができるテンプレート
//AGun型のクラス自体を宣言
UPROPERTY(EditDefaultOnly)
TSubclassOf<AGun> GunClass
//銃の実際のインスタンスを指していないので、これはポインタにはなりません。この変数で
//取得しているのは、クラス自体です。
//UE用のプロパティ宣言
//AGun型のUEのスポーン用インスタンスの参照を持ちたいときはポインタ
UPROPERTY()
AGun* Gun;//AGun型の変数を宣言
■Gun持たせたいキャラクターの.cppで インスタンス化するときこんな感じ
//AGunクラスのGun変数にワールドのSpawnActorメソッドにAGun型とクラス自体を渡す
Gun = GetWorld()->SpawnActor<AGun>(GunClass);
そんなこんなで今回のもってる銃を隠して持たせるコードはこう。
//AGunクラスのGun変数にワールドクラスのSpawnActorメソッドにAGun型とクラスを渡す
Gun = GetWorld()->SpawnActor<AGun>(GunClass);//銃をワールドに配置
//ボーン名からSkinMeshを隠します
GetMesh()->HideBoneByName(TEXT("weapon_r"),EPhysBodyOp::PBO_None );
//MeshのSocket名の場所に相対的な位置をキープしてで配置します。
Gun->AttachToComponent(GetMesh(), FAttachmentTransformRules::KeepRelativeTransform, TEXT("weaponSocket"));
//オーナーの設定これを使用して、後で所有するキャラクターへの参照を取得できます。
Gun->SetOwner(this);
すばらしい参考
[UE4] C++で動的にアクターを生成(スポーン)する方法で一番実用的だった方法https://qiita.com/Kuroyanagi96/items/7849dfaed83fc8df5741