Last active
April 14, 2025 17:12
-
-
Save hobione2k/6adeb4c8010a0c368d09fffc0d41942a to your computer and use it in GitHub Desktop.
ClusterScript ボイスエリア
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// エリアに入ったプレイヤーにグループを設定するやつ // | |
// こちらの記事のサンプルのMixerプレハブが必須 | |
// https://creator.cluster.mu/2025/04/14/voicevolumerateof-sample/ | |
// OverlapDetectorShapeコンポーネントが必要 | |
const DEFAULT_GROUP = 0; // デフォルトのグループ | |
// groupIDを取得 | |
const getGroupId = () => $.getStateCompat("this", "group", "integer"); | |
// getOverlaps()からPlayerHandleをまとめて取得 | |
const getOverlapsPlayer = () => { | |
const overlaps = $.getOverlaps(); | |
const players = overlaps | |
.map((o) => o.handle) | |
.filter((h) => h?.type === "player"); | |
return players; | |
}; | |
// プレイヤー重複排除 | |
const dedupPlayer = (players) => | |
players.filter((p, i) => players.findIndex((p2) => p2.id == p.id) === i); | |
$.onUpdate((deltaTime) => { | |
const prevPlayers = $.state.players || []; // 前のプレイヤー | |
// 重なっているプレイヤーを検出 | |
const players = dedupPlayer(getOverlapsPlayer()); | |
// 新規プレイヤーを取得 | |
const newPlayers = players.filter( | |
(p) => !prevPlayers.some((prev) => prev.id == p.id) | |
); | |
const leavePlayers = prevPlayers.filter( | |
(prev) => prev.exists() && !players.some((p) => p.id == prev.id) | |
); | |
// Debug用 | |
// if (newPlayers.length>0) $.log(newPlayers); | |
// if (leavePlayers.length>0) $.log(leavePlayers); | |
// プレイヤーを保存 | |
$.state.players = players; | |
// 新規プレイヤーにgroupを設定 | |
const group = getGroupId(); | |
newPlayers.forEach((player) => { | |
player.send("group", group); | |
}); | |
// 離れたプレイヤーにデフォルトgroupを設定 | |
leavePlayers.forEach((player) => { | |
player.send("group", DEFAULT_GROUP); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment