【VRChat】VRC_TriggerのActions一覧

これは、 [VRChat Advent Calendar 2019](https://adventar.org/calendars/3950) の19日目の記事です。



# VRC_TriggerのActions一覧

VRChatのワールド内にボタンとかを設置したい場合、 `VRC_Trigger` というものが必要らしく、先週くらいから触り始めました。

**トリガーで何が起こせるの？**

っていうのをググってみると、少し情報が古かったりで、意外と一覧でまとまっているページが見当たりませんでしたので、作ることにしました。



# Actions一覧

- Unity: 2017.4.28f1
- VRChat SDK: 2019.09.18.12.05

上記の環境で `Actions` を見てみると、以下のようになっていました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/c823d3aa-65af-35d1-cc0f-14981687bc9a.png)

項目がいっぱいありますね！この1つ1つが `Action` と呼ばれるものです！

それぞれの項目の説明は、以下の公式説明ドキュメントに記載があるのですが、一部説明がないものもありました。

[VRChat / v2019.3.2 / Guides / Actions](https://docs.vrchat.com/docs/trigger-actions)

説明がないものは、検索や質問したりして集めた情報を記載しようと思います。

アルファベット順です。



## ActivateCustomTrigger

カスタムトリガーを発火します。

公式説明：https://docs.vrchat.com/docs/activatecustomtrigger



たとえば、

- ボタンAを押したら扉が開く。
- ボタンBを押しても扉は開く。

みたいなシーンを実現したいとします。


以下のように設定すれば一応実現できます。

- ボタンAのActionに、扉が開くアニメーションを設定する。
- ボタンBのActionに、扉が開くアニメーションを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/7781e23c-7e07-a707-1264-f4253f8d686f.png)

しかし、カスタムトリガーを利用すれば、以下のように、共通化できます。

- カスタムトリガーを作成し、そのActionに、扉が開くアニメーションを設定する。
- ボタンAのActionに、カスタムトリガーを設定する。
- ボタンBのActionに、カスタムトリガーを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/8d2f19e6-24e2-a1e6-bc47-9323e1d3b81c.png)

これはいわゆる `UIとロジックの分離` というやつです。（プログラミング界隈でよく聞くやつ）

`扉を開ける` というUIと、 `カスタムトリガーを発火する` というロジックを分離することによって、今後、改良がしやすくなるという利点があります。

たとえば、ボタンC、D、Eみたいのが増えたとしても、それぞれのActionにカスタムトリガーを設定するだけで済みます。

さらに、 `扉が開いたら風のエフェクトを発生させる` みたいな仕様変更があったら、ボタンA～Eすべてを変更するのは大変です！

カスタムトリガーがあれば、カスタムトリガーののActionだけを変更すればよいから楽ですよね！



## AddAngularVelocity

公式に説明がないため、根拠はありませんが、おそらく、 `Rigidbody` に角速度を与えるものだと思います。



## AddDamage

`GameObject` にダメージを与えます。

公式説明：https://docs.vrchat.com/docs/adddamage



## AddForce

`Rigidbody` に力を加えます。

公式説明：https://docs.vrchat.com/docs/vrchat-201821



## AddHealth

`GameObject` にヘルスを与えます。

公式説明：https://docs.vrchat.com/docs/addhealth

おそらく、ダメージで減った体力が回復するのだと思います。



## AddVelocity

公式に説明がないため、根拠はありませんが、おそらく、 `Rigidbody` に速度を与えるものだと思います。



## AnimationBool

指定した `Animator` の `bool` 変数の値を変更します。

公式説明：https://docs.vrchat.com/docs/animationbool



## AnimationFloat

指定した `Animator` の `float` 変数の値を変更します。

公式説明：https://docs.vrchat.com/docs/animationfloat



## AnimationInt

公式に説明がないため、根拠はありませんが、おそらく、指定した `Animator` の `int` 変数の値を変更するものだと思います。



## AnimationIntAdd

指定した `Animator` の `int` 変数の値に、指定した数値を加算します。

公式説明：https://docs.vrchat.com/docs/vrchat-201811



## AnimationIntDivide

指定した `Animator` の `int` 変数の値を、指定した数値で除算します。

公式説明：https://docs.vrchat.com/docs/vrchat-201811



## AnimationIntMultiply

指定した `Animator` の `int` 変数の値に、指定した数値を乗算します。

公式説明：https://docs.vrchat.com/docs/vrchat-201811



## AnimationIntSubtract

