ランダムな値をつかってみよう

はじめに

ゲームのなかで、無造作に砲弾が飛んできてプレイヤーの行く手を阻むようなシーンを経験したことがあると思います。

例えば以下の動画のように何らかの物体が無造作に配置されていくような形のイメージです。

無造作に配置されていく物体を避けながらプレイヤーはゲームを進行していくわけです。

この無造作に物体が配置されていく処理はどのようにおこなうのでしょうか。

物体の配置場所はトランスフォームによって定められています。赤色・緑色・青色によって場所が決まります。

「無造作に」配置するには、このトランスフォームの情報をランダムに変更できれば良さそうです。

Verseでは、ランダムな値を取り扱うことができます。

値を取り扱うというのは、定数とか変数とかのようなイメージですが、ランダムな値というのはルーレットで数字が決まるような感じです。

あわせて読みたい
Verseのお作法 ~変数を知ろう~ ①はじめに verseでは数字や文字の情報をたくさん取り扱います。 たくさんの情報を整理しながら扱う方法についてお話します。 ②verseの表現 verseファイルをひらき、#メ...

今回の学習では、ランダムな値と少しでも仲良くなれれば大成功です。

GetRandomInt関数

以下のスクリプトを考えます。#部分はいったんそのまま保留で大丈夫です。


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

Random_device := class(creative_device):

    @editable
    var RandomInt:int = 600

    @editable
    Button:button_device=button_device{}

    OnBegin<override>()<suspends>:void=
        Button.InteractedWithEvent.Subscribe(OnInteractedWithEvent)

    OnInteractedWithEvent(Agent:agent):void=
        Print("{RandomInt}")
        #RandomIntNumber := GetRandomInt(-RandomInt,RandomInt)
        #Print("{RandomIntNumber}")

これを実行すると、以下の動画のように、ボタンを押すと600という値が画面に表示されます。

今度は、さきほどのスクリプトの#部分を使ってみます。改めて以下のスクリプトを見てみます。


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

Random_device := class(creative_device):

    @editable
    var RandomInt:int = 600

    @editable
    Button:button_device=button_device{}

    OnBegin<override>()<suspends>:void=
        Button.InteractedWithEvent.Subscribe(OnInteractedWithEvent)

    OnInteractedWithEvent(Agent:agent):void=
        #Print("{RandomInt}")
        RandomIntNumber := GetRandomInt(-RandomInt,RandomInt)
        Print("{RandomIntNumber}")

実行すると以下の動画のようにランダムな値が表示されます。

GetRandomIntは関数で、定められた範囲でランダムな値をつくりだしてくれます。

GetRandomInt関数を使用するには、using { /Verse.org/Random }というお道具箱(モジュール)が必要です。

GetRandomInt関数を使うには、範囲を指定する必要があります。以下のように定めます。

RandomIntNumber := GetRandomInt(-RandomInt,RandomInt)

RandomIntNumberは好きに名前をつけて問題ありません。

今回は、var RandomInt:int = 600としているので、

RandomIntNumberというランダムな値は、ー600から600の範囲でつくられます。

そのため、var RandomInt:int = 400とすれば、

RandomIntNumberというランダムな値は、ー400から400の範囲でつくられます。

注意点ですが、GetRandomInt関数はint型しか取り扱うことができません。

float型を取り扱う場合は、GetRandomFloat関数を使います。

GetRandomFloat関数

GetRandomInt関数と考え方は同じですが、float型を取り扱います。

以下のスクリプトを見ます。


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

Random_device := class(creative_device):

    @editable
    var RandomFloat:float = 600.0

    @editable
    Button:button_device=button_device{}

    OnBegin<override>()<suspends>:void=
        Button.InteractedWithEvent.Subscribe(OnInteractedWithEvent)

    OnInteractedWithEvent(Agent:agent):void=
        RandomFloatNumber := GetRandomFloat(-RandomFloat,RandomFloat)
        Print("{RandomFloatNumber}")

実行すると以下のようなfloat型のランダムな値が表示されます。

まとめ

ランダムな値について学習しました。

int型とfloat型について見てきましたが、冒頭の物体のランダムな配置という観点でいうと、float型のランダムな値を使うことになります。なぜなら、トランスフォームの位置座標などはfloat型だからです。

このあたりの実践的な利用方法に関しては改めてご説明したいと思います。

それでは。また。

お疲れ様でした。

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

コメントする