はじめに
Vket Cloudでは、「HeliScript」という独自のスクリプトを使用してコーディングを行うことで、ワールド内に高度なギミックを導入することが出来ます。
本記事では、HeliScriptのUpdate()関数とその使い方について紹介します。
動画
Update()関数って?
Update()関数は、関数内の処理を毎フレーム実行します。
1フレームはおよそ1/60秒なので、1秒間に約60回実行されます。
※モニターのリフレッシュレートにより変動します。
Update()関数はHeliScriptを作成した際、はじめから記載されています。
Update()関数の注意点
毎フレーム実行される関数であるため、コンソールへの文字出力を行うと、毎フレーム文字を出力してしまいます。
public void Update()
{
hsSystemWriteLine("【Vket Cloud】動画つき!ゼロから始めるHeliScript超入門⑨ - HeliScriptのUpdate()関数について");
}
上記のように、Update関数内で文字列の出力を行う設定のみを行い、ビルドした場合、
下記の画像のように文字列が一瞬でたくさん表示されます。
また、文字列の出力は画面外を突き抜けずっと出力され続けています。
このように、Update関数での実行には不向きな関数もVket Cloudには存在します。
hsSystemGetDeltaTime()で時間計測
Update()関数を利用することで実装可能な挙動の一つに時間計測があります。
hsSystemGetDeltaTime()
は直前フレームから現在のフレームまでの経過時間をfloat型で取得するシステム組み込み関数です。
これをUpdate()関数上で使用することにより、時間計測が行えるようになります。
float timer = 0;
public void Update(){
timer += hsSystemGetDeltaTime(); // timerに経過時間を加算
if(timer >= 3){ // timerが3以上となった時
hsSystemWriteLine("3秒経過"); // コンソール出力
timer = 0; // タイマーをリセット
}
}
上記の例ではUpdate関数内でhsSystemGetDeltaTime()
を使うことで変数timerを時間計測に使用し、
timerが3以上になった際コンソールに「3秒経過」を出力、timerをリセットするという動作をすることにより、
3秒おきに「3秒経過」を表示する、といった動作を行います。
別のタブに遷移するなどしてバックグラウンド状態にした後、Vket Cloudを開いているタブに戻って来た際、hsSystemGetDeltaTime()
で取得されるのはバックグラウンド状態にした時からVket Cloudを開いているタブに戻ってくるまでの時間になります。
本来の1フレームの長さより大きな値が入ってきてしまい、想定外の動作を引き起こす場合があるため、
hsSystemGetDeltaTime()
で取得される値が大きい時は代わりに1フレームの長さと近い定数を加算する、といった方法を使うなどして想定外の動作を回避することを推奨します。
次 : ⑩ HeliScriptでVector3を使ってシーン上のアイテムを移動させる
前 : ⑧ HeliScriptでシーン上のアイテムを取得する