Unity と VRChat の型の呼び出し
Unity と VRChat の型は、C# と同じ書き方で呼べます(コンポーネントの取り方はコンポーネントの取得と呼び出し)。呼べるのは Udon に公開されているメンバだけで、公開されていないメンバはコンパイルの時点でエラーになります(非対応)。
対応(14)
Section titled “対応(14)”| 書き方 | 説明 | 注意 |
|---|---|---|
source.Play() | 音の再生 | |
source.PlayOneShot(clip, 0.7f) | 効果音の重ね再生 | |
animator.SetTrigger("Open") | トリガーによるアニメーションの切り替え | |
animator.SetBool("IsOpen", open) | 真偽値によるアニメーションの切り替え | |
body.AddForce(force, ForceMode.Impulse) | 力の付与 | |
Physics.Raycast(origin, direction, out hit, 12.5f) | レイキャストによる当たりの判定 | |
transform.Translate(velocity * Time.deltaTime) | 毎フレームの移動 | |
transform.SetPositionAndRotation(position, rotation) | 位置と向きの設定 | |
door.SetActive(!door.activeSelf) | 表示の切り替え | |
Instantiate(prefab) | プレハブの複製 | 位置と向きは、複製したあとで設定します(引数で渡す形は書けません)。 |
Input.GetKeyDown(KeyCode.Space) | キーの入力 | VR のコントローラーの操作は、イベントのページにある入力のイベントで受け取ります。 |
label.text = "count: " + count | 文字の表示 | |
particles.Emit(12) | パーティクルの放出 | |
pickup.Drop() | 持たれている物の手放し |
非対応(4)
Section titled “非対応(4)”| 書き方 | 説明 | エラー | 理由 | 代替 |
|---|---|---|---|---|
gameObject.AddComponent<Rigidbody>() | 実行中にコンポーネントを足す | CS1061 | 環境 | コンポーネントを付けたオブジェクトを最初から置き、SetActive で出す |
target.SendMessage("Open") | Unity の仕組みで、名前を指定してメソッドを呼ぶ | CS1061 | 環境 | SendCustomEvent で呼ぶ |
Resources.Load("Door") | アセットを名前で読み込む | CS0103 | 環境 | インスペクタで参照を渡す |
Instantiate(prefab, position, rotation) | 位置と向きを引数で渡して複製する | CS1501 | 環境 | Instantiate(prefab) のあとで SetPositionAndRotation を呼ぶ |
音とアニメーション
Section titled “音とアニメーション”AudioSource の参照をインスペクタで渡し、Play を呼びます。
using UnityEngine;using Tsukimi;
public class UnityTypesAudioPlay : TsukimiBehaviour{ public AudioSource source;
public override void Interact() { source.Play(); }}効果音の重ね再生
Section titled “効果音の重ね再生”PlayOneShot にクリップと音量の倍率を渡します。
using UnityEngine;using Tsukimi;
public class UnityTypesAudioOneShot : TsukimiBehaviour{ public AudioSource source; public AudioClip clip;
public override void Interact() { source.PlayOneShot(clip, 0.7f); }}トリガーによるアニメーションの切り替え
Section titled “トリガーによるアニメーションの切り替え”Animator のパラメータを名前で指定します。
using UnityEngine;using Tsukimi;
public class UnityTypesAnimatorTrigger : TsukimiBehaviour{ public Animator animator;
public override void Interact() { animator.SetTrigger("Open"); }}真偽値によるアニメーションの切り替え
Section titled “真偽値によるアニメーションの切り替え”真偽値のパラメータは SetBool で変更します。
using UnityEngine;using Tsukimi;
public class UnityTypesAnimatorBool : TsukimiBehaviour{ public Animator animator; private bool open;
public override void Interact() { open = !open; animator.SetBool("IsOpen", open); }}Rigidbody の参照に対して呼びます。
using UnityEngine;using Tsukimi;
public class UnityTypesRigidbodyForce : TsukimiBehaviour{ public Rigidbody body; public Vector3 force = new Vector3(0f, 4.5f, 1.25f);
public override void Interact() { body.AddForce(force, ForceMode.Impulse); }}レイキャストによる当たりの判定
Section titled “レイキャストによる当たりの判定”out で受け取る引数も、C# と同じ書き方で書けます。
using UnityEngine;using Tsukimi;
public class UnityTypesPhysicsRaycast : TsukimiBehaviour{ public Transform marker;
void Update() { RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, 12.5f)) { marker.position = hit.point; } }}毎フレームの移動
Section titled “毎フレームの移動”自分の Transform は transform で読めます。
using UnityEngine;using Tsukimi;
public class UnityTypesTransformMove : TsukimiBehaviour{ public Vector3 velocity = new Vector3(0f, 0f, 1.5f);
void Update() { transform.Translate(velocity * Time.deltaTime); }}位置と向きの設定
Section titled “位置と向きの設定”向きは Quaternion.Euler で角度から作れます。
using UnityEngine;using Tsukimi;
public class UnityTypesTransformPlace : TsukimiBehaviour{ void Start() { transform.SetPositionAndRotation(new Vector3(2f, 0.5f, -3f), Quaternion.Euler(0f, 90f, -15f)); }}オブジェクトと入力
Section titled “オブジェクトと入力”表示の切り替え
Section titled “表示の切り替え”GameObject の参照に対して呼びます。
using UnityEngine;using Tsukimi;
public class UnityTypesGameObjectActive : TsukimiBehaviour{ public GameObject door;
public override void Interact() { door.SetActive(!door.activeSelf); }}プレハブの複製
Section titled “プレハブの複製”Instantiate は、プレハブの GameObject を 1 つ渡す形だけ書けます。
using UnityEngine;using Tsukimi;
public class UnityTypesInstantiate : TsukimiBehaviour{ public GameObject prefab;
public override void Interact() { GameObject copy = Instantiate(prefab); copy.transform.SetPositionAndRotation(new Vector3(1.5f, 0f, -2f), Quaternion.Euler(0f, 45f, 0f)); }}キーボードの入力は Input で読めます。
using UnityEngine;using Tsukimi;
public class UnityTypesInputKey : TsukimiBehaviour{ public GameObject door;
void Update() { if (Input.GetKeyDown(KeyCode.Space)) { door.SetActive(!door.activeSelf); } }}表示と VRChat の部品
Section titled “表示と VRChat の部品”TextMeshProUGUI の text に文字列を代入します。
using UnityEngine;using Tsukimi;using TMPro;
public class UnityTypesTextSet : TsukimiBehaviour{ public TextMeshProUGUI label; private int count;
public override void Interact() { count++; label.text = "count: " + count; }}パーティクルの放出
Section titled “パーティクルの放出”ParticleSystem の参照に対して呼びます。
using UnityEngine;using Tsukimi;
public class UnityTypesParticlesEmit : TsukimiBehaviour{ public ParticleSystem particles;
public override void Interact() { particles.Emit(12); }}持たれている物の手放し
Section titled “持たれている物の手放し”VRChat の部品も、同じ書き方で呼べます。
using UnityEngine;using Tsukimi;using VRC.SDK3.Components;
public class UnityTypesPickupDrop : TsukimiBehaviour{ public VRCPickup pickup;
public override void Interact() { pickup.Drop(); }}