妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

複数のPawnが同じ入力イベントを受け取ることはできない(Actorならできる)

「AnswerHubの質問に答えてて気づいたんだけど、複数のポーン(Pawn)で入力を受け取るっていうのが出来ないっぽい」

妹「あれ? 昔そういうのやってなかったっけ……」

「それは全部複数のActorが入力を受け取る方法だったんだよ。Pawnではなくて

imoue.hatenablog.com

imoue.hatenablog.com

「今までやって上手くいってたのは、対象のPawnやCharacterが1つしかない場合だけだった。PawnだとAutoReceiveInput設定も、EnableIn
putノードも効かない

妹「え、でもPawnっていうのは、Actorクラスを継承してるんだから、PawnもActorの一種なんじゃないの?

「まあそうなんだけど、でも継承してるってことで確実なのは、親クラスと同じパラメータを持っているってとこまでで、それが同じパラメータが同じ動作をするとは限らないんだよ。動作を上書きできるから」

妹「詐欺なのでは」

「極端な場合だと、どのパラメータに何を入れても何の意味のクラスだって作れる。わかりにくいだけだから普通はやらないけど」

f:id:una_unagi:20171014224400p:plain

「Pawnの場合、AutoPossessPlayerで設定するか、EnableInputの代わりにPossessノードで設定すると、入力イベントのノードが動くようになる。あとPlayerStartからスポーンされた場合も」

imoue.hatenablog.com

「ただ、あるポーンを有効にすると、他のポーンでは無効になるから、同時に1つしか操作できない」

妹「なんで1個だけなんだろ?」

「Possessっていうのは所有って意味の英語で、プレイヤーが所有できるポーンは1つという風に決まってるらしい。GetPlayerPawnもそういう前提だし」

妹「GetPlayerPawnじゃないけど、ただ操作できるだけのPawnだったら問題はないのでは?」

「ややこしくなるし、不必要だから禁止してるんだと思う。複数のPawnを操作するにしても、操作用のブループリントをPawnに書く必要はないし」

妹「意味ないんだったら、AutoReceiveInputの設定項目もなくしてくれればわかりやすいのに……」

「それをやると”親クラスと同じパラメータを持っている”じゃなくなるからね。キャストの互換性がなくなってしまう。エディタ上では見えなくしたり、実行時に何らかのエラーを出してくれる仕組みがあればありがたいとこだけど」