妹、知らないうちに新しい型を作っていた
妹「2Dリフト型ってナニ?」
「ナニと言われましても」
妹「昨日の説明にさらっと出てきたんだけど、よく考えるとそんな型聞いた事ない」
「あなたが作ってた型ですよ」
妹「えー! 作ってないぞー」
「たぶんブループリントを作る時に、2Dリフトって名前付けて保存したと思うんですが」
妹「した」
「その時出来ました」
妹「そんなバカな……」
「こういう感じで、新しいブループリントを作ると新しいクラスが出来て、新しいクラスが出来たってことは新しい型が出来ちゃってるというわけで」
妹「そういわれてもなあ……」
「とりあえず右上の一覧にある、"2Dリフト"と"2Dリフト2"は、どっちも"2Dリフト"のブループリントを使って作られているアクター、つまり2Dリフト型のインスタンス」
妹「インスタンスというのもよくわからないんだけど」
「クラスを設計図として、それで作られた実体というか。クラスの設計に基いてメモリ上に確保されたものというか。アクターだったらアクターのインスタンスだし、マテリアルだったらマテリアルのインスタンスだし」
妹「??? うーん、インスタンス? が、クラスを参照してるってこと?」
「参照とは違う。クラスを設計図を元に作るから関係はあるし、ブループリントに関しては同じのを使いまわしてるけど。でもXYZの座標とか、マテリアルの設定とか、全部別々のデータとしてメモリ上に存在してるから、参照とは区別される」
妹「じゃあ参照じゃなくてなんと言うんだ?」
「○○型のインスタンスを作る…とか、このインスタンスは○○型だ…とか、そんな感じで言うんだけど」
妹「そのインスタンスはいつ作るんだ?」
「エディタでレベル上に配置してあるアクターなら、レベルが読み込まれた時。設定したマテリアルとかも、まずインスタンスを作って、その参照を各アクターに設定する。発射する弾みたいなやつは発射する時に作られる」
妹「うーん、そしたら2Dリフト型の変数というのは? ブループリントの中に出てきたやつ。水色のピンだったから、オブジェクト リファレンス型?」
「こんなかんじで、オブジェクト リファレンスに含まれてる。2Dリフト型のアクターをドラッグしてレベルブループリントの上に置くとか、2Dリフト型のアクターの中で"自分自身の参照を取得"ノードを作ると作れる」
妹「自分自身の参照を取得?」
「C++で言うところのthisなんだけど、ブループリントではselfって書いてある」
妹「またノードの見た目と一覧の日本語名が違うやつかよ」
「リフトを所定の位置に動かして色を変える……みたいな関数を作る時に使う。引数にスプライトだけを渡すと色は変えられるけどリフトの位置が変えられないから、リフトのデータをまるごと関数側に渡す。参照だから関数で新しい場所を設定するとそれが反映される」
妹「じゃあリフトの絵を入れた台スプライトというのも、台スプライト型になってるのか?」
「それは普通のスプライト。オブジェクトリファレンスのPaper Sprite Component型」
妹「なんで違うの?」
「台スプライト用に新しいクラスを作ってないというか、ブループリントを作ってないというか。絵だったりパラメータだったりが違うだけでクラスは同じだから」
妹「うーん、うーん……今のレベルでは習得できなさそうだから、心の片隅にしまっておこう」