0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UEFN / VerseAdvent Calendar 2023

Day 7

【UEFN】Verseでスコアマネージャーを触ってみる

Posted at

背景

UEFNでなにかゲームを作り始めようと考えていた時に何かスコアを使って他のプレイヤーと競争ができるようなものが作ろうと思っていました。当時はVerseに触れておらずGUI上で設定しなければならずまた、様々なデバイスを絡めてやらないといけないというところで手につけることができませんでした。
最近Verseを書いていて使い方のイメージが付いたので書き記していきたいと思います。

score_manager_deviceクラスでできること

image.png
image.png

  • トリガーが最大回数押されたときにシグナルを受け取る
  • スコアが追加されたときにシグナルを受け取る(プレイヤーごとにできる)
  • アクティブ非アクティブに切り替える
  • スコアの状態をリセットに戻す(プレイヤーごとにできる)
  • スコアを獲得させる
  • もらえるスコアの量を1増やす(プレイヤーごとにできる)
  • もらえるスコアの量を1減らす(プレイヤーごとにできる)
  • もらえるスコアの量を数字を指定して変更する(プレイヤーごとにできる)
  • 現在貰えるスコアの量をスコアに追加する
  • 現在のスコアを取得(プレイヤーごとにできる)

実装してみる

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

score_trigger_device := class(creative_device):

    @editable
    Trigger:trigger_device=trigger_device{}
    @editable
    ScoreManager:score_manager_device=score_manager_device{}
    @editable
    ScoreText:billboard_device=billboard_device{}
    @editable
    EventText:int=10

    ScoreMessage<localizes>(msg:string):message="{msg}"

    OnBegin<override>()<suspends>:void=
        SetTriggerText(0)
        # トリガーの最大回数を指定して変更する
        Trigger.SetMaxTriggerCount(10)
        # もらえるスコアの量を数字を指定して変更する
        ScoreManager.SetScoreAward(10)
        Trigger.TriggeredEvent.Subscribe(OnIncrementTrigger)
        # スコアが追加されたときにシグナルを受け取る
        ScoreManager.ScoreOutputEvent.Subscribe(OnScoreOutput)
        # トリガーが最大回数押されたときにシグナルを受け取る
        ScoreManager.MaxTriggersEvent.Subscribe(OnMaxTriggers)
    
    OnIncrementTrigger(QAgent:?agent):void=
        if (Agnet:=QAgent?):
            # 現在貰えるスコアの量をスコアに追加する
            ScoreManager.Activate(Agnet)
            # もらえるスコアの量を1増やす
            ScoreManager.Increment(Agnet)
            SetTriggerText(ScoreManager.GetCurrentScore(Agnet))

    OnDecrementTrigger(QAgent:?agent):void=
        if (Agnet:=QAgent?):
            # 現在貰えるスコアの量をスコアに追加する
            ScoreManager.Activate(Agnet)
            # もらえるスコアの量を1減らす
            ScoreManager.Decrement(Agnet)
            # もらえるスコアの量を取得
            Award:=ScoreManager.GetScoreAward()
            Print("Award : {Award}")
            SetTriggerText(ScoreManager.GetCurrentScore(Agnet))
    
    OnScoreOutput(Agent:agent):void=
        Print("Score Output")

    OnMaxTriggers(QAgent:agent):void=
        Print("Max Triggers Reached")

    SetTriggerText(value:int):void=
        ScoreText.SetText(ScoreMessage("Now Socre : {value}"))

    OnEnableAndDisable():void=
        # スコアの追加を有効にする
        ScoreManager.Enable()
        # スコアの追加を無効にする
        ScoreManager.Disable()

プレイヤーごとに細かく設定できそうですね。

トリガーが最大回数押されたときにシグナルを受け取るについて

        # トリガーの最大回数を指定して変更する
        Trigger.SetMaxTriggerCount(10)

        # トリガーが最大回数押されたときにシグナルを受け取る
        ScoreManager.MaxTriggersEvent.Subscribe(OnMaxTriggers)

トリガーの最大回数を上記のように指定して、指定した回数に達したときにMaxTriggersEventが反応します。

まとめ

UEFNによくあるタイクーンゲームもこのようにVerseで扱えれば簡単にできそうですよね。
個人的にスコアマネージャー関連はGUIで行うよりVerseで扱った方が使いやすいなと思いました。

余談

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

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?