前書き
遠距離攻撃を実装した敵キャラクターがいたのですがどうにもプレイヤーの中心に向かって攻撃をしているように見えない事象が起こりました。直し方は単純ですが意外な落とし穴になりそうなのでこちらでまとめておこうと思います。
どんなことが起こったのか?
その時の事象が以下になります。敵キャラクターがプレイヤーに向かって攻撃(弓矢)をしているのですが、プレイヤーの頭上を狙っておりプレイヤーの中心に当たらないような位置に攻撃をしています。
そのときのAI BrainのTargetを見てみると正しくプレイヤーを指していました。そのためAI Brainは問題なさそうです。
今回の原因
サクッと今回の原因は2つあり
- 武器の位置を設定するオブジェクトWeaponAttachmentをキャラクターモデル配下の子オブジェクトにしていなかった
- 「WeaponAttachment」が0,0,0ではなく、0,1,0に設定された
ことでうまく攻撃位置が設定されていませんでした。
WeaponAttachmentの位置を0,0,0に設定したときの動画が以下になります。ちゃんとプレイヤーの中心に向かって攻撃していることが分かります。
そもそも、今回、「WeaponAttachment」の位置が0,1,0にしていた理由としては
武器の位置を変更したかった
という意図があって値を変えていたのですが、その結果、最終的な攻撃を当てる位置がずれてしまっていました。
武器の位置を設定する方法
武器の位置を設定する方法としては以下の2つがあるかなと思っています。
- キャラクターモデルの配下に子オブジェクトとしてWeaponAttachmentを設定する
- WeaponクラスにあるWeaponAttachmentOffsetで位置を調整する
正当法としては1.でキャラクターごとにちゃんとWeaponAttachmentを設定してあげるのがいいと思います。
# 自分の場合、ほとんど同じキャラクターサイズなのでWeaponAttachmentOffsetで位置調整していました。
子オブジェクトとしてWeaponAttachmentを設定する
上記のようにキャラクターモデル配下にWeaponAttachmentを設定するとどうなるか見ていきましょう。赤丸の部分がWeaponAttachment_1で設定した箇所になります。
その時の動画が以下になります。
敵キャラクターが左、右と振り返ると同じようにWeaponAttachment_1の位置も変わっていることが分かりますね。CharacterOrientation2Dコンポーネントで振り向きなどを設定しているとキャラクターモデルの振り向きと連動して子オブジェクトにあるWeaponAttachment_1の位置も変わってくれるようになります。
WeaponクラスにあるWeaponAttachmentOffsetで位置を調整する
WeaponAttachmentOffsetを変えてみるとどのように攻撃位置が変わるのかを見ていきましょう。黄色の線が交わるところ(緑色の矢印の始点)が攻撃位置になります。また、WeaponAttachmentは0,0,0で設定しています。
オフセットが0,0,0の場合
オフセットが1,0,0の場合
オフセットが0,1,0の場合
オフセットが0,1,0の場合
WeaponAttachmentの位置を基準にWeaponAttachmentOffsetでオフセットした分だけ攻撃位置が変わっていることが分かりますね。
攻撃位置の変えかたは2通りありますが、基本的にはWeaponAttachmentで武器を持つ位置を決めて置き、ちょっとした位置の調整でWeaponAttachmentOffsetを使用するのがいいかなと思います。
まとめ
今回は敵の攻撃がプレイヤーの中心にならない事象と攻撃位置の設定について解説しました。
遠距離攻撃を実装する際、敵キャラクターの攻撃位置がプレイヤーの中心を外れてしまう問題は、武器のアタッチメント設定やオフセット位置が適切でない場合に発生することがあります。今回のケースでは以下のポイントが重要でした。
- WeaponAttachmentの設定
- キャラクターモデルの配下にWeaponAttachmentを子オブジェクトとして設定する
- WeaponAttachmentの位置をキャラクターの基準となる位置にする
- WeaponAttachmentOffsetの設定
- 微調整が必要な場合に、WeaponAttachmentOffsetを使って攻撃位置を調整する
もしも「なんだか攻撃する位置がおかしいな・・・」っと思ったらアタッチメント位置やオフセットの設定を確認してみましょう。次回から遠距離攻撃を実装する際は、ぜひ今回のポイントを参考にしてみてください!
コメント