$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

特定ユーザーがインタラクトした時だけ横にアイテムを生成するclusterギミックを作った

たとえばマグカップなどの限定アイテムを作ってもらった時に、ワールドに飾りつつ自分がやりたい時だけ持てるアイテムとして生成できたら嬉しいなと思い、特定ユーザーがインタラクトした時だけ横にアイテムを生成するclusterギミックを作ってみた。

https://shibayu36.booth.pm/items/6290948 でunitypackageを公開しています。

動作の様子

他の人が触ると動作しないことを動画では示せてないが、指定した人が触ると横にアイテムが生成される。

使い方

  1. SceneにUserRestrictedClonerを配置
  2. BaseItemのScriptable ItemのSource Code部分の一番上のshibayu36の部分を、自分が指定したいユーザーのuserIdに書き換える。userIdとは@から始まるもの。
  3. BaseItemのCube部分を自分の配置したいモデルに置き換える
  4. BaseItemのCreate Item GimmickのItem Templateに生成したいprefabを設定する。prefabにはItemコンポーネントがついている必要がある
    • たとえばBaseItemで設定したモデルにGrabbable Itemコンポーネントをつけたprefabを設定することで、飾っているアイテムの持てるバージョンを生成できる

Tips

インタラクトしたユーザーを取るにはonInteractのplayerを使えばいい

https://docs.cluster.mu/script/interfaces/ClusterScript.html#onInteract

$.onInteract(player => {
  // このplayerにuserIdなどが入っている
  $.log(player.userId)
});

同期の問題で2つアイテムが生成されないように、アイテム生成は時間を遅延させる

この記事に書いてあるとおり、スクリプトからシグナル発火 -> Create Item Gimmickが受け取るだと、Ownerの移り変わりでアイテムが二個生成されることがあった。 これの回避のため、いったんItem Timerを噛ませて遅延させてCreate Item Gimmickを実行している。これでうまく行くのかは不明だが、いったん発生しなくなったので良しとする。