クラフトアイテムで楽屋口をつくる方法
1 はじめに
音楽ホールには
スタッフしか通れない楽屋口があります
舞台と客席の導線を
明確に区分するためのものですが
セキュリティを確保したり
『もぎり』での混乱を回避したりする
実務的な効果があります
また、副次的ではありますが
舞台そのものを聖域化する
演出上の特別な効果をもたらします
この記事は
Cluster『ワールドクラフト』の
クラフトアイテムで
楽屋口をつくりたい方に向けて
執筆しています
2 楽屋口 ~スタッフ判定システム~
3 機能の概要
① プレイヤーネーム内の文字列判定機能
プレイヤーネーム内の任意の
文字列(例『staff』)を
判別してワープ先を分岐させる機能
※セキュリティを担保するものではありません
② パスワード判定機能
パスワード(例『634』)を
判別して正答者のみワープさせる機能
※行事毎に変えてセキュリティを担保します
4 先人たちの知恵
上記の機能を実現するために参考にした記事
・ ネームを読む『vinsさん』のscript
・ パスを設定する『きえらさん』のscript
5 事前の準備
3Dモデル(例『PASS WORD』)を
Unity に読み込みCCKでコライダーを付け
コンポーネントで
『Scriptable Item』を追加します
動画の①②機能の3Dモデルは
メッシュが異なりますが
アイテムの設定は両方とも同じです
6 Script
① プレイヤーネーム内の文字列判定機能のScript
const updatePerSec = 0.5; //何秒に一度チェックするか?
const distance = 2.0; //何m以内に来たらあいさつするか?
function initProc() {
$.state.isInitialized = true;
$.state.tick = 0;
}
$.onUpdate((deltaTime) => {
//初期化処理
if (!$.state.isInitialized) {
initProc();
}
//一定間隔でしか更新しない
$.state.tick += deltaTime;
if($.state.tick < updatePerSec) return;
$.state.tick -= updatePerSec;
$.getPlayersNear($.getPosition(), distance).forEach((player) => {
//近くのユーザー名を取得
let userDisplayName = player.userDisplayName;
let text = userDisplayName;
if (text.includes("staff")) {
player.setPosition(new Vector3(0,0,0));
} else {
player.setPosition(new Vector3(1,1,1));
}
});
});
カスタムポイント
const distance = 2.0;
//2.0の値を変えることでプレイヤーを感知する距離を変更できます
$.getPlayersNear($.getPosition(), distance).forEach((player) => {
//近くのユーザー名を取得
let userDisplayName = player.userDisplayName;
let text = userDisplayName;
if (text.includes("staff")) {
//("")内の文字列を変えることでワープを分岐させる対象を変更できます
player.setPosition(new Vector3(0,0,0));
//x,y,z座標の値を変えることで対象者のワープ位置を変更できます
} else {
player.setPosition(new Vector3(1,1,1));
//x,y,z座標の値を変えることで対象者以外の者のワープ位置を変更できます
}
});
② パスワード判定機能のScript
const requestMeta = "入室確認";// requestTextInputを識別するために使う
const output = "Password";
const defArr = ["634"]; // 指定したい単語の配列
var accept = 0;
//効果音定義
const se = $.audio("Audio1");
$.onTextInput((text, meta, status) => {
switch (status) {
case TextInputStatus.Success:
if (defArr.includes(text)) {
// 入力文字がdefArrの中に入っているときの処理を書く
$.log("Accept");
//許諾ビット
accept = 1
}
break;
}
});
$.onInteract(player => {
$.state.count++;
switch(accept) {
case 0:
try {
player.requestTextInput(requestMeta, output);
se.play();
} catch (e) {
// $.log(e);
}
break;
case 1:
player.setPosition(new Vector3(0,0,0));
$.log("Warp");
//許諾ビット
accept = 0
break;
}
})
カスタムポイント
const defArr = ["634"];
//[""]内の文字列を変えることでパスワードを変更できます
player.setPosition(new Vector3(0,0,0));
//x,y,z座標の値を変えることでパスワード入力後のインタラクトワープ位置を変更できます
7 Special Thanks
これらのScriptは
先に紹介した偉大な方々のScriptでできてます
vinsさんときえらさんのお二人に感謝です