はじめに
Vket Cloudでは、「HeliScript」という独自のスクリプトを使用してコーディングを行うことで、ワールド内に高度なギミックを導入することが出来ます。
本記事では、HeliScriptのVector3クラスの概要とVector3クラスを使ってシーン上のアイテムを移動させる方法を紹介します。
動画
移動が出来るアイテムの用意
VKC Item Field Unityコンポーネントによってつくられるアイテムは、今回のスクリプトを使用しても移動させることができません。
移動させることが出来る3Dモデルのアイテムを作るためには、VKC Item Object Unityコンポーネントを使用したアイテムを用意する必要があります。
VKC Item Object Unityコンポーネントで利用できるアイテムを作るためには、3Dモデルの.heoファイルを作成する必要があります。
3Dモデルの.heoファイルを作成する
まず、Hierarchyビュー上で右クリックし、Create Emptyを選択します。
作成した空のオブジェクトのPositionを(0,0,0)、Rotationを(0,0,0)、Scaleを(1,1,1)にします。
空のオブジェクトの子オブジェクトに3Dモデルを追加します。
オブジェクトの中心が(0,0,0)になるようにします。
上の画像の場合、空のオブジェクトの中に3つのCubeオブジェクトを入れました。
これを書きだし元オブジェクトとします。
ここまで出来たら、親となる空オブジェクトを選択した状態で、「フィールドのエクスポート」を選択します。
保存画面が表示されるので、新しいフォルダを作成し、その中に保存します。
保存時に複数ファイル作成されます。必ず、何も入っていないフォルダの中に作成するようにしましょう。
これで、3Dモデルの.heoファイルの完成です。
作成した.heoファイルをシーンに取り込む
新しく空のオブジェクトを作成し、VKC Item Object Unityコンポーネントを追加します。
VKC Item Objectの.heoの欄の「選択」を押し、先程作成した.heoファイルを追加します。
ビルドと実行を選択することで、シーン上に3Dモデルオブジェクトが出現します。
スクリプトの作成
作成したアイテムを動かすスクリプトを作成します。
オブジェクトの移動にはSetPos()
関数、GetPos()
関数を使用します。
また、これらの関数ではVector3クラスを使用します。
Vector3クラスとは?
x,y,zの3つのfloat情報を持つクラスです。
3次元ベクトルを表現するのに使用されます。
今回は、X座標、Y座標、Z座標の値をこのクラスを利用して表現します。
スクリプトの記載
Item object; // オブジェクト情報を格納するアイテムクラス変数
Vector3 object_pos; // オブジェクトの座標情報を格納するVector3クラス変数
int moveVector; // 移動方向制御に利用する変数
float timer; // 時間測定に利用する変数
object = hsItemGet("ExampleObject"); // ExampleObjectの情報をobjectに格納
moveVector = 1;
public void Update(){ // 毎フレーム動作するUpdate関数
timer += hsSystemgetDeltaTime(); // 時間の測定
object_pos = object.GetPos(); // オブジェクトの座標を取得し格納
object_pos = makeVector3(object_pos.x,object_pos.y + (moveVector*0.05f), object_pos.z); // オブジェクト座標格納変数のY情報にmoveVectorの0.05倍を加算
object.SetPos(object_pos); // 計算により変化したobject_posをオブジェクトに適用
if(timer>=3){// 3秒を超えた時
moveVector *= -1; // moveVectorのプラマイ反転
timer = 0; // タイマーリセット
}
}
上記のスクリプトでは、オブジェクトの座標を取得した後、Y情報にmoveVectorの0.05倍を加算したものでオブジェクト座標を更新しています。
また、3秒おきにmoveVectorの正負が入れ替わるようになっています。
これにより、このスクリプトでは、上方向あるいは下方向にオブジェクトが進みつづけ、3秒おきに移動方向が入れ替わるという動作を発生させます。
Item.GetPos()
関数は、現在のアイテムの座標をVector3形式で取得します。
Item.SetPos(Vector3 targetPos)
関数は、アイテムの座標を引数のVector3クラスで指定したものに変更します。
今回紹介したものではUpdate関数にて微小の変化を加えたVector3クラス変数をSetPos()
関数で適用したため、オブジェクトが動いているような挙動となりましたが、SetPos()
関数で実際に発生している動作は瞬間移動となります。
スクリプト中で使用している*=
は乗算代入と言い、左側の変数に右側の値を掛け合わせた数を入れる、という意味の命令になります。
*
はShiftキーを押しながら:
(コロン)キーを押すと入力できます。
掛け算の×と同様の意味となります。
また、割り算の÷と同様の意味を持つ演算子記号は/
(スラッシュ)です。
次 : ⑪ HeliScriptでプレイヤーを取得しワープさせる
前 : ⑨ HeliScriptのUpdate()関数について