0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UEFN / VerseAdvent Calendar 2023

Day 17

【UEFN】Verseのインターフェース使ってみた

Posted at

背景

最近は設定の多いタイクーンゲームの制作を始めていてバグがところどころ散見され始めました。設計がごちゃごちゃで一つの部分を修正するのにそれ以外のところまで修正しなきゃならない状況が多々ありました。そこでしっかりと整理しそれぞれの機能の責任を分散する必要があると感じました。その第一歩?であるインターフェースの書き方を理解していきたいと思います。

やること

  • Verseのcreative_deviceクラスにインターフェースを実装
  • そのクラスの関数をインターフェース経由で呼んでみる

という感じになります。

全体コード

sample_interface

sample_interface := interface():
    GetScore() : int
    GetScore2() : int

これが本日の主役となります。いつものクラスの部分をインターフェースに変えて宣言していますね。中身は関数名とその引数のみを書いておく感じになります。(処理は記述しません。)

sample_model_device

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

sample_model_device := class(creative_device,sample_interface):

    var score : int =10000
    var score2 : int =99999

    GetScore<override>() : int =
        Print("Model GetScore:{score}")
        return score

    GetScore2<override>() : int =
        Print("Model GetScore2:{score2}")
        return score2

インターフェースを実装しているクラスになります。
クラスの実装は一つだけですが、インターフェースの実装は複数できるようになっています。

インターフェースが持っている関数は<override>を付けて確実に実装しましょう!

sample_model_controller_device

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }


sample_model_controller_device := class(creative_device):

    @editable
    Model: sample_model_device = sample_model_device{}

    OnBegin<override>()<suspends>:void=
        InterfaceHandle(Model)

    InterfaceHandle(model : sample_interface):void=
        score := model.GetScore()
        score2 := model.GetScore2()

        Print("Controller Score: {score}")
        Print("Controller Score2: {score2}")

ここではsample_model_deviceを取得してInterfaceHandleではインターフェス経由で関数を呼ばせています。

実行結果

image.png

まとめ

インターフェースを実装させインターフェース経由で呼び出すときにもしそのクラスの内部処理の修正したとしても呼び出し側の影響が少なくなるというところがよいですよね。ただチームで制作している場合にはVerseを触るメンバーがしっかりとそれについて理解していないと大変なことになります。使う場所使わない場所をしっかりと読み取っていきたいです。

余談

この度UEFN/Verseに関するオープンコミュニティサーバーを建ち上げました。ちょっとでも興味があれば奮ってご参加くださいませ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?