LT発表スライド完全版
Liteとは言ってない。
スライド
Pin倒れた判定スクリプト(抜粋)
//上方向ベクトルと、自身の上方向ベクトルの内積が0.95以下の場合、倒れていると判定
const upVector = new Vector3(0, 1, 0);
const rot = $.getRotation();
const upVectorSelf = upVector.clone().applyQuaternion(rot);
const dot = upVector.dot(upVectorSelf);
const isDown = dot < 0.95 || $.state.isDown;
if(isDown && !$.state.isDown)
{
playerFlow.send("OnPinDown", {pinId: $.state.pinId});
$.state.isDown = true;
}
StateMachineサンプル
function createStateMachine() {
const states = {};
// 状態を追加する関数
function addState(state, option) {
states[state] = option;
}
// 現在の状態を取得する関数
function getCurrentState() {
return $.state.currentState;
}
// 状態を遷移する関数
function transition(state) {
if (states[state] == null) {
$.log("state not found");
return;
}
const currentState = $.state.currentState;
// 現在の状態のonExit関数を呼び出す
if (states[currentState] != null && states[currentState].onExit != null) {
states[currentState].onExit();
}
// 新しい状態に遷移
$.state.currentState = state;
// 新しい状態のonEnter関数を呼び出す
if (states[state].onEnter != null) {
states[state].onEnter();
}
}
// 現在の状態のonUpdate関数を呼び出す関数
function update(dt) {
const currentState = $.state.currentState;
if (states[currentState] != null && states[currentState].onUpdate != null)
states[currentState].onUpdate(dt);
}
// 現在の状態のonInteract関数を呼び出す関数
function interact(player) {
const currentState = $.state.currentState;
if (states[currentState] != null && states[currentState].onInteract != null)
states[currentState].onInteract(player);
}
return {
addState,
getCurrentState,
transition,
update,
interact,
};
}
let stateMachine = createStateMachine();
stateMachine.addState("stateA", {
onEnter: () => {
$.log("stateA onEnter");
},
onInteract: (player) => {
stateMachine.transition("stateB");
},
onUpdate: (dt) => {
$.log("stateA onUpdate");
},
onExit: () => {
$.log("stateA onExit");
}
});
stateMachine.addState("stateB", {
onEnter: () => {
$.log("stateB onEnter");
},
onInteract: (player) => {
stateMachine.transition("stateC");
},
onUpdate: (dt) => {
$.log("stateB onUpdate");
},
onExit: () => {
$.log("stateB onExit");
}
});
stateMachine.addState("stateC", {
onEnter: () => {
$.log("stateC onEnter");
},
onInteract: (player) => {
stateMachine.transition("stateA");
},
onUpdate: (dt) => {
$.log("stateC onUpdate");
},
onExit: () => {
$.log("stateC onExit");
}
});
$.onStart(() =>
{
stateMachine.transition("stateA");
})
$.onInteract(player =>
{
stateMachine.interact(player);
});
$.onUpdate(dt =>
{
stateMachine.update(dt);
});
余談
以下のDiscordサーバーでギミック相談室とかやってます。
良ければどうぞ。
この記事が気に入ったらサポートをしてみませんか?