【ClusterScript】自作テンプレートアイテムの解説
はじめに
この記事は別の記事で紹介した「ClusterScriptテンプレートアイテム」の解説です。
より詳しく知りたい方、コードを改変したい方へ向けた記事です。
【元の記事】オブジェクトの表示非表示を切り替える テンプレートアイテム
▼▼▼スクリプト解説▼▼▼
サンプル1: ボタンでオブジェクトの表示非表示を切り替える
// 子オブジェクトを取得
const subNode = $.subNode("子オブジェクト名");
// 静止物をインタラクトしたときの挙動を設定
$.onInteract(() => {
// 保存されている状態を取得
let active = $.state.active;
// 状態が未定義の場合は、現在のアクティブ状態で初期化
if (active == null) active = subNode.getEnabled();
// アクティブ状態を反転
active = !active;
// アクティブ状態を設定(activeがtrueなら表示、falseなら非表示になる)
subNode.setEnabled(active);
// 状態を保存
$.state.active = active;
});
サンプル2: オブジェクトを交互に表示非表示する
// 子オブジェクトを取得
const subNode1 = $.subNode("子オブジェクト1名");
const subNode2 = $.subNode("子オブジェクト2名");
// 静止物をインタラクトしたときの挙動を設定
$.onInteract(() => {
// 子オブジェクト1の現在の有効状態を取得
let active1 = subNode1.getEnabled();
// 子オブジェクト2の現在の有効状態を取得
let active2 = subNode2.getEnabled();
// アクティブ状態を更新
if (active1) {
active1 = false;
active2 = true;
} else {
active1 = true;
active2 = false;
}
// アクティブ状態を設定(activeがtrueなら表示、falseなら非表示になる)
subNode1.setEnabled(active1);
subNode2.setEnabled(active2);
// 状態を保存
$.state.active1 = active1;
$.state.active2 = active2;
});
サンプル3:インタラクトで非表示になった5秒後に再表示される
// 子オブジェクトを取得
const subNode = $.subNode("子オブジェクト名");
// 静止物をインタラクトしたときの挙動を設定
$.onInteract(() => {
// アクティブ状態を非表示にする
subNode.setEnabled(false);
// 5秒後に表示させる
$.state.time = ($.state.time ?? 0) + 5;
});
// 更新時の挙動を設定
$.onUpdate((deltaTime) => {
$.state.time = ($.state.time ?? 0) - deltaTime;
if ($.state.time <= 0) {
// アクティブ状態を表示にする
subNode.setEnabled(true);
// 残り時間をリセット
$.state.time = 0;
}
});
サンプル4:インタラクトで表示した5秒後に非表示に戻る
// 子オブジェクトを取得
const subNode = $.subNode("子オブジェクト名");
// 静止物をインタラクトしたときの挙動を設定
$.onInteract(() => {
// 残り時間をリセット
$.state.time = 0;
// アクティブ状態を表示にする
subNode.setEnabled(true);
// 5秒後に非表示にする
$.state.time = ($.state.time ?? 0) + 5;
});
// 更新時の挙動を設定
$.onUpdate((deltaTime) => {
$.state.time = ($.state.time ?? 0) - deltaTime;
if ($.state.time <= 0) {
// アクティブ状態を非表示にする
subNode.setEnabled(false);
// 残り時間をリセット
$.state.time = 0;
}
});
サンプル5:6個の子オブジェクトから1個をランダムに表示する
// 子オブジェクトを配列に入れる
const subNodes = [
$.subNode("子オブジェクト0名"),
$.subNode("子オブジェクト1名"),
$.subNode("子オブジェクト2名"),
$.subNode("子オブジェクト3名"),
$.subNode("子オブジェクト4名"),
$.subNode("子オブジェクト5名"),
];
// 静止物をインタラクトしたときの挙動を設定
$.onInteract(() => {
// 全ての子オブジェクトを非表示にする
for (const subNode of subNodes) {
subNode.setEnabled(false);
}
// ランダムに1つの子オブジェクトを表示状態にする
const index = Math.floor(Math.random() * 6); // 0〜5のランダムな数字を生成
subNodes[index].setEnabled(true);
});
サンプル6:指定した秒数で表示非表示を繰り返す
// 子オブジェクトを取得
const subNode = $.subNode("子オブジェクト名");
// 表示状態を反転する間隔(秒)
const interval = 1;
$.onUpdate(deltaTime => {
// 初期化処理
if ($.state.time == null) {
$.state.time = interval;
}
// 残り時間を更新
$.state.time -= deltaTime;
// 残り時間が0以下になったら、表示状態を反転する
if ($.state.time <= 0) {
subNode.setEnabled(!subNode.getEnabled());
$.state.time = interval;
}
});
参考サイト
最終更新:2022/12/25 Mikok Hietalahti
謝辞
この記事が気に入ったらサポートをしてみませんか?