5/14更新分
こんばんは。今週は流行に乗ってゼルダの伝説 ブレスオブザワイルドを始めました。あまりに完成度の高いゲームをやると楽しさより怖さのほうがデカくなりますが、このゲームはそれでした。今リンクを貼るために公式サイトに行ったら見たら2017年とか書いてあって我が目を疑いました。
年貢
今週分の年貢です。
実装
C++でUMGを実装するときに知っていると便利なこと
ライフサイクルメソッドはNativeXXXを継承して実装する
UUserWidgetクラスを継承したWidgetを実装したい場合を考えます。Blueprintだったら最初から用意されている Event Construct や Event Pre Construct を実装したい場合どうすれば良いでしょうか?
UUserWidgetには Construct() や PreConstruct() があるのでこれを継承すれば良さそうですが実際はうまくいきません(何でかは分かりません)。それとは別に NativeConstruct() や NativePreConstruct() があるのでこれを継承して実装しましょう。
WorldContextはGetWorld()で取れる
UMGに限りませんが、継承したNativeConstruct()内であるなどの理由によって関数の引数でWorldContextを取得することができない場合があります。なにをやっているか全く理解していませんがGetWorld()を渡すとWorldContextが取れます。
IsDesignTime() でゲーム内かどうかを判断できる
Pre Construct() はエディタ上でWidgetが生成された場合でも呼ばれるので、エディタ上かゲーム内かを判断したい場合があります。それをやる関数がこれです。
meta = (BindWidget) と meta = (BindWidgetAnim)
あるwidgetが必ず特定の名前の子widgetやanimationを持っていることを表現するためにこれらのUPROPERTYが便利です。使用例:
protected:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (BindWidget))
class UImage *Thumbnail;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (BindWidget))
class UButton *OpenButton;
UPROPERTY(Transient, BlueprintReadOnly, meta = (BindWidgetAnim))
TObjectPtr<UWidgetAnimation> Spread;
振り返りと次回
今週は完成に向けて仮データを埋めたりしていました。この作業をやった結果ゲームロジックの進捗に対して絵や音楽の進捗がカスすぎることがわかりました。
来週からは絵を仕上げていきたいと思います。
では来週もよろしくお願いします。お元気で。