【ベータ機能】HumanoidAnimation が補間できるようになりました!その他、複数の改善をしました!【Cluster Creator Kit v2.10.0 リリースノート】
こんにちは、プロダクトマネージャーの Smith です。
メタバースプラットフォーム cluster では、クリエイターのみなさんの創造力をより加速できるように制作環境の改善を行っています。
この記事では 3/25 の cluster アプリのリリース、及び Creator Kit 2.10.0 で新たに提供されるベータ機能の仕様及び改善項目の内容を紹介します。
Creator Kit 2.10.0 の利用方法
今回のリリースに含まれる一部の機能は Cluster Creator Kit v2.10.0 へのアップデートが必要です。
また、今回のリリースに含まれるベータ機能は最新版の cluster アプリで動作しますので必ずアップデートをしてください。
Cluster Creator Kit のアップデート手順はドキュメントに記載されています。
Creator Kit 2.10.0 のリリース内容
ベータ機能
HumanoidAnimation 補間 API インターフェース
PlayerHandle.setHumanoidPose のインターフェース追加
新規機能
Unity UI にスクリプト関連ログ表示 UI の追加
改善内容
Convex でない MeshCollider のエラー表示改善
UrlTextureでWrapModeを指定できるようにする
【ベータ機能】HumanoidAnimation 補間 API インターフェース
既にベータ機能として提供されている PlayerHandle.setHumanoidPose に、ポーズ間の補間を有効にするためのインターフェースが追加されました。補間が入ることでポーズが変更される時の挙動が自然になります。
詳しくはスクリプトリファレンスを参照してください。
setHumanoidPose(
pose: HumanoidPose,
option?: {
timeoutSeconds: number?,
timeoutTransitionSeconds: number?,
transitionSeconds: number?
}
):void
使い方(例: アニメーションの開始時と終了時に緩やかな補間を入れ、アニメーション中は滑らかに補間させる)
この例では、最初と最後、そして途中のポーズに対する設定を変えることでアニメーション開始から終わりまで滑らかに動作するようにしています。
最初のアニメーションフレームでは transitionSeconds を 0.5 秒に設定し、緩やかにアニメーションを開始
途中のアニメーションフレームでは transitionSeconds を 0.1秒に設定し、滑らかな見た目になるように補間
最後のアニメーションフレームで timeoutSeconds を 0 に設定し、timeoutTransitionSeconds で 0.5 秒かけて緩やかに元の姿勢に戻す
const anim = $.humanoidAnimation("dancing");
const len = anim.getLength();
const interval = 0.1;
const inOutInterval = 0.5;
$.onInteract(playerHandle => {
if (!!$.state.playerHandle) {
$.state.playerHandle.setHumanoidPose(null);
$.state.playerHandle = null;
}
$.state.playerHandle = playerHandle;
$.state.enterTime = 0;
$.state.nextAnimationTime = 0;
$.state.intervalWait = 0;
});
$.onUpdate(dt => {
if (!$.state.playerHandle) {
return;
}
// 最初のポーズの場合
if ($.state.enterTime === 0) {
const opt = {};
opt.transitionSeconds = inOutInterval;
$.state.playerHandle.setHumanoidPose(anim.getSample($.state.nextAnimationTime), opt);
$.state.enterTime = $.state.enterTime + dt;
return;
}
// 最初のポーズに遷移中の場合
if ($.state.enterTime < inOutInterval) {
$.state.enterTime = $.state.enterTime + dt;
return;
}
// 最後のポーズの場合
if ($.state.nextAnimationTime > len) {
const opt = {};
opt.timeoutSeconds = 0.0;
opt.timeoutTransitionSeconds = inOutInterval;
$.state.playerHandle.setHumanoidPose(anim.getSample(len), opt);
$.state.playerHandle = null;
return;
}
// 遷移中
if ($.state.intervalWait < interval) {
$.state.intervalWait = $.state.intervalWait + dt;
return;
}
const opt = {};
opt.transitionSeconds = interval;
$.state.playerHandle.setHumanoidPose(anim.getSample($.state.nextAnimationTime), opt);
$.state.nextAnimationTime = $.state.nextAnimationTime + interval;
$.state.intervalWait = 0;
});
また、このサンプルでは用いていませんが、timeoutSeconds を指定することで、アバターのポーズが意図せず変わりっぱなしになる状態を防ぐことができます。
【新規機能】Unity UI にスクリプト関連ログ表示 UI の追加
前回の v2.9.0 でアプリ内コンソールに追加されたログのファイル出力機能が、Creator Kit をインストールしている Unity プロジェクトの UI 上でも確認できるようになりました。
新たにメニュー項目が追加されています、 Cluster > ClusterScript Log Console から起動してください。
ClusterScript Log Console ウィンドウでは以下の操作ができます。
改善
Convex でない MeshCollider のエラー表示改善
Convex でない MeshCollider には isTrigger が設定できないため、一部のコンポーネントをアタッチしている状態だと正常に動作しませんでした。
今回のリリースでは、そのような GameObject が含まれているコンテンツをアップロードしようとした時にエラーが起こるようにし、原因や対処方法が分かるようなエラーメッセージを表示するように変更しました。
UrlTexture と UrlRawImage で WrapMode を指定できるようにしました
各コンポーネントに Wrap Mode という選択肢が追加されています。
デフォルトで Repeat 設定になっているので必要に応じて変更してください。
ベータ機能を正式版に上げるには
ベータとして提供される機能は、より多様なコンテンツ体験を実現するための機能です。
しかし使い方によってはコンテンツ体験を悪くすることもできてしまいます。
ベータ機能は、実際にクリエイターの皆様に使い込んでもらうことでその安全性が確かめられます。
正式版に上げていきたい機能ほど、コンテンツに組み込んでいただけると正式版昇格が早くなるので、ご協力いただけると助かります。
ご意見・ご感想お待ちしています
cluster は、みなさんが楽しくバーチャル空間で創造できるように様々な改善を行っています。
Discord ではみなさんの要望を投稿したり、クリエイターさん同士でお互いの創作活動を支え合える場所を設けていますので、ぜひご活用ください!
Discordサーバー: Creator Community のご案内
https://docs.cluster.mu/creatorkit/support/creator-community/