現象
会話シーンのデモをテスト的に作っていました。(会話シーンの作り方は本旨でないので扱いません)
話しかける操作を実行した際に、会話のダイアログを出しWidgetに対して操作ができるように、かつキャラクターは操作できないようにしないといけないので、Widgetを出した後にSet Input Mode UI Onlyノードを実行していました。
これで、話しかけた際にキャラクター操作はできず、会話Widgetに対して操作ができるようになるはず!でした。ところが、以下の動画をみてください。
ちょっとわかりにくいかもしれませんが、「Wキー(前進)を押した状態で話しかけると、会話中、会話後もキャラクターが前進し続ける」という現象が起こってしまいました。(もちろん、WASDは問いません)
会話後は、Set Input Game Modeノードを実行していますので、他のキー操作も効くようになります。
なんにせよ困った。
原因
以下は現象から察するに恐らくこのような事が起こってるんだろう、という考察です。
Set Input Mode UI Onlyノードが実行された時点でWキーを押していると、会話中にWキーを「離した」という入力が伝搬しない。
するとその結果、Set Input Mode Gameを実行し操作を戻した際もWキーを押していないにもかかわらず「離した」イベントが発火していない状態のため、依然として入力中と判定される。
多分。
解決方法
色々試しましたが、唯一今のところうまく行ったのが、「Set Input Mode UI Onlyを使うのを諦めて、Set Input Mode Game And UIで代用する」というやり方です。
直前でDisable Inputを挟むことによって、キャラクターコントローラへの入力だけ無効にしています。これがないと、会話シーン中でも移動や視点操作ができてしまうので必要です。
これで何故かうまくいきます。
youtu.be ↑わかりにくいですが、Wキー押しっぱなしで話しかけてもちゃんと止まっています。
できればSet Input Mode UI Onlyを使いたい・・
先ほどの解決策は不本意で、できればSet Input Mode UI Onlyを使いたいです。Gameモードの操作を受け付ける必要は全くないので。
しかし、
- 直前にDisaple Inputを挟む
- 直前にSet Ignore Move Inputを挟む
などなどでは、うまくいきませんでした。Set Input Mode UI Only実行前に、インプットアクションの入力値をリセットできればいいんですが・・。というか勝手にして欲しいものですが。
誰か知ってる方いたら教えて下さい( ^)o(^ )