【UEFN】Verse言語の構造体について徹底解説【初心者向け】

目次

構造体とは

公式ドキュメントではこのように説明されています。

Struct (構造体) は structure の略で、関連する複数の 変数 をグループ化する方法の 1 つです。さまざまま をはじめとする変数は、すべてグループ化することができます。

https://dev.epicgames.com/documentation/ja-jp/uefn/struct-in-verse

構造体は型の一種であるということに注意が必要です。

構造体の使い方である

定義の仕方

構造体の定義の構文は以下のようになります。


構造体名 := struct:
変数名 : 型 = 値
変数名 : 型 = 値
 :

インスタンス化の方法

インスタンス化の構文は以下はのようになります。

インスタンス名 : = 構造体名{変数名 := 値, 変数名 := 値, … }

アクセス方法

アクセスの構文は以下のようになります。

インスタンス名.変数名

具体例

構造体は自分で定義する事もできますが、公式が既に定義しているものもあります。
その中でよく使われるvector3という構造体で説明します。

コードの全体↓

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

hello_world2_device := class(creative_device):
    @editable MovingDiatanceX : float = 2000.0
    @editable MovingDiatanceY : float = 0.0
    @editable MovingDiatanceZ : float = 2000.0
    
    OnBegin<override>()<suspends>:void=
        MovingDiatance:vector3=vector3{X:=MovingDiatanceX, Y:=MovingDiatanceY, Z:=MovingDiatanceZ}
        Players : []player = GetPlayspace().GetPlayers()
        if(Player : player = Players[0]):
            if(FortniteCharacter : fort_character = Player.GetFortCharacter[]):
                PlayerPosition : vector3 = FortniteCharacter.GetTransform().Translation
                NewPositionX : float = PlayerPosition.X
                NewPositionY : float = PlayerPosition.Y
                NewPositionZ : float = PlayerPosition.Z
                NewPosition:vector3 = vector3{X:=NewPositionX, Y:=NewPositionY, Z:=NewPositionZ} + MovingDiatance
                NewRotation: rotation = MakeRotationFromYawPitchRollDegrees(0.0, 0.0, 0.0)
                if(FortniteCharacter.TeleportTo[NewPosition, NewRotation]):
                    Print("Jump!")

ゲーム開始時にプレイヤーをX方向に2000、Z方向に2000移動させるコードです。

定義

vector3<native><public> := struct<concrete><computes>:
    @editable
    X<native><public>:float = external {}
    
    @editable
    Y<native><public>:float = external {}
    
    @editable
    Z<native><public>:float = external {}

構造体名⇒vector3
変数名⇒X,Y,Z

これは、公式が定義しており、VScodeのUnrealEngineファイルのUnrealEngine.digest.verseの742行目に書いてあります。

インスタンス化

①13行目
MovingDiatance : vector3 =vector3{X:=MovingDiatanceX, Y:=MovingDiatanceY, Z:=MovingDiatanceZ}

②17行目
PlayerPosition : vector3 = FortniteCharacter.GetTransform().Translation

③21行目
NewPosition:vector3 = vector3{X:=NewPositionX, Y:=NewPositionY, Z:=NewPositionZ} + MovingDiatance

の3つの部分で行われています。

インスタンス名
①MovingDiatance
②PlayerPosition
③NewPosition


①MovingDiatanceX…
②GetTransform()とTranslationの2つのメソッドによりvector3型の値が返っている。値はFortnightChracterの位置
③NewPositionX…

アクセス
③NewPositionX : float = PlayerPosition.X
 NewPositionY : float = PlayerPosition.Y
 NewPositionZ : float = PlayerPosition.Z


①②に対するアクセスはありません。

まとめ

・構造体は変数をグループ化するもの
・構文に従って、定義、インスタンス化、アクセスをする。
・構造体の中には公式が既に定義しているものがある。
・vector3を使う機会が多い。

よかったらシェアしてね!

この記事を書いた人

メタバースに興味を持ち、UEFN、Verseを学びながらFortniteでゲーム制作しています。
初心者でも理解できるような記事を書くことを心がけております。
間違いがありましたら指摘よろしくお願いいたします。

コメント

コメント一覧 (2件)

  • いつもわかりやすい記事を投稿してくださり、ありがとうございます!他の投稿者様よりも見やすく、わかりやすくて愛用させていただいております。
    さっそくですが、もし可能であれば、「ボタンを押したらプレイヤーの位置から前方グリッド1024(プレイヤーから見て前のマス縦方向2つ分,横方向3つ分、計前方6マス)のエリア内の建築を破壊する」といった仕組みを作ることは可能でしょうか?起爆のボタンは信号リモコンを使用する感じです。実現したいのはマップコード「2898-7886-8847」の手のマークのスキル(GROUND SMASH)です。わがまま言って申し訳ないのですが、可能であればお願いしたいです。よろしくお願いいたします。

コメントする

目次