指定した `Animator` の `int` 変数の値から、指定した数値を減算します。

公式説明：https://docs.vrchat.com/docs/vrchat-201811



## AnimationTrigger

Animatorのトリガーパラメーターを発火します。

公式説明：https://docs.vrchat.com/docs/animationtrigger



## AudioTrigger

指定した `Audio Source` の `Audio Clip` を再生します。

公式説明：https://docs.vrchat.com/docs/audiotrigger



## DestroyObject

`GameObject` を破棄します。

公式説明：https://docs.vrchat.com/docs/destroyobject



## PlayAnimation

旧 `Animation` コンポーネントのアニメーションを再生します。

公式説明：https://docs.vrchat.com/docs/playanimation



## SendRPC

スクリプトから関数を発火します。

`Advanced Mode` の時のみ利用できます。

公式説明：https://docs.vrchat.com/docs/sendrpc



## SetAngularVelocity

指定した値に、 `Rigidbody` の角速度を変更します。

公式説明：https://docs.vrchat.com/docs/vrchat-201821



## SetComponentActive

`Component` のアクティブ状態を変更します。

公式説明：https://docs.vrchat.com/docs/setcomponentactive



## SetGameObjectActive

`GameObject` のアクティブ状態を切り替えます。

公式説明：https://docs.vrchat.com/docs/setgameobjectactive

例えば、ボタンを押したらパーティクルライブの `Timeline` を開始するみたいなことができます。
`Timeline` を設定した `GameObject` を用意して、この `SetGameObjectActive` でその `GameObject` をアクティブにするという流れです。（パーティクルライブのDiscordで教えてもらいました。）


## SetLayer

指定したレイヤーに、選択した `GameObject` のレイヤーを変更します。

公式説明：https://docs.vrchat.com/docs/setlayer



## SetMaterial

指定したマテリアルに、選択した `GameObject` のマテリアルを変更します。

公式説明：https://docs.vrchat.com/docs/setmaterial



## SetParticlePlaying

パーティクルシステムの放出のアクティブ状態を切り替えます。

公式説明：https://docs.vrchat.com/docs/setparticleplaying



## SetUIText

指定した値に、 `UIText` コンポーネントのテキストを変更します。

公式説明：https://docs.vrchat.com/docs/vrchat-201821



## SetVelocity

指定した値に、 `Rigidbody` の速度を変更します。

公式説明：https://docs.vrchat.com/docs/vrchat-201821



## ~~SetWebPanelURI~~

~~指定したURIをウェブパネルにセットします。~~

現在無効化されているようです。

公式説明：https://docs.vrchat.com/docs/setwebpaneluri



## ~~SetWebPanelVolume~~

~~ウェブパネルの音量を調整します。~~

現在無効化されているようです。

公式説明：https://docs.vrchat.com/docs/setwebpanelvolume



## SpawnObject

指定した `Prefab` をスポーンさせます。

公式説明：https://docs.vrchat.com/docs/spawnobject

`SetGameObjectActive` との違いは、新たな `GameObject` を生成するかどうかです。
Unity C#でいう `Instantiate` 、Playmakerでいう `Create Object` に相当するものかなぁと思います。



## TeleportPlayer

設定した場所にプレイヤーを移動させます。

公式説明：https://docs.vrchat.com/docs/teleportplayer



# さいごに

本記事作成にあたり、以下の記事を参考にさせていただきました。ありがとうございました。

- [VRChat / v2019.3.2 / Guides / Actions](https://docs.vrchat.com/docs/trigger-actions)
- [VRChat / v2019.3.2 / Guides / VRChat 2018.1.1](https://docs.vrchat.com/docs/vrchat-201811)
- [VRChat Document 日本語訳 Wiki / VRC_Trigger / アクション]([https://wikiwiki.jp/vrchat/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%28Component%29](https://wikiwiki.jp/vrchat/アクション(Component)))
- [[VRChat]初学者向けAnimatorの使い方](https://qiita.com/gatosyocora/items/8a5c47c76a60c851077e)
- [Programming in VRChat / Custom Trigger](http://vrcprog.hatenablog.jp/entry/trigger-custom)



これは、 [VRChat Advent Calendar 2019](https://adventar.org/calendars/3950) の19日目の記事でした。
明日は @rakurai5 さんによる [Amplify Shader Editorを用いてメッシュを雪で覆うシェーダーを作る](https://qiita.com/rakurai5/items/c154377f13edfa1088ba) です！