🕒
ワールドクラフトでアナログ時計
リクエストをサクっと処理。
ワールドクラフトで使えるアナログ時計です。
unitypackage
cluster公式さんの「テンプレートワールド」など、クラフトアイテムをアップロードできる状態のUnityのプロジェクトに読み込んでください。
モデル・マテリアル・スクリプトなどなど、改変はお好きにどうぞ~
https://vins-jp.sakura.ne.jp/pack/wc_clock.unitypackage
基本に自信がない人は
クラフトアイテムアップロードの基本はこの記事を。
スクリプトの基本はこの記事を。
スクリプト全文
秒針が要らない場合はrotatorNumを2にして、プレハブの中にあるClockHand2を削除しちゃってください。
その場合、refreshPerTickも10.0か15.0くらいに上げてしまって良いでしょう。わずかなりとも動作が軽くなります。
最初に出したときのスクリプト、短針の動きがおかしかった(1時間経つまで短針が全く動かなかった)ので修正しました。。。スミマセン
const refreshPerTick = 1.0;
const rotatorNum = 3;
const rotatorsAr = [];
for (let rotatorNo = 0; rotatorNo < rotatorNum; rotatorNo++) {
rotatorsAr.push($.subNode("ClockHand" + rotatorNo));
}
const initProc = () => {
$.state.initialized = true;
$.state.tick = 0;
checkClock();
}
const checkClock = () => {
const nowTime = new Date();
const minutes = nowTime.getMinutes();
const minutesRot = minutes * 360 / 60;
const hoursRot = (nowTime.getHours() % 12+minutes/60) * 360 / 12;
rotatorsAr[0].setRotation(new Quaternion().setFromEulerAngles(new Vector3(0, 0, -hoursRot)));
rotatorsAr[1].setRotation(new Quaternion().setFromEulerAngles(new Vector3(0, 0, -minutesRot)));
if (rotatorNum >= 3) {
const secondsRot = nowTime.getSeconds() * 360 / 60;
rotatorsAr[2].setRotation(new Quaternion().setFromEulerAngles(new Vector3(0, 0, -secondsRot)));
}
}
$.onUpdate((deltaTime) => {
if (!$.state.initialized) {
initProc();
}
$.state.tick += deltaTime;
if ($.state.tick >= refreshPerTick) {
checkClock();
$.state.tick -= refreshPerTick;
}
});
$.onInteract((flag) => {
//クリックしてOwnerになって滑らかな動きにするためだけに付けている
});
Discussion