アセットから取得したMeshデータ(Sword)にコリジョンを付与することはできたのですが、接触判定時に識別するためのタグ的なものを追加できません。
やはり、ブループリントクラスで作成し、<Actor - Tags>に設定するぐらいしか方法はないでしょうか。
何をしたいかによって対処方法が変わりますが
まず特定の物に対して当たり判定自体をしたくない場合はコリジョンの設定を見直す必要があります。(コリジョンプリセット)
当たり判定はとるがタグなどの識別できるもので処理を分岐させたい場合はUE4にデフォルトであるGameplayTagがあるのでそれを使って判別する方法があります。
剣の用途についてですが、対戦プレイヤーを攻撃した場合にのみ、攻撃を受けた側のプレイヤーのHPを減らす処理を追加予定です。
GameplayTagを確認してみましたが、Actorクラスを継承している必要がありそうなため、添付画像のようにStaticMeshとしてプレイヤーに装備させることができません。
BPクラス同士を連結させる方法があればGameplayTagで問題解決できそうですので、調査してみます。
対戦プレイヤーのみ当たり判定を行えばよいのでコリジョン設定を適切に行うほうが良いです。(対戦プレイヤー以外で当たり判定を行う必要はないので)
また設計上、Actorクラスを継承した装備品クラスを作成してプレイヤーと武器を分離させた方が良いです。
理由としてはいろいろな武器を装備できるように拡張しやすくするためと
大規模開発だといろいろな人が作業をするので分離させておくことでファイルの競合が起きにくくするなどのメリットがありますでゲーム開始時に武器を生成してプレイヤーの右手にアタッチさせれば問題ないかと思います。
理解が浅くて申し訳ないのですが、要約するとこういうことでしょうか。
①Actorクラスを継承した「剣オブジェクト」を生成し、コリジョンを設定。
②Characterのコンストラクタあたりのタイミングで「剣オブジェクト」をアタッチする。
⇒ http://monsho.blog63.fc2.com/blog-entry-132.html 上記URLで記載されているBP処理をC++で実装する感じでしょうか。
想像していたよりも処理が複雑なため制作のヒントになりそうな情報を頂けるとありがたいです。
また、この場合の懸念として、現在キャラクターに実装しているアニメーションのみで問題なく「剣オブジェクト」を振ることは可能でしょうか。
アクターをアタッチする方法がまだ判明していないためご質問させていただきました。
②Characterのコンストラクタあたりのタイミングで「剣オブジェクト」をアタッチする。
認識としてはそれであっています。
タイミングとしては装備するタイミングが良いと思いますがキャラクターのBeginPlayでいいかと。
GameModeはあくまでゲームの進行管理を担うものですので、そこで生成を行うのは設計上よろしくないです。
アニメーションに関しては武器ごとに変わると思いますので、武器側に再生したいMontageアニメーションを変数などで保持してキャラが攻撃するイベントが来たら現在装備している武器からMontageアニメを取得してそれを再生するようにするといいかなと思います。
アタッチに関してはリンク先の処理をBPでやる形でもいいと思いますが、C++でやっても問題ないです。