こんばんは。ハツェです。
今回も、Udonをスクリプトで制作するための記事を書いていきます。
前回はuGUIでUdonを扱う方法について紹介しました。
今回はもう前提知識として伝えることは伝えたので、おまけ回です。
動作環境は、Unity : 2019.4.29f1、VRCSDK : 2021.08.11.15.16、U# : v0.20.2です。
目次
- U#公式のWIki
- 昔のTriggerに対応するイベント関数
- OnEnable
- OnDisable
- OnSpawn
- OnDestroy
- OnInteract
- OnNetworkReady
- OnPlayerJoined
- OnPlayerLeft
- OnPickup
- OnPickupUseDown
- OnPickupUseUp
- OnDrop
- OnTimer
- OnEnterTrigger
- OnTriggerStay
- OnExitTrigger
- OnEnterCollider
- OnCollisionStay
- OnExitCollider
- OnControllerColliderHit (旧OnAvaterHit)
- OnOwnershipTransfer
- OnKeyDown
- OnKeyUp
- OnStationEntered
- OnStationExited
- OnParticleCollision
- 2020/09/19以降に追加されたイベント関数
- 2021/03/11以降に追加されたイベント関数
- 2021/07/08以降に追加されたイベント関数
- 2023/02/23以降に追加されたイベント関数
- 頻度が高い or 凄い長い型や属性や関数
U#公式のWIki
公式Wikiは全て英語記載です。
イベント関数表
API等
使用出来る属性表
昔のTriggerに対応するイベント関数
OnEnable
オブジェクトを有効化した際に呼ばれる関数
void OnEnable() { }
OnDisable
オブジェクトを無効化した際に呼ばれる関数
void OnDisable() { }
OnSpawn
オブジェクトが生成された際に呼ばれる関数
public override void OnSpawn() { }
OnDestroy
オブジェクトが破壊された際に呼ばれる関数
void OnDestroy() { }
OnInteract
UdonBehaviorがアタッチされたオブジェクトをインタラクトした際に呼ばれる関数
public override void Interact() { }
OnNetworkReady
完全に対応するものはないです。
代わりとまでは行きませんが、一応OnPreSerializationとOnDeserializationというものがあります。
OnPreSerialization
シリアル化されたデータが送信される直前に呼ばれる関数
オーナー以外のプレーヤー用に更新する同期変数を設定するのに適しています。
public override void OnPreSerialization() { }
OnDeserialization
変数が同期された時に呼ばれる関数
同期変数を受信した段階で処理を設定するのに適しています。
public override void OnDeserialization() { }
OnPlayerJoined
プレイヤーがインスタンスに入ってきた際に呼ばれる関数
public override void OnPlayerJoined(VRCPlayerApi player) { }
OnPlayerLeft
プレイヤーがインスタンスから抜けた際に呼ばれる関数
public override void OnPlayerLeft(VRCPlayerApi player) { }
OnPickup
Pickupオブジェクトをピックアップした際に呼ばれる関数
public override void OnPickup() { }
OnPickupUseDown
AutoHoldがYesのPickupオブジェクトをつかんでいる時、トリガーを引いた際に呼ばれる関数
public override void OnPickupUseDown() { }
OnPickupUseUp
AutoHoldがYesのPickupオブジェクトをつかんでいる時、トリガーを離した際に呼ばれる関数
public override void OnPickupUseUp() { }
OnDrop
Pickupオブジェクトのピックアップを離した際に呼ばれる関数
public override void OnDrop() { }
OnTimer
対応するものはないです。
なので、Update関数内とかでカウントダウン機構を作る必要があります。
OnEnterTrigger
コライダーに入った時かつ衝突するオブジェクトのうち、1つ以上にIsTriggerにチェックがついていた際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら。
void OnTriggerEnter(Collider other) { }
void OnTriggerEnter2D(Collider2D other) { }
OnTriggerStay
おまけで掲載。
コライダー内にいるかつ衝突するオブジェクトのうち、1つ以上にIsTriggerにチェックがついていた際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら
void OnTriggerStay(Collider other) { }
void OnTriggerStay2D(Collider2D other) { }
OnExitTrigger
コライダーから出る時かつ衝突するオブジェクトのうち、1つ以上にIsTriggerにチェックがついていた際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら
void OnTriggerExit(Collider other) { }
void OnTriggerExit2D(Collider2D other) { }
OnEnterCollider
コライダーに入った時かつ衝突するオブジェクトのうち、どっちにもIsTriggerにチェックがついていない際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら
void OnCollisionEnter(Collision other) { }
void OnCollisionEnter2D(Collision2D other) { }
OnCollisionStay
おまけで掲載。
コライダー内にいる時かつ衝突するオブジェクトのうち、どっちにもIsTriggerにチェックがついていない際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら
void OnCollisionStay(Collision other) { }
void OnCollisionStay2D(Collision2D other) { }
OnExitCollider
コライダーから出る時かつ衝突するオブジェクトのうち、どっちにもIsTriggerにチェックがついていない際に呼ばれる関数
プレイヤーの判定には使えません。プレイヤー用の関数はこちら
void OnCollisionExit(Collision other) { }
void OnCollisionExit2D(Collision2D other) { }
OnControllerColliderHit (旧OnAvaterHit)
プレイヤーと衝突した際に呼ばれる関数
※現状は機能してない模様※
廃止されました。正式に実装されたものはOnPlayerTriggerEnter以下をご覧ください。
public void OnControllerColliderHit(ControllerColliderHit hit) { }
OnOwnershipTransfer
オブジェクトのOwnerが移った際に呼ばれる関数
public override void OnOwnershipTransferred() { }
OnKeyDown
対応するものはないです。
追加アップデートで一部対応しました。
なので、Update関数内で以下のような記述をする必要があります。
void Update() { if(Input.GetKeyDown(/*KeyCode*/)) { } }
OnKeyUp
対応するものはないです。
追加アップデートで一部対応しました。
なので、Update関数内で以下のような記述をする必要があります。
void Update() { if(Input.GetKeyUp(/*KeyCode*/)) { } }
OnStationEntered
Stationに入った時に呼ばれる関数
public override void OnStationEntered() { }
OnStationExited
Stationから出た時に呼ばれる関数
public override void OnStationExited() { }
OnParticleCollision
パーティクルがGameObjectのコライダーに衝突した際に呼ばれる関数
プレイヤーは取得できないため、代わりにOnPlayerParticleCollisionを使う必要があります。
void OnParticleCollision(GameObject other) { }
2020/09/19以降に追加されたイベント関数
OnVideoReady
自身のオブジェクトのビデオプレイヤーが準備完了した際に呼ばれる関数
public override void OnVideoReady() { }
OnVideoStart
自身のオブジェクトのビデオプレイヤーが停止状態から再生を開始した際に呼ばれる関数
public override void OnVideoStart() { }
OnVideoPlay
自身のオブジェクトのビデオプレイヤーがキュー内の新たなビデオの開始・一時停止解除・プレイヤーの操作により再生を開始した際に呼ばれる関数
public override void OnVideoPlay() { }
OnVideoPause
自身のオブジェクトのビデオプレイヤーが一時停止した際に呼ばれる関数
public override void OnVideoPause() { }
OnVideoEnd
自身のオブジェクトのビデオプレイヤーの再生が終了した場合、もしくはプレイヤーによって止められた場合に呼ばれる関数
public override void OnVideoPause() { }
OnVideoLoop
自身のオブジェクトのビデオプレイヤーがループした際に呼ばれる関数
public override void OnVideoLoop() { }
OnVideoError
自身のオブジェクトのビデオプレイヤーに何かしらのエラーが発生した際に呼ばれる関数
public override void OnVideoError(VideoError videoError) { }
OnPlayerTriggerEnter
プレイヤーがIsTriggerのついたコライダーに入った際に呼ばれる関数
public override void OnPlayerTriggerEnter(VRCPlayerApi player) { }
OnPlayerTriggerStay
プレイヤーがIsTriggerのついたコライダー内にいる時に呼ばれる関数
public override void OnPlayerTriggerStay(VRCPlayerApi player) { }
OnPlayerTriggerExit
プレイヤーがIsTriggerのついたコライダーから出た際に呼ばれる関数
public override void OnPlayerTriggerExit(VRCPlayerApi player) { }
OnPlayerCollisionEnter
プレイヤーがIsTriggerのついていない物理挙動で動いているコライダーに入った際に呼ばれる関数
静止したオブジェクトに対しては反応しないため、静止オブジェクトには代わりにOnPlayerTriggerEnterを使います。
public override void OnPlayerCollisionEnter(VRCPlayerApi player) { }
OnPlayerCollisionStay
プレイヤーがIsTriggerのついていない物理挙動で動いているコライダー内にいる際に呼ばれる関数
静止したオブジェクトに対しては反応しないため、静止オブジェクトには代わりにOnPlayerTriggerStayを使います。
public override void OnPlayerCollisionStay(VRCPlayerApi player) { }
OnPlayerCollisionExit
プレイヤーがIsTriggerのついていない物理挙動で動いているコライダーから出た際に呼ばれる関数
静止したオブジェクトに対しては反応しないため、静止オブジェクトには代わりにOnPlayerTriggerExitを使います。
public override void OnPlayerCollisionExit(VRCPlayerApi player) { }
OnPlayerParticleCollision
プレイヤーとParticleのCollisionが衝突した際に呼ばれる関数
ParticleSystemでSendCollisionMessagesをOnにしておく必要があります。
public override void OnPlayerParticleCollision(VRCPlayerApi player) { }
2021/03/11以降に追加されたイベント関数
入力系については以下の情報が全てに当てはまります。
- value : args.boolValueもしくはargs.floatValueのどちらかの情報を入力値に応じて示す変数
- args.eventType : 入力している媒体がBUTTONかAXISかを出力する変数
- args.boolValue : boolの入力値を示す変数
- args.floatValue : floatの入力値を示す変数
- args.handType : VRなら右手か左手かを出力、デスクトップならキーボードを左手、マウスを右手として示す変数
一方、MIdi系については以下の情報が当てはまります。
- channel : 取得したMidiチャンネルを示す変数
- number : 取得した0~127のNote番号を示す変数
- velocity : 取得したMidiNoteの強さや速度を示す変数
- value : 取得したコントローラーから出力された値を示す変数
InputJump
Jumpに用いるボタンが押された際に呼ばれる関数
public override void InputJump(bool value, UdonInputEventArgs args) { }
InputUse
Useに用いるボタンが押された際に呼ばれる関数
public override void InputUse(bool value, UdonInputEventArgs args) { }
InputGrab
Grabに用いるボタンが押された際に呼ばれる関数
public override void InputGrab(bool value, UdonInputEventArgs args) { }
InputDrop
Dropに用いるボタンが押された際に呼ばれる関数
public override void InputDrop(bool value, UdonInputEventArgs args) { }
InputMoveHorizontal
移動の水平方向に用いるボタン及びスティックが入力されている際に呼ばれる関数
実質左スティックの水平方向の値が取得出来ます。
public override void InputMoveHorizontal(float value, UdonInputEventArgs args) { }
InputMoveVertical
移動の垂直方向に用いるボタン及びスティックが入力されている際に呼ばれる関数
実質左スティックの垂直方向の値が取得出来ます。
public override void InputMoveVertical(float value, UdonInputEventArgs args) { }
InputLookHorizontal
視点の水平方向が移動した(視点ポイントに差異が生じた)際に呼ばれる関数
VRコントローラーの場合、ComfortTurningの移動設定をしていない場合のみ使用可能と公式ドキュメントには書いてあるが、実質右スティックの水平方向の値が取得出来ます。
public override void InputLookHorizontal(float value, UdonInputEventArgs args { }
InputLookVertical
視点の垂直方向が移動した(視点ポイントに差異が生じた)際に呼ばれる関数
現在はVRのコントローラーには対応していないと公式ドキュメントには書いてあるが、実質右スティックの垂直方向の値が取得出来ます。
public override void InputLookVertical(float value, UdonInputEventArgs args) { }
MidiNoteOn
Midiキーボードを押した(MidiNoteのOnメッセージを受信した)際に呼ばれる関数
public override void MidiNoteOn(int channel, int number, int velocity) { }
MidiNoteOff
Midiキーボードを離した(MidiNoteのOffメッセージを受信した)際に呼ばれる関数
public override void MidiNoteOff(int channel, int number, int velocity) { }
MidiControlChange
Midiデバイスのスライダーやノブを変更した(コントロールの変更を受信した)際に呼ばれる関数
public override void MidiControlChange(int channel, int number, int value) { }
OnPlayerRespawn
落下したり、Respawnボタンを押したりしてプレイヤーがRespawnした際に呼ばれる関数
public override void OnPlayerRespawn(VRCPlayerApi player) { }
2021/07/08以降に追加されたイベント関数
OnValueChanged
変数の値が変更された時に呼ばれるイベント
詳しくはこちらを参照
PostLateUpdate
IKが計算された後のフレームの終わり付近で呼ばれる関数
public override void PostLateUpdate()
2023/02/23以降に追加されたイベント関数
OnImageLoadSuccess
画像が正常にダウンロードされた際に呼ばれる関数
public override void OnImageLoadSuccess(VRC.SDK3.Image.IVRCImageDownload result)
OnImageLoadError
画像がダウンロード出来なかった際に呼ばれる関数
public override void OnImageLoadError(VRC.SDK3.Image.IVRCImageDownload result)
他にもUnityにあるイベント関数も使うことが出来ます。
使えるイベント関数はこちらをご覧ください。
全て
void ~~~~~~() {}
で使用することが出来ると思います。例えば、
void OnJointBreak(float breakForce)
とかOnRenderImage(RenderTexture source, RenderTexture destination)
とか。頻度が高い or 凄い長い型や属性や関数
UdonSync
[UdonSynced(UdonSyncMode.None)] [UdonSynced(UdonSyncMode.Linear)] [UdonSynced(UdonSyncMode.Smooth)] [UdonSynced(UdonSyncMode.NotSynced)]
SendCustomNetworkEvent
SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "FunctionName"); SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.Owner, "FunctionName");
LocalPlayerの取得
var localPlayer = Networking.LocalPlayer
オーナーの判別
var flag = Networking.IsOwner(TargetGameobject);
VideoPlayerの型
private VRC.SDK3.Video.Components.Base.BaseVRCVideoPlayer _videoPlayer;
VRCInputField
private VRC.SDK3.Components.VRCUrlInputField _inputfield;
PlayHapticEventInHand
Networking.LocalPlayer.PlayHapticEventInHand(VRC_Pickup.PickupHand.Left, 0, 0, 0); Networking.LocalPlayer.PlayHapticEventInHand(VRC_Pickup.PickupHand.Right, 0, 0, 0);
関数を再帰的に使用する際に用いる属性
[RecursiveMethod]
private 型 関数名 { }