HeliScript学習記録
WorldBuilder で HeliScript を利用する
Unity 上での開発に比べ、実行までの時間が短くて済む。とても助かる!
スクリプトの追加方法
- あらかじめ適当なオブジェクト(白のブロックなど)を配置しておく
- スクリプトを作成する
- 配置済のオブジェクトの「スクリプト」の「追加」をクリックする
- 前の手順で作成したスクリプトを選択する
- Component Name をクリックして、出てきた名前をクリックする
- 開発者コンソールを開く(ブラウザのアドレスバーにカーソルがある状態で、F12キーを押す。その後、Console をクリックする)
-
実行ボタンをクリックする
-
開発者コンソールに実行結果が表示される
ワールドURL: https://sutonea.cloud.vket.com/worlds/3NOHk8nV/main.html?worldid=3NOHk8nV
スクリプト
component CComponent {
Item m_Item;
bool m_isUp;
public CComponent() {
m_Item = hsItemGetSelf();
m_isUp = false;
}
public void Update() {
hsSystemWriteLine("%01f" % m_Item.GetPos().y);
if(m_isUp && m_Item.GetPos().y >= 2.9) {
m_isUp = false;
Vector3 vector = new Vector3();
vector.y = 0;
m_Item.MovePos(vector, 3, false);
}
if(!m_isUp && m_Item.GetPos().y <= 0.20) {
m_isUp = true;
Vector3 vector = new Vector3();
vector.y = 3;
m_Item.MovePos(vector, 3, false);
}
}
}
Hello world
参考サイト
Vket Cloudでプログラミング!スクリプトを使ってHello Worldを表示させよう!
準備
スクリプト を作成する
プロジェクトウィンドウのアセットフォルダ内で右クリックし、
Create>HeliScript する。
作成されたHeliScriptに任意の名前を付ける。
今回は、Assets 配下に「scripts」というフォルダを作成した後に、
その中に「Main」という名前の HeliScript を作成した。
スクリプト 実行のための設定をする
ヒエラルキーウィンドウにて
World をクリック
Add Component から HEO Script を選択する
インスペクター上の HEO Script にて、HeliScript を選択する
今回は、前の手順で作成した「Main」を設定した
デバッグモードを有効にする
ヒエラルキーウィンドウにて
VketCloudSettings>BasicSettings をクリック
インスペクターウィンドウにて
BaseSettingのデバッグモードにチェックを入れる
スクリプトを編集して実行する
編集後の Main
component Main
{
public Main()
{
hsSystemOutput("Hello, World!\n");
}
public void Update()
{
}
}
メニューバーの VketCloudSDK>ビルドと実行
実行結果
上記のように Hello World を出力できた
ダイアログを表示する
参考サイト
(バージョン 13.4 のドキュメント。必要に応じて別バージョンを参照のこと)
組み込み関数 - 汎用ダイアログ
ソースコード
component Main
{
public Main()
{
hsSystemOutput("Hello, World!\n");
// ダイアログを利用するように設定する
hsCommonDialogSetUseTitle(true);
// ダイアログのタイトルを設定する
hsCommonDialogSetTitle("ダイアログのテスト");
// ダイアログの本文を設定する
hsCommonDialogSetText("本文一行目\n本文二行目");
// ダイアログ文言の縦横位置を中央に指定する
hsCommonDialogSetTextAlignment(HSAlignCM);
// Yes, No ボタンは利用しないように設定する。これにより OK ボタンだけ表示される
hsCommonDialogSetUseYesNoButton(false);
// OKボタンの文言を指定する
hsCommonDialogSetOKButtonText("テストボタン");
// ダイアログを開く
hsCommonDialogOpen();
}
public void Update()
{
}
}
実行結果
コンストラクタの実験
参考サイト
HeliScriptでアイテムをまっすぐ動かす【コピペで使えるサンプルコード付き】
試したこと
ヒエラルキー上で右クリックして HEO Cube を作成した
MovableCube と名付けた
https://zenn.dev/hikky_co_ltd/articles/3e2cadb7674b24 の画像を見てみると、
インスペクター上に HEO Script というコンポーネントが追加されており
そこに ItemMove.hs が設定されているように見えたので
そのようにしてみた
また、ItemMove.hs は以下のようにした
component ItemMove
{
public ItemMove()
{
hsSystemOutput("Constructor of ItemMove called\n");
}
public void Update()
{
}
}
実行結果は以下の通り。コンストラクタが2回呼ばれてしまっている?
2024/07/04 追記:解決方法
手順に誤りがあったせいで、コンストラクタが2回呼ばれているかもしれないので、やり直してみる
同様に「SwitchCube」という HEO Cube 、および SwitchCube.hs という HEO Script を作成した。
そして、Switch Cube に HEO Script コンポーネントを追加し、そのコンポーネントに SwitchCube.hs を設定した。
SwitchCube.hs は、コンストラクタでメッセージを出力するようにしている。
実行結果は以下。やはり、コンストラクタが2回呼ばれているように見える。
サポートセンターに問い合わせた結果
私の実装が誤っていた...
HEOObjectコンポーネントを持ったオブジェクトは、Worldの子オブジェクトにしないのが正しいと教えていただいたので、そのように修正した。
実行結果は以下。コンストラクタが1度だけ呼ばれるようになった。
GameObject を動かす
バージョン情報
12.3.4
手順
- Scene 直下に HEO Cube を作成する(今回は MovableCube と名付けた)
- 以下のような HeliScript を作成する(今回は MoveMovableCube と名付けた)
component MoveMovableCube
{
Item self;
float z;
public MoveMovableCube()
{
self = hsItemGetSelf();
hsSystemWriteLine("After hsItemGetSelf()");
z = 0.0;
}
public void Update()
{
z += 0.1;
self.SetPos(makeVector3(0.0,0.0,z));
}
}
- MovableCube に HeliScript を追加し、そこへ MoveMovableCube を設定する
- 上記を実行する。MovableCube が時間とともに画面奥へ移動する。
複数の GameObject を動かす
まず、前の記事で作成した MovableCube を削除する
次に、空のGameObject を作成する
名前は MyParent としておく
MyParentの子供としてSphereを作成する
同様にCapsuleも作成する
Sphere と Capsule の位置を適当に移動しておく
MyParent をクリックする
メニューバーの VketCloudSDK からフィールドのエクスポートを行う
ファイル名はそのままとして、Unityプロジェクト内の適当な場所へ保存した
MyParent に Component を追加する。Component の種類は HEO Object
HEO Object の .heo に設定をする。丸の中に小さな点があるアイコンをクリックした後に、先ほどエクスポートした MyParent を選ぶ
さらに Component を追加する。今度は HEO Script を選ぶ。
前回の記事で作成した MoveMovableCubeを選ぶ
上記を実行する。Sphere と Capsule が時間とともに画面奥へ移動する。
GLB ファイルを移動させる
uniGLTFをプロジェクトにインストールしておく
blender を使って GLB ファイルを作成する
UniGLTF を用いて GLB ファイルをインポートする
GLBファイル(以下、kago_shikaku)をヒエラルキーへドラッグする
kago_shikaku に HEO Object を追加する
さらに、kago_shikaku に HEO Script を追加する
HEO Script には 他の記事で利用した MovableCube を設定しておく
ヒエラルキーで kago_shikaku を選択し、「フィールドのエクスポート」を行う
下図に赤く示したところをクリック
先程エクスポートした heo を選ぶ
カゴが徐々に移動するようになる
ただ、これでは、プレイヤーがカゴをすり抜けてしまうので、対処したい。