見出し画像

【ベータ機能】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 のリリース内容

ベータ機能

新規機能

  • 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 ウィンドウでは以下の操作ができます。

Clear
表示されているログをクリアします。
クリアした内容はログファイルからは削除されません。

Load
表示したいログファイルを読み込みます。
通常は規定のファイルパスにあるログファイルがデフォルトで読み込まれている状態になります。
何らかの理由で Application.persistentDataPath 配下に cluster に関するデータが配置されていない場合や、別のログファイルを読み込みたい場合に利用してください。

検索
テキストボックスに文字を入力するとログを絞り込むことができます。

Pause Log
チェックボックスを有効にするとログの更新を一時停止します。

Open Log
ログファイルを .log に関連付けられたアプリケーションで開きます。

改善

Convex でない MeshCollider のエラー表示改善

Convex でない MeshCollider には isTrigger が設定できないため、一部のコンポーネントをアタッチしている状態だと正常に動作しませんでした。
今回のリリースでは、そのような GameObject が含まれているコンテンツをアップロードしようとした時にエラーが起こるようにし、原因や対処方法が分かるようなエラーメッセージを表示するように変更しました。

UrlTextureUrlRawImage で WrapMode を指定できるようにしました

各コンポーネントに Wrap Mode という選択肢が追加されています。
デフォルトで Repeat 設定になっているので必要に応じて変更してください。

ベータ機能を正式版に上げるには

ベータとして提供される機能は、より多様なコンテンツ体験を実現するための機能です。
しかし使い方によってはコンテンツ体験を悪くすることもできてしまいます。
ベータ機能は、実際にクリエイターの皆様に使い込んでもらうことでその安全性が確かめられます。
正式版に上げていきたい機能ほど、コンテンツに組み込んでいただけると正式版昇格が早くなるので、ご協力いただけると助かります。

ご意見・ご感想お待ちしています

cluster は、みなさんが楽しくバーチャル空間で創造できるように様々な改善を行っています。
Discord ではみなさんの要望を投稿したり、クリエイターさん同士でお互いの創作活動を支え合える場所を設けていますので、ぜひご活用ください!

Discordサーバー: Creator Community のご案内
https://docs.cluster.mu/creatorkit/support/creator-community/