アニメーション再生エリア
animationAreaOn(Script Item、Humanoid Animation List -> ID:Animation1)
└ OverlapCollider(Overlap Detector Shape)
// アニメーションクリップを取得
const animation = $.humanoidAnimation("Animation1");
// アニメーションクリップの長さを取得
const animationLength = animation.getLength();
// アニメーション適用間隔を設定(プレイヤーへの操作の頻度制限)
const interval = 0.1;
// 定期処理
$.onUpdate(deltaTime => {
if (!$.state.initialized) {
$.state.initialized = true;
$.state.overlapPlayers = [];
$.state.time = 0.0;
}
let previousOverlapPlayers = $.state.overlapPlayers;
let currentOverlapPlayers = [];
let overlaps = $.getOverlaps();
// コライダーに侵入
overlaps.forEach(overlap => {
$.state.playerHandle = overlap.handle;
if ($.state.playerHandle == null) return;
currentOverlapPlayers.push($.state.playerHandle.id);
//if (previousOverlapPlayers.includes($.state.playerHandle.id)) return;
if (!$.state.initialized2) {
$.state.initialized2 = true;
$.state.playerHandle = null;
$.state.animationTime = 0;
$.state.waitingTime = 0;
}
// アニメーションの再生時間を更新
let animationTime = $.state.animationTime + deltaTime;
// 前回ポーズを設定してからの時間を更新
let waitingTime = $.state.waitingTime + deltaTime;
// 前回ポーズを設定してから一定時間が経過していた場合にポーズを更新
if (waitingTime >= interval) {
// アニメーションクリップから現在の再生時間でのポーズを取得
let pose = animation.getSample(animationTime);
// プレイヤーにポーズを適用
$.state.playerHandle.setHumanoidPose(pose);
// 経過時間をリセット
waitingTime = 0;
}
$.state.animationTime = animationTime;
$.state.waitingTime = waitingTime;
});
$.state.overlapPlayers = currentOverlapPlayers;
});
アニメーション解除エリア
animationAreaOff(Script Item)
└ OverlapCollider(Overlap Detector Shape)
// 定期処理
$.onUpdate(deltaTime => {
if (!$.state.initialized) {
$.state.initialized = true;
$.state.overlapPlayers = [];
$.state.time = 0.0;
}
let previousOverlapPlayers = $.state.overlapPlayers;
let currentOverlapPlayers = [];
let overlaps = $.getOverlaps();
// コライダーに侵入
overlaps.forEach(overlap => {
$.state.playerHandle = overlap.handle;
if ($.state.playerHandle == null) return;
currentOverlapPlayers.push($.state.playerHandle.id);
//if (previousOverlapPlayers.includes($.state.playerHandle.id)) return;
$.state.playerHandle.setHumanoidPose(null);
});
$.state.overlapPlayers = currentOverlapPlayers;
});

