イベント
書ける形(125)
Section titled “書ける形(125)”override で書くものが 82 個、名前と引数の型で認識されるものが 43 個です。型は完全な名前で書いてあります。using を書けば短い名前で書けます。
基底の宣言を override して書くもの
Section titled “基底の宣言を override して書くもの”宣言は基底が持っているので、public override を付けて書きます。
| 書き方 | 呼ばれる名前 | 引数が入る変数 |
|---|---|---|
void InputDrop(bool value, VRC.Udon.Common.UdonInputEventArgs args) | _inputDrop | inputDropBoolValue inputDropArgs |
void InputGrab(bool value, VRC.Udon.Common.UdonInputEventArgs args) | _inputGrab | inputGrabBoolValue inputGrabArgs |
void InputJump(bool value, VRC.Udon.Common.UdonInputEventArgs args) | _inputJump | inputJumpBoolValue inputJumpArgs |
void InputLookHorizontal(float value, VRC.Udon.Common.UdonInputEventArgs args) | _inputLookHorizontal | inputLookHorizontalFloatValue inputLookHorizontalArgs |
void InputLookVertical(float value, VRC.Udon.Common.UdonInputEventArgs args) | _inputLookVertical | inputLookVerticalFloatValue inputLookVerticalArgs |
void InputMoveHorizontal(float value, VRC.Udon.Common.UdonInputEventArgs args) | _inputMoveHorizontal | inputMoveHorizontalFloatValue inputMoveHorizontalArgs |
void InputMoveVertical(float value, VRC.Udon.Common.UdonInputEventArgs args) | _inputMoveVertical | inputMoveVerticalFloatValue inputMoveVerticalArgs |
void InputUse(bool value, VRC.Udon.Common.UdonInputEventArgs args) | _inputUse | inputUseBoolValue inputUseArgs |
void Interact() | _interact | — |
void MidiControlChange(int channel, int number, int value) | _midiControlChange | midiControlChangeChannel midiControlChangeNumber midiControlChangeValue |
void MidiNoteOff(int channel, int number, int velocity) | _midiNoteOff | midiNoteOffChannel midiNoteOffNumber midiNoteOffVelocity |
void MidiNoteOn(int channel, int number, int velocity) | _midiNoteOn | midiNoteOnChannel midiNoteOnNumber midiNoteOnVelocity |
void OnAsyncGpuReadbackComplete(VRC.SDK3.Rendering.VRCAsyncGPUReadbackRequest request) | _onAsyncGpuReadbackComplete | onAsyncGpuReadbackCompleteRequest |
void OnAvatarChanged(VRC.SDKBase.VRCPlayerApi player) | _onAvatarChanged | onAvatarChangedPlayer |
void OnAvatarEyeHeightChanged(VRC.SDKBase.VRCPlayerApi player, float prevEyeHeightAsMeters) | _onAvatarEyeHeightChanged | onAvatarEyeHeightChangedPlayer onAvatarEyeHeightChangedPrevEyeHeightAsMeters |
void OnContactEnter(VRC.Dynamics.ContactEnterInfo contactInfo) | _onContactEnter | onContactEnterContactInfo |
void OnContactExit(VRC.Dynamics.ContactExitInfo contactInfo) | _onContactExit | onContactExitContactInfo |
void OnControllerColliderHitPlayer(VRC.SDK3.ControllerColliderPlayerHit hit) | _onControllerColliderHitPlayer | onControllerColliderHitPlayerHit |
void OnDeserialization(VRC.Udon.Common.DeserializationResult result) | _onDeserialization | onDeserializationResult |
void OnDroneTriggerEnter(VRC.SDKBase.VRCDroneApi drone) | _onDroneTriggerEnter | onDroneTriggerEnterDrone |
void OnDroneTriggerExit(VRC.SDKBase.VRCDroneApi drone) | _onDroneTriggerExit | onDroneTriggerExitDrone |
void OnDroneTriggerStay(VRC.SDKBase.VRCDroneApi drone) | _onDroneTriggerStay | onDroneTriggerStayDrone |
void OnDrop() | _onDrop | — |
void OnImageLoadError(VRC.SDK3.Image.IVRCImageDownload result) | _onImageLoadError | onImageLoadErrorIVRCImageDownload |
void OnImageLoadSuccess(VRC.SDK3.Image.IVRCImageDownload result) | _onImageLoadSuccess | onImageLoadSuccessIVRCImageDownload |
void OnInputMethodChanged(VRC.SDKBase.VRCInputMethod inputMethod) | _onInputMethodChanged | onInputMethodChangedInputMethod |
void OnLanguageChanged(string language) | _onLanguageChanged | onLanguageChangedLanguage |
void OnListAvailableProducts(VRC.Economy.IProduct[] products) | _onListAvailableProducts | onListAvailableProductsResult |
void OnListProductOwners(VRC.Economy.IProduct product, string[] owners) | _onListProductOwners | onListProductOwnersResult onListProductOwnersOwners |
void OnListPurchases(VRC.Economy.IProduct[] products, VRC.SDKBase.VRCPlayerApi player) | _onListPurchases | onListPurchasesResult onListPurchasesPlayer |
void OnMasterTransferred(VRC.SDKBase.VRCPlayerApi newMaster) | _onMasterTransferred | onMasterTransferredNewMaster |
bool OnOwnershipRequest(VRC.SDKBase.VRCPlayerApi requestingPlayer, VRC.SDKBase.VRCPlayerApi requestedOwner) | _onOwnershipRequest | onOwnershipRequestRequester onOwnershipRequestNewOwner |
void OnOwnershipTransferred(VRC.SDKBase.VRCPlayerApi player) | _onOwnershipTransferred | onOwnershipTransferredPlayer |
void OnPersistenceUsageUpdated() | _onPersistenceUsageUpdated | — |
void OnPhysBoneGrabbed(VRC.Dynamics.PhysBoneGrabbedInfo physBoneInfo) | _onPhysBoneGrabbed | onPhysBoneGrabbedPhysBoneInfo |
void OnPhysBonePosed(VRC.Dynamics.PhysBonePosedInfo physBoneInfo) | _onPhysBonePosed | onPhysBonePosedPhysBoneInfo |
void OnPhysBoneReleased(VRC.Dynamics.PhysBoneReleasedInfo physBoneInfo) | _onPhysBoneReleased | onPhysBoneReleasedPhysBoneInfo |
void OnPhysBoneUnPosed(VRC.Dynamics.PhysBoneUnPosedInfo physBoneInfo) | _onPhysBoneUnPosed | onPhysBoneUnPosedPhysBoneInfo |
void OnPickup() | _onPickup | — |
void OnPickupUseDown() | _onPickupUseDown | — |
void OnPickupUseUp() | _onPickupUseUp | — |
void OnPlayerCollisionEnter(VRC.SDKBase.VRCPlayerApi player) | _onPlayerCollisionEnter | onPlayerCollisionEnterPlayer |
void OnPlayerCollisionExit(VRC.SDKBase.VRCPlayerApi player) | _onPlayerCollisionExit | onPlayerCollisionExitPlayer |
void OnPlayerCollisionStay(VRC.SDKBase.VRCPlayerApi player) | _onPlayerCollisionStay | onPlayerCollisionStayPlayer |
void OnPlayerDataStorageExceeded(VRC.SDKBase.VRCPlayerApi player) | _onPlayerDataStorageExceeded | onPlayerDataStorageExceededPlayer |
void OnPlayerDataStorageWarning(VRC.SDKBase.VRCPlayerApi player) | _onPlayerDataStorageWarning | onPlayerDataStorageWarningPlayer |
void OnPlayerDataUpdated(VRC.SDKBase.VRCPlayerApi player, VRC.SDK3.Persistence.PlayerData.Info[] infos) | _onPlayerDataUpdated | onPlayerDataUpdatedPlayer onPlayerDataUpdatedInfos |
void OnPlayerJoined(VRC.SDKBase.VRCPlayerApi player) | _onPlayerJoined | onPlayerJoinedPlayer |
void OnPlayerLeft(VRC.SDKBase.VRCPlayerApi player) | _onPlayerLeft | onPlayerLeftPlayer |
void OnPlayerObjectStorageExceeded(VRC.SDKBase.VRCPlayerApi player) | _onPlayerObjectStorageExceeded | onPlayerObjectStorageExceededPlayer |
void OnPlayerObjectStorageWarning(VRC.SDKBase.VRCPlayerApi player) | _onPlayerObjectStorageWarning | onPlayerObjectStorageWarningPlayer |
void OnPlayerParticleCollision(VRC.SDKBase.VRCPlayerApi player) | _onPlayerParticleCollision | onPlayerParticleCollisionPlayer |
void OnPlayerRespawn(VRC.SDKBase.VRCPlayerApi player) | _onPlayerRespawn | onPlayerRespawnPlayer |
void OnPlayerRestored(VRC.SDKBase.VRCPlayerApi player) | _onPlayerRestored | onPlayerRestoredPlayer |
void OnPlayerSuspendChanged(VRC.SDKBase.VRCPlayerApi player) | _onPlayerSuspendChanged | onPlayerSuspendChangedPlayer |
void OnPlayerTriggerEnter(VRC.SDKBase.VRCPlayerApi player) | _onPlayerTriggerEnter | onPlayerTriggerEnterPlayer |
void OnPlayerTriggerExit(VRC.SDKBase.VRCPlayerApi player) | _onPlayerTriggerExit | onPlayerTriggerExitPlayer |
void OnPlayerTriggerStay(VRC.SDKBase.VRCPlayerApi player) | _onPlayerTriggerStay | onPlayerTriggerStayPlayer |
void OnPostSerialization(VRC.Udon.Common.SerializationResult result) | _onPostSerialization | onPostSerializationResult |
void OnPreSerialization() | _onPreSerialization | — |
void OnProductEvent(VRC.Economy.IProduct product, VRC.SDKBase.VRCPlayerApi player) | _onProductEvent | onProductEventResult onProductEventPlayer |
void OnPurchaseConfirmed(VRC.Economy.IProduct product, VRC.SDKBase.VRCPlayerApi player, bool purchasedNow) | _onPurchaseConfirmed | onPurchaseConfirmedResult onPurchaseConfirmedPlayer onPurchaseConfirmedPurchasedNow |
void OnPurchaseConfirmedMultiple(VRC.Economy.IProduct product, VRC.SDKBase.VRCPlayerApi player, bool purchasedNow, int quantity) | _onPurchaseConfirmedMultiple | onPurchaseConfirmedMultipleResult onPurchaseConfirmedMultiplePlayer onPurchaseConfirmedMultiplePurchasedNow onPurchaseConfirmedMultipleQuantity |
void OnPurchaseExpired(VRC.Economy.IProduct product, VRC.SDKBase.VRCPlayerApi player) | _onPurchaseExpired | onPurchaseExpiredResult onPurchaseExpiredPlayer |
void OnPurchasesLoaded(VRC.Economy.IProduct[] products, VRC.SDKBase.VRCPlayerApi player) | _onPurchasesLoaded | onPurchasesLoadedResult onPurchasesLoadedPlayer |
void OnScreenUpdate(VRC.SDK3.Platform.ScreenUpdateData data) | _onScreenUpdate | onScreenUpdateData |
void OnSpawn() | _onSpawn | — |
void OnStationEntered(VRC.SDKBase.VRCPlayerApi player) | _onStationEntered | onStationEnteredPlayer |
void OnStationExited(VRC.SDKBase.VRCPlayerApi player) | _onStationExited | onStationExitedPlayer |
void OnStringLoadError(VRC.SDK3.StringLoading.IVRCStringDownload result) | _onStringLoadError | onStringLoadErrorIVRCStringDownload |
void OnStringLoadSuccess(VRC.SDK3.StringLoading.IVRCStringDownload result) | _onStringLoadSuccess | onStringLoadSuccessIVRCStringDownload |
void OnVRCCameraSettingsChanged(VRC.SDK3.Rendering.VRCCameraSettings cameraSettings) | _onVRCCameraSettingsChanged | onVRCCameraSettingsChangedCamera |
void OnVRCPlusMassGift(VRC.SDKBase.VRCPlayerApi gifter, int numGifts) | _onVRCPlusMassGift | onVRCPlusMassGiftGifter onVRCPlusMassGiftNumGifts |
void OnVRCQualitySettingsChanged() | _onVRCQualitySettingsChanged | — |
void OnVideoEnd() | _onVideoEnd | — |
void OnVideoError(VRC.SDK3.Components.Video.VideoError videoError) | _onVideoError | onVideoErrorVideoError |
void OnVideoLoop() | _onVideoLoop | — |
void OnVideoPause() | _onVideoPause | — |
void OnVideoPlay() | _onVideoPlay | — |
void OnVideoReady() | _onVideoReady | — |
void OnVideoStart() | _onVideoStart | — |
void PostLateUpdate() | _postLateUpdate | — |
名前と引数の型で認識されるもの
Section titled “名前と引数の型で認識されるもの”基底に宣言がないので、自分で宣言を書きます。戻り値は void です。
| 書き方 | 呼ばれる名前 | 引数が入る変数 |
|---|---|---|
void FixedUpdate() | _fixedUpdate | — |
void LateUpdate() | _lateUpdate | — |
void OnAnimatorIK(int layerIndex) | _onAnimatorIK | onAnimatorIKLayerIndex |
void OnAnimatorMove() | _onAnimatorMove | — |
void OnBecameInvisible() | _onBecameInvisible | — |
void OnBecameVisible() | _onBecameVisible | — |
void OnCollisionEnter(UnityEngine.Collision other) | _onCollisionEnter | onCollisionEnterOther |
void OnCollisionEnter2D(UnityEngine.Collision2D other) | _onCollisionEnter2D | onCollisionEnter2DOther |
void OnCollisionExit(UnityEngine.Collision other) | _onCollisionExit | onCollisionExitOther |
void OnCollisionExit2D(UnityEngine.Collision2D other) | _onCollisionExit2D | onCollisionExit2DOther |
void OnCollisionStay(UnityEngine.Collision other) | _onCollisionStay | onCollisionStayOther |
void OnCollisionStay2D(UnityEngine.Collision2D other) | _onCollisionStay2D | onCollisionStay2DOther |
void OnControllerColliderHit(UnityEngine.ControllerColliderHit hit) | _onControllerColliderHit | onControllerColliderHitHit |
void OnDestroy() | _onDestroy | — |
void OnDisable() | _onDisable | — |
void OnEnable() | _onEnable | — |
void OnJointBreak(float breakForce) | _onJointBreak | onJointBreakBreakForce |
void OnJointBreak2D(UnityEngine.Joint2D brokenJoint) | _onJointBreak2D | onJointBreak2DBrokenJoint |
void OnMouseDown() | _onMouseDown | — |
void OnMouseDrag() | _onMouseDrag | — |
void OnMouseEnter() | _onMouseEnter | — |
void OnMouseExit() | _onMouseExit | — |
void OnMouseOver() | _onMouseOver | — |
void OnMouseUp() | _onMouseUp | — |
void OnMouseUpAsButton() | _onMouseUpAsButton | — |
void OnParticleCollision(UnityEngine.GameObject other) | _onParticleCollision | onParticleCollisionOther |
void OnParticleTrigger() | _onParticleTrigger | — |
void OnPostRender() | _onPostRender | — |
void OnPreCull() | _onPreCull | — |
void OnPreRender() | _onPreRender | — |
void OnRenderImage(UnityEngine.RenderTexture src, UnityEngine.RenderTexture dest) | _onRenderImage | onRenderImageSrc onRenderImageDest |
void OnRenderObject() | _onRenderObject | — |
void OnTransformChildrenChanged() | _onTransformChildrenChanged | — |
void OnTransformParentChanged() | _onTransformParentChanged | — |
void OnTriggerEnter(UnityEngine.Collider other) | _onTriggerEnter | onTriggerEnterOther |
void OnTriggerEnter2D(UnityEngine.Collider2D other) | _onTriggerEnter2D | onTriggerEnter2DOther |
void OnTriggerExit(UnityEngine.Collider other) | _onTriggerExit | onTriggerExitOther |
void OnTriggerExit2D(UnityEngine.Collider2D other) | _onTriggerExit2D | onTriggerExit2DOther |
void OnTriggerStay(UnityEngine.Collider other) | _onTriggerStay | onTriggerStayOther |
void OnTriggerStay2D(UnityEngine.Collider2D other) | _onTriggerStay2D | onTriggerStay2DOther |
void OnWillRenderObject() | _onWillRenderObject | — |
void Start() | _start | — |
void Update() | _update | — |
書けない形(1)
Section titled “書けない形(1)”| 書き方 | 説明 | エラー | 理由 | 代わりに |
|---|---|---|---|---|
public void _start() と void Start() | 実行環境が使う名前をメソッド名にする | TUKI0001 | 環境 | メソッドの名前を変える |
打ち間違いの網
Section titled “打ち間違いの網”名前の間違いが止まるのは、override で書くイベントだけです。名前で認識されるほうには、
この網がありません。
| 書き方 | 名前を間違えると | 引数の形を間違えると |
|---|---|---|
override で書く(82 個) | CS0115 で止まります | CS0115 で止まります |
| 名前と引数の型で書く(43 個) | 通ります。呼ばれません | 通ります。呼ばれません |
認識のされ方
Section titled “認識のされ方”2 通りに分かれているのは、イベントの出どころが 2 つあるからです。override で書く 82 個は
VRChat のイベントで、基底クラスが宣言を持っています。名前で認識される 43 個は Unity の
メッセージで、MonoBehaviour を遡っても宣言はどこにもありません。Unity 自身が昔から
名前で呼ぶ仕組みだからです。
呼ばれる仕組みは、どちらも同じです。コンパイラが決まった名前と引数の型の一覧に照合して、
一致したメソッドに _start のようなエントリポイントの名前を付けて出します。実行環境はその名前で呼びます。
C# の仮想呼び出しは通っていません。override の宣言は、C# のコンパイラに名前を検査させる
ために置いてあります。
∴ 書いた形を検査する人が、2 通りで違います。override のほうは C# のコンパイラが見ます。
名前で認識されるほうは誰も見ません。前の節の表は、この差がそのまま出たものです。
名前で認識されるほうは、宣言を自分で書きます。いちばん短い形が Start です。
using UnityEngine;using Tsukimi;
public class EventsStart : TsukimiBehaviour{ void Start() { Debug.Log(1); // => 1 }}override で書くほうは、基底が持っている宣言に合わせます。
using UnityEngine;using Tsukimi;
public class EventsInteract : TsukimiBehaviour{ public override void Interact() { Debug.Log(2); }
void Start() { Debug.Log(1); }}
// 出力// 1綴りも引数の型も C# が見るので、間違えればその場で止まります。
using UnityEngine;using Tsukimi;using VRC.SDKBase;
public class R_events_override_typo : TsukimiBehaviour{ public override void OnPlayerJoind(VRCPlayerApi player) { Debug.Log(player.playerId); }}名前で認識されるほうには、この安全がありません。名前と引数の型が表と一致したものだけが
イベントになり、外れたものは普通のメソッドとして扱われます。次の Update は引数を 1 つ
取るので、イベントではありません。呼ぶものが無いので、命令も作られません。
using UnityEngine;using Tsukimi;
public class EventsNameMatchMiss : TsukimiBehaviour{ private void Update(float delta) { Debug.Log(2); }
void Start() { Debug.Log(1); }}
// 出力// 1見える範囲は問いません。private を付けたメソッドもイベントになります。
using UnityEngine;using Tsukimi;
public class EventsPrivateEvent : TsukimiBehaviour{ private void LateUpdate() { Debug.Log(2); }
void Start() { Debug.Log(1); }}
// 出力// 1実行環境が呼ぶ名前
Section titled “実行環境が呼ぶ名前”実行環境は、イベント名の先頭を小文字にして _ を付けた名前でプログラムを呼びます。
Start なら _start です。一覧の表の真ん中の列が、この名前です。
この名前はメソッドの名前とは別に登録されます。同じ綴りのメソッドを自分で書くと登録が
二重になるので、その形は TUKI0001 で断られます。
using UnityEngine;using Tsukimi;
public class R_events_entry_collision : TsukimiBehaviour{ public void _start() { Debug.Log(2); }
void Start() { Debug.Log(1); }}引数の届き方
Section titled “引数の届き方”Udon に引数を渡す仕組みはありません。実行環境は、値を名前の付いた変数へ先に書き込み、 そのあとイベントを呼びます。
変数の名前は、先頭を小文字にしたイベント名と、先頭を大文字にした実行環境側の引数名を つないだものです。一覧の表の右の列が、この名前です。
名前が 1 文字でも違うと、書き込みはどこにも届きません。イベントは呼ばれ、引数は 初期値のまま走ります。エラーも実行時の失敗も出ません。この対応づけはコンパイラが持っていて、 実行環境が持つイベントの定義と突き合わせてあります。
using UnityEngine;using Tsukimi;using VRC.SDKBase;
public class EventsPlayerJoined : TsukimiBehaviour{ public override void OnPlayerJoined(VRCPlayerApi player) { Debug.Log(player.playerId); }
void Start() { Debug.Log(1); }}
// 出力// 1変数の名前を決めるのは実行環境側の引数名で、自分が書いた引数名ではありません。 引数の名前は自由に付けられます。
using UnityEngine;using Tsukimi;using VRC.SDKBase;
public class EventsParameterName : TsukimiBehaviour{ public override void OnPlayerLeft(VRCPlayerApi who) { Debug.Log(who.playerId); }
void Start() { Debug.Log(1); }}
// 出力// 1名前で認識されるイベントも同じ規則で受け取ります。
using UnityEngine;using Tsukimi;
public class EventsTriggerEnter : TsukimiBehaviour{ void OnTriggerEnter(Collider other) { Debug.Log(other.gameObject.activeSelf); }
void Start() { Debug.Log(1); }}
// 出力// 1名前が食い違うもの
Section titled “名前が食い違うもの”基底の宣言にある引数名と、実行環境が値を書きに来る変数の名前が食い違っているイベントが 22 個あります。書いた引数名は使われないので、動きに違いはありません。
| イベント | 基底の宣言にある引数名 | 引数が入る変数 |
|---|---|---|
InputDrop | value | inputDropBoolValue |
InputGrab | value | inputGrabBoolValue |
InputJump | value | inputJumpBoolValue |
InputLookHorizontal | value | inputLookHorizontalFloatValue |
InputLookVertical | value | inputLookVerticalFloatValue |
InputMoveHorizontal | value | inputMoveHorizontalFloatValue |
InputMoveVertical | value | inputMoveVerticalFloatValue |
InputUse | value | inputUseBoolValue |
OnImageLoadError | result | onImageLoadErrorIVRCImageDownload |
OnImageLoadSuccess | result | onImageLoadSuccessIVRCImageDownload |
OnListAvailableProducts | products | onListAvailableProductsResult |
OnListProductOwners | product | onListProductOwnersResult |
OnListPurchases | products | onListPurchasesResult |
OnOwnershipRequest | requestingPlayer requestedOwner | onOwnershipRequestRequester onOwnershipRequestNewOwner |
OnProductEvent | product | onProductEventResult |
OnPurchaseConfirmed | product | onPurchaseConfirmedResult |
OnPurchaseConfirmedMultiple | product | onPurchaseConfirmedMultipleResult |
OnPurchaseExpired | product | onPurchaseExpiredResult |
OnPurchasesLoaded | products | onPurchasesLoadedResult |
OnStringLoadError | result | onStringLoadErrorIVRCStringDownload |
OnStringLoadSuccess | result | onStringLoadSuccessIVRCStringDownload |
OnVRCCameraSettingsChanged | cameraSettings | onVRCCameraSettingsChangedCamera |
using UnityEngine;using Tsukimi;using VRC.Udon.Common;
public class EventsInputJump : TsukimiBehaviour{ public override void InputJump(bool value, UdonInputEventArgs args) { Debug.Log(value); }
void Start() { Debug.Log(1); }}
// 出力// 1引数を取らない形
Section titled “引数を取らない形”引数の無い宣言も持っているイベントが 4 個あります。引数を使わないなら、こちらで書けます。
| イベント | もう 1 つの書き方 |
|---|---|
OnDeserialization | void OnDeserialization() |
OnOwnershipTransferred | void OnOwnershipTransferred() |
OnStationEntered | void OnStationEntered() |
OnStationExited | void OnStationExited() |
using UnityEngine;using Tsukimi;
public class EventsNoArgumentOverload : TsukimiBehaviour{ public override void OnStationEntered() { Debug.Log(2); }
void Start() { Debug.Log(1); }}
// 出力// 1コードを書かずに呼ばれるもの
Section titled “コードを書かずに呼ばれるもの”一覧の表に並ぶイベントは、どれも呼び出しを書かずに呼ばれます。Interact なら、プレイヤーが
そのオブジェクトを使ったときです(認識のされ方の例)。
コードから呼ぶ形
Section titled “コードから呼ぶ形”イベントとは別に、メソッドを名前で呼ぶ形があります。public を付けたメソッドは名前で
登録され、SendCustomEvent の宛先になります。書き方と断られる形は
コンポーネントどうしの連携 にまとめてあります。
登録は、そのプログラムの中に呼び出しが 1 つも無くても行われます。呼ぶ側が別のプログラムや 実行環境の側に居ると、コンパイルの時点では見えないためです。
同期に伴って呼ばれるもの
Section titled “同期に伴って呼ばれるもの”OnDeserialization OnPreSerialization OnPostSerialization OnOwnershipRequest
OnOwnershipTransferred は、値の同期と所有権に伴って呼ばれます。呼ばれる条件は
同期 にまとめてあります。
条件付きで書けるもの
Section titled “条件付きで書けるもの”配布しているパッケージの基底では、次の 6 個が条件付きコンパイルで囲まれています。
プロジェクトでその機能を有効にしていないと、宣言そのものがないので override で書けません。
| イベント | 条件 |
|---|---|
OnPersistenceUsageUpdated | VRC_ENABLE_PLAYER_PERSISTENCE || VRC_ENABLE_INSTANCE_PERSISTENCE |
OnPlayerDataStorageExceeded | VRC_ENABLE_PLAYER_PERSISTENCE |
OnPlayerDataStorageWarning | VRC_ENABLE_PLAYER_PERSISTENCE |
OnPlayerDataUpdated | VRC_ENABLE_PLAYER_PERSISTENCE |
OnPlayerObjectStorageExceeded | VRC_ENABLE_PLAYER_PERSISTENCE |
OnPlayerObjectStorageWarning | VRC_ENABLE_PLAYER_PERSISTENCE |
実行環境の定義に無いもの
Section titled “実行環境の定義に無いもの”次の 2 個は書けますが、実行環境が持つイベントの定義に入っていません。この名前を
override した既存のコードが、そのまま通るようにしてあります。
| イベント |
|---|
OnVideoPause |
OnVideoPlay |
この言語が持っていないもの
Section titled “この言語が持っていないもの”実行環境の側にあって、この言語が持っていないイベントは 1 個です。OnVariableChange は
変数ごとに違う名前で呼ばれる形なので、1 つのイベントとしては置けません。
using UnityEngine;using Tsukimi;
public class R_events_on_variable_change : TsukimiBehaviour{ public override void OnVariableChange() { Debug.Log(1); }}