コンテンツにスキップ

Unity と VRChat の型の呼び出し

Unity と VRChat の型は、C# と同じ書き方で呼べます(コンポーネントの取り方はコンポーネントの取得と呼び出し)。呼べるのは Udon に公開されているメンバだけで、公開されていないメンバはコンパイルの時点でエラーになります(非対応)。

書き方説明注意
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()持たれている物の手放し
書き方説明エラー理由代替
gameObject.AddComponent<Rigidbody>()実行中にコンポーネントを足すCS1061環境コンポーネントを付けたオブジェクトを最初から置き、SetActive で出す
target.SendMessage("Open")Unity の仕組みで、名前を指定してメソッドを呼ぶCS1061環境SendCustomEvent で呼ぶ
Resources.Load("Door")アセットを名前で読み込むCS0103環境インスペクタで参照を渡す
Instantiate(prefab, position, rotation)位置と向きを引数で渡して複製するCS1501環境Instantiate(prefab) のあとで SetPositionAndRotation を呼ぶ

AudioSource の参照をインスペクタで渡し、Play を呼びます。

using UnityEngine;
using Tsukimi;
public class UnityTypesAudioPlay : TsukimiBehaviour
{
public AudioSource source;
public override void Interact()
{
source.Play();
}
}

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;
}
}
}

自分の 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);
}
}

向きは 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));
}
}

GameObject の参照に対して呼びます。

using UnityEngine;
using Tsukimi;
public class UnityTypesGameObjectActive : TsukimiBehaviour
{
public GameObject door;
public override void Interact()
{
door.SetActive(!door.activeSelf);
}
}

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);
}
}
}

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;
}
}

ParticleSystem の参照に対して呼びます。

using UnityEngine;
using Tsukimi;
public class UnityTypesParticlesEmit : TsukimiBehaviour
{
public ParticleSystem particles;
public override void Interact()
{
particles.Emit(12);
}
}

VRChat の部品も、同じ書き方で呼べます。

using UnityEngine;
using Tsukimi;
using VRC.SDK3.Components;
public class UnityTypesPickupDrop : TsukimiBehaviour
{
public VRCPickup pickup;
public override void Interact()
{
pickup.Drop();
}
}