Open10

HeliScript学習記録

ピン留めされたアイテム
sutoneasutonea

WorldBuilder で HeliScript を利用する

Unity 上での開発に比べ、実行までの時間が短くて済む。とても助かる!

スクリプトの追加方法

  1. あらかじめ適当なオブジェクト(白のブロックなど)を配置しておく

  1. スクリプトを作成する

  1. 配置済のオブジェクトの「スクリプト」の「追加」をクリックする

  1. 前の手順で作成したスクリプトを選択する

  1. Component Name をクリックして、出てきた名前をクリックする

  1. 開発者コンソールを開く(ブラウザのアドレスバーにカーソルがある状態で、F12キーを押す。その後、Console をクリックする)

  1. 実行ボタンをクリックする

  2. 開発者コンソールに実行結果が表示される

sutoneasutonea

ワールド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);
		}

	}
}
sutoneasutonea

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 を出力できた

sutoneasutonea

ダイアログを表示する

参考サイト

(バージョン 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()
    {
        
    }
}

実行結果

sutoneasutonea

コンストラクタの実験

参考サイト

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 追記:解決方法

sutoneasutonea

手順に誤りがあったせいで、コンストラクタが2回呼ばれているかもしれないので、やり直してみる

同様に「SwitchCube」という HEO Cube 、および SwitchCube.hs という HEO Script を作成した。

そして、Switch Cube に HEO Script コンポーネントを追加し、そのコンポーネントに SwitchCube.hs を設定した。

SwitchCube.hs は、コンストラクタでメッセージを出力するようにしている。

実行結果は以下。やはり、コンストラクタが2回呼ばれているように見える。

sutoneasutonea

GameObject を動かす

バージョン情報

12.3.4

手順

  1. Scene 直下に HEO Cube を作成する(今回は MovableCube と名付けた)


  1. 以下のような 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));
        
    }
}
  1. MovableCube に HeliScript を追加し、そこへ MoveMovableCube を設定する

  1. 上記を実行する。MovableCube が時間とともに画面奥へ移動する。
sutoneasutonea

複数の 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 が時間とともに画面奥へ移動する。

sutoneasutonea

GLB ファイルを移動させる

uniGLTFをプロジェクトにインストールしておく

https://github.com/ousttrue/UniGLTF?tab=readme-ov-file#download

blender を使って GLB ファイルを作成する

UniGLTF を用いて GLB ファイルをインポートする

GLBファイル(以下、kago_shikaku)をヒエラルキーへドラッグする

kago_shikaku に HEO Object を追加する

さらに、kago_shikaku に HEO Script を追加する

HEO Script には 他の記事で利用した MovableCube を設定しておく

ヒエラルキーで kago_shikaku を選択し、「フィールドのエクスポート」を行う

下図に赤く示したところをクリック

先程エクスポートした heo を選ぶ

カゴが徐々に移動するようになる

ただ、これでは、プレイヤーがカゴをすり抜けてしまうので、対処したい。