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

妹でもわかるUnrealEngine4

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

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

コンポーネントとしてGameBehavierを追加する

UE4.13 ブループリント

youtu.be

妹「この動画も気になるんだよ。GameBehavier? とかいうの。なんかクラスにくっつけるだけで破壊出来るようになったりしてるでしょ。こういうのがやりたいんだよ」

「クラス側でやるとまずいの?」

妹「敵はそれでやってたんだけど、例えば落ちてるアイテムも破壊出来るようにしたいとか出てくるんだよ。そうかといって同じクラスから継承しようとすると、ActorとCharacterで違う場合に困るじゃん」

「全部Character……にすると、コリジョンがカプセル型しか使えない問題があるか」

妹「最初から全部計算してクラス継承させていくのも大変だし」

f:id:una_unagi:20161022224206p:plain

「ダメージを受けた時に破壊出来るようにするコンポーネントは、先日やったティックのイベントで起動してたやつと違って、カスタムイベントをバインドするタイプのコンポーネントになってる」

妹「TakeAnyDamageっていうのは、最初からあるやつだよね」

「ある。ノード一覧で"bind"を検索すると出てくるけど、ダメージ関係とかコリジョン関係とか、Actorクラスに標準システムが用意されてる」

妹「じゃあ爆発してるとか、点数のやつは? これもダメージに?」

「それはOnDestroyにバインドしてるはず。ダメージの方で破壊して、破壊された時点で別のイベントを実行してる。DamageでHPを減らしてDestroyする、その後OnDestroyにバインドしたイベントを実行する」

妹「たくさんコンポーネントがあったらどういう順番になるの? 爆発するやつと、点数のやつとか」

「その順番はどっちでもいいように作る必要がある。スコアと爆発はどっちが先でも問題ないから成り立ってる。順番が固定でないと困るのは、同じコンポーネントに入れてしまえば順番通りになる。片方しか使わない時はチェックボックスで設定とかで」

妹「いい感じのにバインド出来るとこがない場合は?」

コンポーネント側だけで出来るのは、カスタムイベントをバインドするか、ティックでやるかだけど、アクター側からコンポーネントを呼び出す方法も考えられる。例えばダメージ関連のイベントが無かったとしても、弾のアクターに何かに当たった時に特定のコンポーネントがくっついてないか探して、存在したらそのコンポーネントのイベントを呼び出すというのは出来る」

妹「でもそれだと結局弾のアクターはちゃんと継承してないと駄目だったりするのでは。弾じゃなくてハンマーだったりした時に」

「もちろんその場合は弾とハンマーで同じ仕組みを作る必要はあるけど、継承はしてなくてもいい。同じようにコンポーネントを探す仕組みがあれば動くはず」