自分のピックアップ
VRChat のピックアップの代わりにどんなピックアップの仕組みでもペンを持てます。呼び出しは 3 つで、どのプラットフォームでも描けます。
ペンもイレーサーも、VRChat のピックアップが必須ではありません。holding で何が持つかを選びます。
holding |
持つもの |
|---|---|
VrcPickup |
同じオブジェクトの VRCPickup。拾うと持ち、Use で描き、デスクトップの R と VR の持っている手の上側のフェイスボタンで元に戻します。標準です |
Custom |
自分のコード。VRChat のピックアップのイベントは無視されるので、VRCPickup は残しても外してもかまいません |
3 つの呼び出し
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 にすれば、ほかは何も変わりません。インクスタイル、ボード、消去、後から来た人へのインクもすべて同じように動きます。