読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

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

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

Selfノードはそのクラスではなく個別のインスタンスを取得する

妹「EndOverlapが思ったように動いてない気がするんだけど、どうやって調べたらいいんだろうか?」

「普通にブレークポイントを置くか、PrintStringで調べるかすればいいのでは?」

妹「ブレークポイントだと動きが全部とまっちゃってわかりにくいし、PrintStringだとたくさんあるアクターのどれが反応してるのかわからないよ」

「区別出来ないんだったら、SelfからNameを取ってきて、それをPrintしたらいいのでは?」

妹「え……Self? Selfで自分の名前をPrintしても、結局どれも同じのをPrintするだけのような」

「自分の名前だから全部別になると思うんだけど……」

妹「あれー? Selfってそういう物なの?」

f:id:una_unagi:20150919231048p:plain

「例えばこういう風にDisplayNameをPrintStringすれば」

f:id:una_unagi:20150919231523p:plain

「こういう風にアウトライナに表示されてる名前が出てくる。1個1個違う名前だから、どのアクターで起きたイベントなのか区別できる」

妹「そういう物だったのか。てっきりブループリントそのものだから、全部同じになるのかと思ってた」

「自分自身のブループリントクラスじゃなくてインスタンスだから。むしろクラスは同じだけど中身が違うから必要なノードというか。C++でいうthisポインタだけど、同じ用途でselfと書く言語もあるから、ブループリントではそっちの書き方を採用したんだと思う。というかこれ知らなかったら、めちゃくちゃ苦労したのでは?」

妹「特にそれで苦労してたつもりはなかったけど、そういうのはできないという前提で考えてたから、なんか色々損してた気はする」

「Selfは普段から使ってるはずなんだけど省略できる事が多い。普通に変数のノードをドラッグ&ドロップしてGETノード作るのも、Selfノードから引っ張ってきたGETノードも、やってることは同じ。ピンに何も設定してないとSelf扱いになるノードもある。そのアクターが持ってる変数だけど、普通の方法では上手くノードが作れない時は、Selfノードから引っ張るとたいてい出てくる。あと自分自身への参照を変数にSETしたい時とか」

妹「Self重要だったんだな……」