キャラクターの動きを活用する方法

はじめに

ここまで、仕掛けというクラスを活用する方法についてお話をしてきました。

あわせて読みたい
Verse入門 Verse入門レベルアップしながらVerseを学ぼう

例えば、ボタンの仕掛け(クラス名button_device)とアイテムスポナーの仕掛け(クラス名item_spawner_device)を連携させる方法などについて学習してきたわけです。

仕掛け以外のクラスも存在します。

さらに、クラスではないですが、クラスのように特別な機能をもつインターフェイスと呼ばれるものをこれから良く見かけるようになっていきます。

その他、いろいろなものが存在します。

それらの使いかたを一緒に見ていきましょう。

キャラクターの動き

フォートナイトのキャラクターを考えます。

私たちが操作するキャラクターは、たくさんの動きをします。しゃがむ、ジャンプなどなど・・・

このようなフォートナイトのキャラクターの動きを情報として束ねているのが、fort_character interfaceと呼ばれるものです。冒頭でもお話しましたが、インターフェイスとはクラスではありませんが、特殊な能力をもつものです。例えば、fort_character interfaceであれば、フォートナイトのキャラクターに関する動きの能力などについて取り扱います。そこから能力を引用することで、新しい効果を生み出すことができるわけです。

例えば、プレイヤーがジャンプするとアイテムスポナーからアイテムがスポーンされる、という新しい効果をつくることができます。

いままでは、ミューテーターゾーンの仕掛けやアイテムスポナーの仕掛けなどの仕掛けしか取り扱ってきませんでした。さらに、キャラクターの動きについての情報を手に入れて連携させることで、さらなる新しい効果を生み出すことができます。

fort_character interfaceのつかいかた【考え方編】

独特な考え方になりますが、verseでfort_character interfaceを使うには、それがある場所まで行かなければなりません。

行く方法としては、まずは、私たちがつくつゲーム体験の情報を束ねるPlayspaceという場所にまずはアクセスします。

つづいて、とても多くの情報があるPlayspaceの中でも、私たちプレイヤーの情報すべてが束なっているPlayersという場所にアクセスします。

多くのプレイヤーの中でも1人のプレイヤーに注目したくて、Playerという場所にアクセスします。

Playerの中まで来ると、fort_characterを使うことができるようになります。

fort_character interfaceのつかいかた【スクリプト編】

※完全に理解する必要はなく、流れとかをまずは掴むことができれば大丈夫です。

Playspaceへアクセスした情報をfort_playspaceに保存します。Playspaceと名付けます。

OnBegin<override>()<suspends>:void=
        Playspace: fort_playspace = GetPlayspace()

これでプレイヤー達の情報へアクセスできるようになります。

つづいて、Playspace(fort_playspace)の中にいるプレイヤー全ての情報を手に入れて、配列playerに保存します。AllPlayersと名付けます。

    OnBegin<override>()<suspends>:void=
        Playspace: fort_playspace = GetPlayspace()
        AllPlayers: []player = Playspace.GetPlayers()

プレイヤーの情報にアクセスできましたが、特定のプレイヤーの情報にアクセスします。

AllPlayers[0]は、先頭位置に変数があればその値を返し、その戻り値で定数FirstPlayerが初期化されます。

    OnBegin<override>()<suspends>:void=
        Playspace: fort_playspace = GetPlayspace()
        AllPlayers: []player = Playspace.GetPlayers()
        if (FirstPlayer : player = AllPlayers[0]):

FirstPlayerにフォートナイトのキャラクターがあるかどうかをチェックしています。

    OnBegin<override>()<suspends>:void=
        Playspace: fort_playspace = GetPlayspace()
        AllPlayers: []player = Playspace.GetPlayers()
        if (FirstPlayer : player = AllPlayers[0]):
            if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):

これでfort_characterにアクセスできました。

fort_character interfaceのつかいかた【使ってみる編】

fort_character interfaceには仕様書があります。以前に仕掛けのクラス名を探すときに見ていたようなページです。

Epic Developer Community

いろいろありますが、FunctionsのJumpedEventとCrouchedEventを使ってみたいと思います。

以下のスクリプトをコピー&ペーストしてセッションを開始してみてください。

using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }


hello_world_device := class(creative_device):



    @editable
    Item : item_spawner_device = item_spawner_device{}


    OnBegin<override>()<suspends>:void=
        Playspace: fort_playspace = GetPlayspace()
        AllPlayers: []player = Playspace.GetPlayers()
        if (FirstPlayer : player = AllPlayers[0]):
            if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
                FortniteCharacter.JumpedEvent().Subscribe(OnJumpedEvent)
                FortniteCharacter.CrouchedEvent().Subscribe(OnCrouchedEvent)

    OnJumpedEvent(Agent:fort_character):void=
        Print("ジャンプをするとアイテムがスポーンされる")
        Item.SpawnItem()

    OnCrouchedEvent(InAgent:tuple(fort_character,logic)):void=
        Print("しゃがむとアイテムがサイクルする")
        Item.CycleToNextItem()

以下の動画のような結果になると思います。

まとめ

今回はfort_character interfaceについて学習しました。

キャラクターの動きと、いままで学習してきた仕掛けをverseで連携させてみました。

fort_character interfaceだけでなく、いろいろなインターフェイスやクラスなどが存在します。

これからも続々とご紹介していけたらと思います。

それでは。今回はここまでです。

お疲れさまでした。

ご質問やご感想はお気軽にコメント欄まで!

コメントする