みなみ
ゲームの終了まで繰り返し消えるプラットフォームのVerseコードについて教えてください!
りゅう
こんなお悩みを解決します。
本記事の内容
本記事の信頼性
この記事を書いている僕は、クリエイター兼ブロガーです。実際にUEFNを使っており、現在進行形で学んでいます。
今回は、ゲームの終了まで繰り返し消えるプラットフォームのVerseコードについて解説します。
なお、UEFN上でのオブジェクトの配置等は下記の記事を参考にしてください。
>> EpicGames公式ドキュメント
あすか
使用するVerse言語
loop
loop:
ゲームが終了するまでプラットフォームの表示状態と非表示状態が繰り返されます。
この例では、Verse の loop 式を使用してこのような動作を作成する方法を示します。
公式ドキュメント
使用するVerse API
Sleep()
Sleep():
Sleep() API を使用することにより、プラットフォームが非表示状態になる時間と表示状態になる時間を選択できます。
公式ドキュメント
Editable Properties
Editable Properties:
エディタでカスタマイズできるように、Verse で作成した仕掛けの 2 つのプロパティ (プラットフォームの仕掛けの参照と Sleep() 関数呼び出しの ToggleDelay) が UEFN に公開されます。
公式ドキュメント
ゲームの終了まで繰り返し消えるプラットフォームのVerse部分を解説
※音量にご注意ください。
コード
using { /Fortnite.com/Devices }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
log_on_off_platform := class(log_channel){}
on_off_platform := class<concrete>(creative_device):
Logger : log = log{Channel := log_on_off_platform}
@editable
ToggleDelay : float = 2.0 # How long to wait between showing and hiding the platform
@editable
Platform : color_changing_tiles_device = color_changing_tiles_device{}
OnBegin<override>()<suspends> : void =
loop:
Sleep(ToggleDelay) # Sleep(ToggleDelay) waits for ToggleDelay seconds before proceeding to the next instruction.
Platform.Hide()
Sleep(ToggleDelay)
Platform.Show() # The loop restarts immediately, calling Sleep(ToggleDelay) again.
なお、以下のコードの解説文はプログラミング初心者の主がなんとか調べて記述したものです。
あすか
参考程度にどうぞ。
完全なスクリプト
▼ このコードは、ゲーム内で繰り返し表示されたり非表示にされたりするプラットフォームの挙動を制御するためのコードです。
using { /Fortnite.com/Devices }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
log_on_off_platform := class(log_channel){}
on_off_platform := class<concrete>(creative_device):
Logger : log = log{Channel := log_on_off_platform}
@editable
ToggleDelay : float = 2.0 # How long to wait between showing and hiding the platform
@editable
Platform : color_changing_tiles_device = color_changing_tiles_device{}
OnBegin<override>()<suspends> : void =
loop:
Sleep(ToggleDelay) # Sleep(ToggleDelay) waits for ToggleDelay seconds before proceeding to the next instruction.
Platform.Hide()
Sleep(ToggleDelay)
Platform.Show() # The loop restarts immediately, calling Sleep(ToggleDelay) again.
クリックすると開きます。
最初の行では、いくつかのモジュール(Fortnite.com/Devices
、Verse.org/Native
、Verse.org/Simulation
、UnrealEngine.com/Temporary/Diagnostics
)を使用することを宣言しています。
次に、log_on_off_platform
というクラスが定義されています。このクラスは、ログのチャンネルを受け取って初期化します。
その後、on_off_platform
というクラスが定義されています。このクラスは、creative_device
を継承しており、Logger
という名前のログを保持します。ログはlog_on_off_platform
クラスのインスタンスを使用して初期化されます。
on_off_platform
クラスには、いくつかの編集可能なプロパティがあります。ToggleDelay
は、プラットフォームが表示されたり非表示になったりする間の待ち時間を表す浮動小数点数です。デフォルト値は2.0です。Platform
は、color_changing_tiles_device
というデバイスのインスタンスを保持します。
OnBegin
というメソッドは、オーバーライドされています。このメソッドは特別な修飾子<suspends>
を持っており、ループ内で非同期の待機が可能です。
OnBegin
メソッドの中で、無限ループが開始されています。ループの中では、まずToggleDelay
秒だけ待機し、その後プラットフォームを非表示にします。さらにToggleDelay
秒だけ待機し、プラットフォームを表示します。このループはすぐに再スタートし、再びToggleDelay
秒待機します。
このコードは、指定された間隔でプラットフォームを表示したり非表示にしたりする処理を継続的に実行するためのものです。これにより、ゲーム内のプラットフォームが点滅するような効果が得られます。
log_on_off_platform := class(log_channel){}
▼ log_on_off_platform := class(log_channel){}
は、ログを出力するためのクラスを定義するためのコードです。
# log_on_off_platformクラスは、log_channelクラスから継承します。
log_on_off_platform := class(log_channel){}
クリックすると開きます。
まず、log_on_off_platform
はクラスの名前です。
:=
は代入演算子であり、右側の式を左側の変数に代入することを意味します。
つまり、log_on_off_platform
という変数に新しいクラスを代入しています。
class(log_channel)
は、log_channel
クラスを継承することを示しています。
クラスの継承は、既存のクラスの機能を再利用しながら、新しいクラスを作成するための仕組みです。
この場合、log_on_off_platform
クラスはlog_channel
クラスの機能を継承しています。
{}
はクラスの本体を表しており、中にはクラスのプロパティやメソッドを定義することができます。しかし、このコードでは中身が空であるため、log_on_off_platform
クラスには追加のプロパティやメソッドはありません。
このコードの目的は、log_on_off_platform
クラスを使用してログを出力するための基盤を作成することです。具体的には、プラットフォームの状態変化や動作に関する情報をログに記録するために使用されることが想定されています。
例えば、プラットフォームが表示されるタイミングや非表示になるタイミング、エラーが発生した際の情報などをログに出力することで、プログラムの挙動を監視・分析することができます。また、ログはデバッグやトラブルシューティングの際に役立つ情報を提供します。
このように、log_on_off_platform := class(log_channel){}
はログ出力のためのクラスを定義するためのコードであり、プラットフォームの状態変化に関する情報を記録するための基盤を提供します。
log_on_off_platform := class(log_channel){}の記載理由
クリックすると開きます。
ログは、プログラムの実行中に発生する出来事や重要な情報を記録するための手段です。特定のオブジェクトの動作や状態変化を追跡し、デバッグやトラブルシューティングのために有用な情報を提供します。
この場合、プラットフォームが2秒ごとに表示や非表示に切り替わるという動作があるようです。そのため、log_on_off_platform
クラスを作成することで、プラットフォームの状態変化をログに記録することができます。
ログを記録することにより、プラットフォームがどのように振る舞っているのか、正常に動作しているのか、エラーが発生しているのかなどの情報を得ることができます。また、ログを分析することで、プラットフォームの動作パターンやタイミングを把握し、必要に応じて調整や最適化を行うことができます。
さらに、ログはゲームやアプリケーションの開発過程でデザインの変更や修正を行う際にも役立ちます。ログによってプラットフォームの表示時間や非表示時間を調整し、レイアウトに合ったタイミングを見つけることができます。
したがって、log_on_off_platform := class(log_channel){}
を入力することで、プラットフォームの状態変化に関するログを記録し、プラットフォームの動作や振る舞いを把握するための基盤を構築することができます。
わざわざ継承する必要ないのでは
クリックすると開きます。
継承を行う理由は、log_on_off_platform
クラスがlog_channel
クラスを拡張して追加の機能を持つためです。log_channel
クラスはログのチャンネル機能を提供しますが、log_on_off_platform
クラスはこの機能を拡張して、特定の目的に合わせたログ処理を行うことができます。
具体的には、log_on_off_platform
クラスはlog_channel
クラスを継承することで、ログ出力のカスタマイズや制御を行うことができます。継承によって親クラスの機能を引き継ぎつつ、新たなフィールドやメソッドを追加することができます。
この場合、log_on_off_platform
クラスはログチャンネルの機能を利用しながら、プラットフォームの表示や非表示のタイミングをログに記録するための追加の機能を持っています。具体的には、log_on_off_platform
クラスのインスタンスをLogger
フィールドに割り当てることで、プラットフォームの状態変更のログがlog_channel
を介して記録されるようになります。
継承を利用することで、既存のクラスの機能を再利用しながら、新たな機能を追加することができます。また、継承を活用することでコードの再利用性や保守性も向上させることができます。
クラスの定義について
クリックすると開きます。
class(log_channel)
という式は、log_on_off_platformクラスがlog_channelクラスから継承していることを意味しています。class
というキーワードは、クラスを定義するために使用されます。(log_channel)
という部分は、log_on_off_platformクラスがlog_channelクラスから継承することを意味しています。
つまり、log_on_off_platformクラスは、log_channelクラスのすべての機能を継承しています。たとえば、log_channelクラスに定義されているメソッドは、log_on_off_platformクラスからも使用することができます。
log_channelの機能
クリックすると開きます。
log_channel
は、ログ出力やログの管理に関する基本的な機能を提供するクラスです。以下に、log_channel
の主な機能について説明します。
ログの出力: log_channel
は、ログメッセージを出力する機能を提供します。プログラムの実行中に重要な情報やデバッグ情報をログとして出力することで、実行の状態や問題のトラブルシューティングが容易になります。 ログレベルの設定: log_channel
では、ログメッセージの重要度や詳細度に応じてログレベルを設定できます。一般的なログレベルには、デバッグ、情報、警告、エラーなどがあります。ログレベルを設定することで、必要な情報のみを出力することや、重要度に応じたログのフィルタリングが可能です。 ログのフォーマット: log_channel
は、ログメッセージのフォーマットを設定する機能を提供します。ログメッセージには、タイムスタンプ、ログレベル、メッセージの内容などが含まれることが一般的です。ログのフォーマットを設定することで、ログメッセージが見やすくなったり、特定の形式で保存されたりします。 ログの出力先の指定: log_channel
は、ログの出力先を指定する機能も提供します。ログは、コンソールやファイル、ネットワーク上のリモートサーバーなど、さまざまな場所に出力することができます。log_channel
を使用することで、ログの出力先を柔軟に設定することができます。
これらの機能を持つlog_channel
は、ログの管理やデバッグ作業において非常に便利です。log_on_off_platform
クラスがlog_channel
を継承することで、これらの基本的なログ機能を活用しながら、さらにログのオン/オフ制御機能を追加することができます。
log_on_off_platform := class(log_channel){}と Logger : log = log{Channel := log_on_off_platform}の意味
クリックすると開きます。
log_on_off_platform := class(log_channel){}
と Logger : log = log{Channel := log_on_off_platform}
の2つのコードは、ログ出力に関連していますが、完全に削除してもゲームは通常通り実行される場合があります。
これは、コードの他の部分が正しく動作し、これらのコードが実行されなくても問題がないためです。
具体的な意味は以下の通りです。
log_on_off_platform := class(log_channel){}
:
log_on_off_platform
クラスを定義しています。このクラスは、log_channel
クラスを継承しています。 ただし、このコードスニペット内では、log_on_off_platform
クラスが具体的な機能を提供しているわけではなく、そのまま継承元の log_channel
クラスを使用しています。 ゲームが正常に動作する場合、このコードはログ関連の機能を追加するために必要ではない可能性があります。
Logger : log = log{Channel := log_on_off_platform}
:
Logger
プロパティを定義しています。log
クラスのオブジェクトを格納するための変数です。Channel
プロパティに log_on_off_platform
オブジェクトを割り当てています。ただし、このコードスニペット内では、log_on_off_platform
オブジェクトが実際に使用されず、Logger
プロパティ自体も他の部分で使用されていない場合、このコードは実行上の影響がない可能性があります。
したがって、これらのコードが意味を持つかどうかは、他の部分のコードやゲームの仕様に依存します。ログ関連の機能を追加するためにこれらのコードを使用するかどうかは、プロジェクトの要件やデバッグ/監視の必要性によって異なります。もしゲームが正常に動作し、ログ出力が問題なく行われる場合、これらのコードは削除しても影響がない可能性があります。
▼ このコードの部分は、on_off_platform
クラスに新しいフィールド ToggleDelay
を追加しています。
@editable
ToggleDelay : float = 2.0
クリックすると開きます。
@editable
ToggleDelay : float = 2.0
@editable
アノテーションは、このフィールドがエディタで編集可能であることを示しています。つまり、ゲーム開発者はこのフィールドの値を調整できます。ToggleDelay
はフィールドの名前で、表示状態と非表示状態を切り替える間隔を表します。具体的には、プラットフォームが表示状態または非表示状態になる時間を指定します。float
はこのフィールドのデータ型を表しています。float
は浮動小数点数を表すためのデータ型で、小数点以下の値を扱うことができます。= 2.0
はフィールドの初期値を設定しています。ここでは 2.0
という値で初期化されていますが、この値は必要に応じて変更できます。
このフィールドの目的は、プラットフォームが表示と非表示を切り替える間隔を設定することです。例えば、この場合は 2 秒ごとにプラットフォームが切り替わるようになります。この値を調整することで、プラットフォームの切り替え速度を変更することができます。
これにより、ゲーム開発者はゲームプレイの要件に合わせてプラットフォームの表示と非表示のタイミングをカスタマイズすることができます。
▼ このコードの部分は、on_off_platform
クラスに新しい編集可能なフィールド Platform
を追加しています。
@editable
Platform : color_changing_tiles_device = color_changing_tiles_device{}
クリックすると開きます。
@editable
Platform : color_changing_tiles_device = color_changing_tiles_device{}
@editable
アノテーションは、このフィールドがエディタで編集可能であることを示しています。つまり、ゲーム開発者はこのフィールドの値を調整できます。Platform
はフィールドの名前で、周期的に消えて現れるプラットフォームを表します。color_changing_tiles_device
はフィールドのデータ型です。このフィールドは color_changing_tiles_device
型のオブジェクトを持ちます。= color_changing_tiles_device{}
はフィールドの初期値を設定しています。ここでは空の color_changing_tiles_device
アーキタイプのオブジェクトを初期化しています。
このフィールドの目的は、周期的に消えて現れるプラットフォームを表現するためのオブジェクトを保持することです。color_changing_tiles_device
は、タイルの色が変化するなどの機能を持つプラットフォームのアーキタイプを表しています。このフィールドを使用することで、ゲーム開発者はプラットフォームの外観や動作をカスタマイズできます。
初期化の部分では、color_changing_tiles_device{}
という空のアーキタイプのオブジェクトを使用しています。具体的なアーキタイプの設定は、開発者が必要に応じて行うことができます。この初期化により、Platform
フィールドは空の color_changing_tiles_device
アーキタイプのオブジェクトで初期化されます。
ゲーム開発者は、このフィールドを使用してプラットフォームの外観や動作をカスタマイズすることができます。例えば、色の変化パターンやプラットフォームの形状を変更することができます。
>> EpicGames公式ドキュメント
▼ 下記のコードは、プラットフォームの表示と非表示を切り替える機能を追加するためのものです。
OnBegin<override>()<suspends> : void =
loop:
Sleep(ToggleDelay) # Sleep(ToggleDelay) waits for ToggleDelay seconds before proceeding to the next instruction.
Platform.Hide()
Sleep(ToggleDelay)
Platform.Show() # The loop restarts immediately, calling Sleep(ToggleDelay) again.
クリックすると開きます。
OnBegin<override>()<suspends>
は、on_off_platform
クラスの OnBegin
メソッドをオーバーライドすることを示します。OnBegin
メソッドは、ゲームの開始時に実行される特殊なメソッドです。loop:
は、指定したコードブロックを無限ループさせるためのキーワードです。このループによってプラットフォームの表示と非表示が繰り返されます。Sleep(ToggleDelay)
は、指定した時間(ToggleDelay
変数で設定された秒数)だけ待機するためのコードです。ここでは、ToggleDelay
秒待機してから次の命令に進みます。Platform.Hide()
は、プラットフォームを非表示にするメソッドの呼び出しです。プラットフォームが消えます。Platform.Show()
は、プラットフォームを表示するメソッドの呼び出しです。プラットフォームが現れます。
このコードを実行すると、ゲームの実行中にプラットフォームが表示されたり非表示になったりする動作が繰り返されます。具体的には、ToggleDelay
秒だけプラットフォームが表示された後、Platform.Hide()
によって非表示になり、再度 ToggleDelay
秒待機した後に Platform.Show()
が呼び出されてプラットフォームが再び表示されます。このループが繰り返されることで、プラットフォームが定期的に表示と非表示を切り替える動作が実現されます。
このようなコードを使用することで、ゲーム内のオブジェクトや要素を時間経過や条件に応じて制御することができます。プラットフォームの表示と非表示の切り替えは、ゲームの難易度やエフェクトの演出などに応用することができます。
>> 非表示機能について
>> 表示機能について
今回もお疲れさまでした!
繰り返し練習して身につけましょう😌
My Twitter account 🍀