나만의 픽업
VRChat 픽업 대신 어떤 픽업 방식으로든 펜을 들 수 있습니다. 호출 세 가지로 모든 플랫폼에서 그대로 그립니다.
펜도 지우개도 VRChat 픽업이 꼭 필요하지 않습니다. holding 필드로 무엇이 들지 고릅니다.
holding |
드는 것 |
|---|---|
VrcPickup |
같은 오브젝트의 VRCPickup. 집으면 들고, Use로 그리고, 데스크톱의 R과 VR에서 든 손의 위쪽 페이스 버튼으로 되돌립니다. 기본값입니다 |
Custom |
내 코드. VRChat 픽업 이벤트는 무시되므로 VRCPickup은 남겨 두어도 지워도 됩니다 |
호출 세 가지
holding을 Custom으로 하면, 내 방식이 이미 아는 것을 펜에 알려 주세요.
| 호출 | 언제 |
|---|---|
SetHeld(true) |
로컬 플레이어가 집었을 때 |
SetUse(true) |
Use를 눌렀을 때 |
SetUse(false) |
Use를 뗐을 때 |
Undo() |
마지막 선을 되돌리고 싶을 때 |
SetHeld(false) |
내려놓았을 때 |
들고 있는 플레이어의 클라이언트에서 부르세요. 다른 클라이언트에는 평소처럼 네트워크로 잉크가 갑니다. SetHeld(true) 전의 누름은 세지 않고, 집을 때 이미 Use가 눌려 있었다면 한 번 떼어야 그리므로, 펜을 집은 트리거로 선이 시작되는 일은 없습니다.
그리는 곳은 펜이 정한다
드는 것은 내 방식이고, 잉크가 가는 곳은 여전히 펜의 몫입니다. VR에서는 펜의 tip에서 그리므로, 픽업이 이미 하듯 손과 함께 펜 오브젝트를 움직이세요. 데스크톱과 휴대폰에서는 플레이어의 시점에서 그리므로 픽업이 펜을 겨눌 필요가 없습니다. 손에 쥐여 주는 픽업이라면 desktopAim을 Tip으로 하면 VR처럼 tip에서 그립니다.
어댑터
대부분의 픽업 방식은 이벤트를 냅니다. 펜 옆에 작은 비헤이비어를 두고 전달하세요.
public class PenGrip : UdoniteBehaviour
{
public Pen pen;
public void OnGrabbed() => pen.SetHeld(true);
public void OnReleased() => pen.SetHeld(false);
public void OnUseDown() => pen.SetUse(true);
public void OnUseUp() => pen.SetUse(false);
public void OnAlternate() => pen.Undo();
}
그것을 내 방식의 이벤트에 연결하고 펜의 holding을 Custom으로 바꾸면, 나머지는 그대로입니다. 잉크 스타일, 보드, 지우기, 늦게 온 사람에게 보이는 잉크 모두 똑같이 동작합니다.