Unreal Engine C++ Developer: Learn C++ and Make Video Games | Udemy UE4.25 Simple Shooterで自分なりに理解したこと。00100 ~SkeletalMesh銃のスポーン~

このチュートリアルは長いので先にやりたいものをやることにした

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です