複数のPawnが同じ入力イベントを受け取ることはできない(Actorならできる)
「AnswerHubの質問に答えてて気づいたんだけど、複数のポーン(Pawn)で入力を受け取るっていうのが出来ないっぽい」
妹「あれ? 昔そういうのやってなかったっけ……」
「それは全部複数のActorが入力を受け取る方法だったんだよ。Pawnではなくて」
「今までやって上手くいってたのは、対象のPawnやCharacterが1つしかない場合だけだった。PawnだとAutoReceiveInput設定も、EnableIn
putノードも効かない」
妹「え、でもPawnっていうのは、Actorクラスを継承してるんだから、PawnもActorの一種なんじゃないの?」
「まあそうなんだけど、でも継承してるってことで確実なのは、親クラスと同じパラメータを持っているってとこまでで、それが同じパラメータが同じ動作をするとは限らないんだよ。動作を上書きできるから」
妹「詐欺なのでは」
「極端な場合だと、どのパラメータに何を入れても何の意味のクラスだって作れる。わかりにくいだけだから普通はやらないけど」
「Pawnの場合、AutoPossessPlayerで設定するか、EnableInputの代わりにPossessノードで設定すると、入力イベントのノードが動くようになる。あとPlayerStartからスポーンされた場合も」
「ただ、あるポーンを有効にすると、他のポーンでは無効になるから、同時に1つしか操作できない」
妹「なんで1個だけなんだろ?」
「Possessっていうのは所有って意味の英語で、プレイヤーが所有できるポーンは1つという風に決まってるらしい。GetPlayerPawnもそういう前提だし」
妹「GetPlayerPawnじゃないけど、ただ操作できるだけのPawnだったら問題はないのでは?」
「ややこしくなるし、不必要だから禁止してるんだと思う。複数のPawnを操作するにしても、操作用のブループリントをPawnに書く必要はないし」
妹「意味ないんだったら、AutoReceiveInputの設定項目もなくしてくれればわかりやすいのに……」
「それをやると”親クラスと同じパラメータを持っている”じゃなくなるからね。キャストの互換性がなくなってしまう。エディタ上では見えなくしたり、実行時に何らかのエラーを出してくれる仕組みがあればありがたいとこだけど」