2023. 1. 22. 00:30
게임/VRChat
자주 쓰는 U# 코드들이다
핸들이 손에 잡힌 상태인지
GetComponent<VRC_Pickup>().IsHeld
//주의: GetComponent<VRC_Pickup>().currentHand != VRC_Pickup.PickupHand.None는 오작동하므로 쓰면 안됨
왼손으로 잡혀있는지
GetComponent<VRC_Pickup>().currentHand == VRC_Pickup.PickupHand.Left
변수동기화
[UdonSynced]
int state = 0;
매뉴얼 동기화 예제
이 코드는 종각역 만들때 썼다
using UdonSharp;
using UnityEngine;
using UnityEngine.UI;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class StageText : UdonSharpBehaviour
{
[UdonSynced]
[Multiline]
public string syncText;
public Text textUI;
public void UpdateText(string text)
{
Networking.SetOwner(Networking.LocalPlayer, gameObject);
syncText = text;
RequestSerialization();
}
void Update()
{
textUI.text = syncText;
}
}
텔레포트
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class TeleportUS : UdonSharpBehaviour
{
public Transform teleportTarget;
public override void Interact()
{
Networking.LocalPlayer.TeleportTo(teleportTarget.position, teleportTarget.rotation);
}
}
스크립트 LOD
기본 LOD도 훌륭하지만 이걸 쓰는 이유는 라이팅이나 스크립트 On Off도 용이하기 때문이다
몰론 그렇다고 이거만 쓰진 말고 기본 LOD와 병행해서 쓰자
https://ahzkwid.booth.pm/items/5892835
https://gist.github.com/ahzkwid/6647d3aec625afe96c54bb38b2671c72
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class ScriptLOD : UdonSharpBehaviour
{
public float radius = 20;
public GameObject[] hqObjects;
public GameObject[] lqObjects;
#if UNITY_EDITOR
void OnDrawGizmos()
{
Gizmos.DrawWireSphere(transform.position, radius);
}
#endif
void Update()
{
var active = Vector3.Distance(Networking.LocalPlayer.GetPosition(), transform.position) < radius;
foreach (var obj in hqObjects)
{
obj.SetActive(active);
}
foreach (var obj in lqObjects)
{
obj.SetActive(!active);
}
}
}
'게임 > VRChat' 카테고리의 다른 글
Booth 선물 방법 (0) | 2023.04.14 |
---|---|
VRChat 캐릭터 압착되는 문제 (0) | 2023.01.01 |
VRChat OSC (0) | 2022.02.19 |