今回はInvector3rdPersonControllerの使い方で困ったところやちょい詰まりしたところの解決策まとめ記事です。
今後も何か問題を解決するたびに随時更新していきたいと思います。
あと、需要があるかどうかイマイチわからないこともあるのでコメントやリアクション等もらえると嬉しいです。
▼敵AIが追いかけてこない
忘れないように自分向けQ&A
【invector third person controller】
・敵AIの索敵範囲に入っても追いかけてこないです!
→Layers To Detect を Player にしよう。
(未設定だとDefaultになっているので) pic.twitter.com/ImS5lWqxfi— NoSeams (@ozora_develop) May 6, 2020
敵AIの設定は色々と詰まりポイントですね。
これ以外に「NavMesh(ナビメッシュ)をベイクしていないとうまく動かない」というのもあるので、最初の頃は全然うまくいきませんでした。
残りは続きから↓
▼敵に銃弾が当たらない
忘れないように自分向けQ&A(2)
【invector third person controller】
・銃を撃っても敵に当たらない!
→Damage Layer を変更しましょう。 pic.twitter.com/t26JZVXvIM— NoSeams (@ozora_develop) May 8, 2020
これもとんだトラップですね。
defaultで敵に当たらない設定になってるってどういうこっちゃ。
ちなみに、レイヤー設定は敵キャラの子のオブジェクトの当たり判定にも影響があるみたいです。
※2020年9月7日追記↓
敵に弾が当たらない問題(2)の解決。InvectorTPS
プレイヤーを検知するためのコライダーが弾丸を遮ってた。
自分用メモ:Enemyに子のオブジェクトを付けた場合、その子のオブジェクトがダメージレイヤーの設定なら弾丸を遮り、ダメージレイヤー外のレイヤー設定なら弾丸は遮られず本体に命中する。 pic.twitter.com/IT5i2kJL52— NoSeams (@ozora_develop) September 7, 2020
今度は逆パターンです。
ざっくり説明すると、
・ダメージレイヤーに設定されているエネミーには攻撃が当たる
・1回目の失敗は、エネミー本体にダメージレイヤーの設定が入っていなかったから当たらなかった
・2回目の失敗は、逆に「エネミーに設定した子のオブジェクト」のコライダー(本来弾が当たってほしくないIs Trigger設定のセンサー)に弾丸が当たって本体に届かなかったこと。
→その理由として、また敵に攻撃が当たらんかったらヤダなと思い、ダメージレイヤーをEvrythingにしてしまったため、全てのレイヤーが弾を遮る設定になってしまった。
→そのため、本当に弾が当たってほしい「Enemy」などのレイヤーだけをダメージレイヤーに設定したことで解決。
▼敵が自分の攻撃でダメージを受ける
前にも同じことやってたので自分用のメモ。
Invector Third Person Controller の敵が自分の攻撃に当たってしまっていた問題。MELEE manager のattackのタグを設定すれば治る。
(敵本体の方に設定している。持たせている武器の方にはそのパラメータは存在しない。) pic.twitter.com/RMaa28JPgd— NoSeams (@ozora_develop) June 17, 2019
これもやりがち。defaultで自滅許可設定になっています。
しかも、おうちゲームジャム(2020年5月)の作品でも同じことをやっていて、Twitterをたどると2018年、2019年と同じことをしてました。
自分で自分の頭を叩き続けるオークのバグを見て一人で爆笑してましたが、ここまでくるとオークさんのことを笑えないですね。
tweetはすぐ流れちゃうので、大事なことはブログにまとめましょうね。
▼武器を切り替えた後に XWeaponTrail のエフェクトが出ない
これは他のアセットとの組み合わせ問題ですね。
状況としては、
・ゲーム開始時点で装備していた武器はXWeaponTrailのエフェクトが再生される
・一度他の武器に持ち替えた後、再度装備するとXWeaponTrailのエフェクトが出ない
ということ。
なのでevent機能から他のスクリプトに働きかけて有効化します。
イベントmanagerのコンポーネントは自由度が高いので結構使います。
例えばplaymakerのFSMに対して「send event」で指示を出したりもできますので、そこから複雑な挙動をさせたりも可能です。
▼マウスカーソルが出てきてしまう
自分用メモ。
invector third person controller と playmaker のアセットを組み合わせると、マウスカーソル非表示になるはずの設定でもカーソルが出現してしまって画面外に出てしまう問題。
どうやら、playmaker側の「PlayMakerGUI」というコンポーネントがControlを奪っていたのが原因だったらしい。 pic.twitter.com/OnCO3kiFdE— NoSeams (@ozora_develop) June 5, 2020
こちらも組み合わせ問題。
気が付いてみたら簡単なことでしたが、errorも何も出ないので気が付くまで時間がかかりました。
playmaker(コードを書かなくても様々な処理を実装できるアセット)を使っている方は要注意。
もしかしたら、さらに他のアセットと組み合わせた際にも同じことが起きるかも。
▼武器の持ち替えで位置が狂う
少しだけ進捗。攻撃と武器の切り替えができました。
失敗して手の甲から刀が生えてるみたいになってしまってます。武器ごとに位置を調整する方法を調査中。 #indiedev pic.twitter.com/i01fPU7SFu— NoSeams (@ozora_develop) May 24, 2020
これは一体どういうことかと言いますと、
・武器の持ち手の原点は「defaultHandler」というObjectの位置になる
・武器の角度もそれに準拠する
・しかし、銃と剣の角度は異なっている
・つまり、銃に合わせると剣の角度や位置がくるってしまう
・結果、剣を手に持つはずが手の甲から生えてきたりする
ということ。
なので、近接武器用のCustom handlerを追加する必要があるのでした。
手順↓
1、プレイヤーキャラの「ITEM MANAGER」を開く
2、default handlerの下にCustom handler を追加する
3、最後にItem list Editor から武器側の設定を開いて先ほどのCustom handler を指定する
これで完成。あとはCustom handler のオブジェクトをいじって位置や角度を調整すること。
ちなみに、handlerの位置や親にするボーンは自由に設置できるので、
応用すれば多分、肩から生えてる砲台とか足の先につけた仕込み刀とかもできたりするかも。
▼武器が壁や地面に弾かれてしまって使えない
自分用メモ。
invectorの Melee Combat武器モデルのヒットボックスのrecoilを外すと武器が壁などに弾かれなくなる。
モーションの都合で刀が壁などにめり込んで攻撃できなくなっていたので外した。 pic.twitter.com/9dDF7k9QKx— NoSeams (@ozora_develop) February 24, 2019
モーションや武器の大きさによっては深刻な問題ですね。
小柄なキャラが大きな武器を持ったり、洞窟や室内などのステージでは全く武器を振れないこともあるのでリコイルの設定を外しましょう。
▼Playerの子のObjectにColliderを設定すると親Objectに影響を及ぼす問題
やりたいこととして、
「Playerの子のObjectとつぃて浮遊するブレード武器を装備したい」と思った時、
そのまま子のObjectにBoxColliderを付けると、そこまで含めてPlayerの体の一部になってしまう。
具体的には、動画のように浮遊する子のObjectが壁や地面にぶつかるとPlayerが浮いてしまう。
なので、そちらをTriggerにすれば壁をすり抜けるが、そのままだとダメージオブジェクトとして敵にダメージが入らない。
それを解決するために、
上記の図のように、
Triggerイベントでダメージを与えるように設定しておくことで解決。
ブログ参考にさせていただいております。
最近Invectorを使い始めました。
ガチ鬼ごっこで、『回復アイテムは触れただけで勝手に取得して回復します。』
とありましたが、あれはアドオンなどであるものでしょうか?
または自作スクリプトでしょうか?
Healthの回復の仕方がInvectorを使う上で分からなかったもので
どのように処理されているか、質問させていただきました。
コメントありがとうございます、気が付くのが遅くなってしまってすみません!
例のアイテムはInvectorのアセットに最初から入っていたものです。
サンプルSceneに配置されている「health-Item」というprefabをそのまま使用しています。
デモシーンの格納場所↓
Invector-3rdPersonController>Basic Locomotion>DemoScenes>Invector_BasicLocomotion
prefabの構成としては、V pickup item (script)と、V health item (script)の二つで挙動を制御しているようでした。
上記scriptにて、Valueで回復量を設定し、Tag Filter で対象となるタグを指定すれば触れただけで勝手に回復するようになります。