はじめに
Vket Cloudでは、「HeliScript」という独自のスクリプトを使用してコーディングを行うことで、ワールド内に高度なギミックを導入することが出来ます。
本記事ではHeliScriptのPlayerクラスの概要とHeliScriptからプレイヤーを移動させる方法を紹介します。
動画
Playerクラス
Playerクラスはプレイヤーに対し、移動や名前取得などの制御を加えることが出来る関数が備わっているクラスです。
Item同様、変数宣言を行いhsPlayerGet()
関数を使用し取得します。
Player player; // Playerクラス変数playerの宣言
...(中略)...
player = hsPlayerGet(); // プレイヤーの情報を取得
player.SetPos(targetVector3); // プレイヤーをtargetVector3で定義した座標へワープ
プレイヤー情報の取得はPlayerクラス関数を使用する直前で行うことで、動作が安定します。
プレイヤーを移動させる
前節の例でも使用していますが、プレイヤーをワープさせるための関数はItemの移動と同様、SetPos()
関数を使用します。
また、現在のプレイヤーの座標取得も同様で、GetPos()
関数を使用することで可能です。
注意点
SetPos()
関数でプレイヤーをワープさせた際、カメラ位置がプレイヤーの背面にワープします。
SetPosの第2引数にfalseを設定することでSetPos()
発火時、カメラ位置をリセットしない設定が可能です。
詳しくは次節で紹介します。
常にゆっくり移動するギミック
Update関数内でSetPos()
を使用することで、プレイヤーを徐々に移動させることが可能です。
アスレチックワールドを作る時などに便利です。
Player player; // プレイヤークラス変数の定義
Vector3 player_pos; // プレイヤー座標を格納する変数
Vector3 move_velocity; // プレイヤー移動量を格納する変数
public void Update(){
player = hsPlayerGet(); // プレイヤーの情報を取得
player_pos = player.GetPos(); // プレイヤーの現在座標を取得
move_velocity = makeVector3(0.0f , 0.0f, 0.025f); // 移動量を設定
player_pos.Add(move_velocity); // プレイヤー座標に移動量を追加
player.SetPos(player_pos, false); // 更新後の座標をプレイヤーに反映、カメラリセットしない
}
上記の例では、プレイヤーの座標を取得し、Z方向に少しだけ移動したものに更新することで、プレイヤーが常にゆっくりZ方向に進み続けます。
また、プレイヤーの座標に別途Vector3を追加する方法で実装することで、キー入力によるプレイヤー移動と併用することが出来ます。
上記の例では、SetPos()
関数使用時に第2引数でfalseを追加していました。
このように、SetPos()
関数では第2引数のbool値によりワープ実行時にカメラをリセットするかしないかを設定することが可能です。
falseを入力することで、ワープによってカメラ位置が変更されることが無くなり、常にゆっくり進み続ける関数実行中でも自由にカメラを動かすことが可能となります。
次 : ⑫ HeliScriptにおけるコンポーネントとアイテムの関係性
前 : ⑩ HeliScriptでVector3を使ってシーン上のアイテムを移動させる