Programming in VRChat

VRChat でのプログラミングについて調べたことの書き溜め

Trigger

trigger system はワールドの中で発生する事象と、それへの反応動作を定義する機構である。 実際の具体的な処理は VRC_Trigger コンポーネントに設定する。

用語、資料

  • Trigger とは
    • action を引き起こすきっかけ。
    • プレイヤーがオブジェクトを拾い上げる操作をした、オブジェクトが衝突した、など
    • 広い意味でシステムへの入力
    • (他システムで言うところのイベント)
  • Action とは
    • trigger への反応として行われること。
    • 音を鳴らす、オブジェクトを生成する、など
    • 入力に対するワールドの反応動作
  • API: https://docs.vrchat.com/docs/trigger-summary
  • trigger 一覧
  • action 一覧

設定

  • 具体的な trigger と action の対応付け(と、action の詳細)定義は、 GameObject に追加した VRC_Trigger コンポーネントの中で行う。 VRC_Trigger は動きのあるワールドを作成する際に要(かなめ)となる。

  • TODO 基本的な設定方法について記述

  • TODO advanced のチェックボックスについて記述
    • advanced をチェックすると、いろいろ選択項目が増える。複雑な仕組みを作成する場合には必要になる。 (意外なところの選択肢が増えるので注意)

アクションの実行確率設定

f:id:naqtn:20180408103702p:plain:w300

  • (公式ドキュメントが書かれていないので、以下は推測に基づいています)
  • VRC_Trigger 設定中 Advanced Mode のチェックを付けると、各トリガーについて Randomizeチェックボックスが出現する。それをチェックすると各アクションに実行確率の数値設定欄が現れる。
    • ただし Randomize をチェックする前に少なくとも一つのアクション設定が必要。
  • 数値はアクションの実行確率。各アクションの合計で 1.0 を超えないようになっている。スライダーでも数値を入力できる。
  • 入力した合計値が 1.0 を超えた場合には、自動的に調整される。…つもりらしいのだが、不具合があるので要注意。
    • Unity のエディタが操作できなくなくなる場合がある。
    • 対策:この機能を使わないで済むように 1.0 を超えないように入力する。ある項目の確率を増やしたい場合は他の項目を下げてから入力する。
    • (VRCSDK-2018.02.28.21.21_Public で不具合確認。 VRCSDK/Dependencies/VRChat/Editor/VRC_TriggerEditor.cs line466 do-while が無限ループになり抜け出せないようだ。浮動小数を不用意にループ制御に使っているパターン)
    • 本来は各項の比率を保って合計が 1.0 になるように調整する、という仕様のようだ。
  • 左側のチェックは 合計値が 1.0 を超えた場合に調整される際の「可能なら変化させないようにする項目」を指定するもの、らしい。
    • チェックが付いていないものの数値が優先的に下げられる。
    • だが不具合があるので現状ではまともに活用できない。)