/VRChat-UdonSharpCommon

A unity asset to support making your VRChat world with commonly UdonSharp scripts!

Primary LanguageC#MIT LicenseMIT

💠 UdonSharpCommon 💠

This is an asset of UdonSharp script sets.

To support making your VRChat world with UdonSharp 🎉✨

(Udon#, U#)

🎁 PullRequests are welcome 🎁

Requirements

  • VRCSDK3-WORLD (recommended VRCSDK3-WORLD-2021.06.03.14.57_Public)
  • UdonSharp (recommended UdonSharp_v0.19.2)

Reference

Everything of UdonSharpCommon can work as both local (not to sync) and global (to sync for users on the world)!

Reference

Classes

Table of Contents generated with DocToc

Activate

Interact時に、指定された全てのGameObjectを有効化・もしくは無効化します。 オブジェクトを無効化したい場合はdoInactivateInstead = trueを指定してください。

次にInteractされても、オブジェクトを再度無効化する等はしません。 トグルしたい場合はToggleAllGameObjectsを使用してください。

[SerializeField]
private GameObject[] targets;

[SerializeField]
private bool doInactivateInstead = false;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

Issues

ポータルをActivate(Inactivate)できない

これを用いたポータル(VRCPortalMarkerなオブジェクト?)の有効化は不可能なようです。

調査求む! Issue1

PRs are welcome!

ChangeActiveOnStarted

Start時(ワールドが初期化されたとき)に、 指定された全てのGameObjectを有効化・無効化します。

ワールド編集時には非表示にしたくないけど、 ワールド初期状態で無効状態にしておきたいとき・ またはその逆のときに便利です。

[SerializeField]
private GameObject[] targetsToActivate;

[SerializeField]
private GameObject[] targetsToInactivate;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

ChangeLocalPlayerMovingStrengthOnInteract

Interactしたユーザーのジャンプ力・歩く速さ・走る速さを、指定されたものに変更します。

[SerializeField]
private int jumpImpulse = 5;

[SerializeField]
private int walkSpeed = 4;

[SerializeField]
private int runSpeed = 8;

FlyByToggling

これのUdonBehaviorがコンポーネントとして設定されたオブジェクトをUseしたときに、 プレイヤーを飛行させます。 もう一度Useすると、飛行を停止します。

[SerializeField]
private float flappingStrength = 5.0f;

FlyByUsingDown

これのUdonBehaviorがコンポーネントとして設定されたオブジェクトをUseしたときに、 プレイヤーを一瞬、ふわりと浮遊させます。

[SerializeField]
private float flappingStrength = 7.0f;

SwitchGameObjects

指定された全てのGameObjectのうち、1つのみを有効化します。

新しく有効化されるGameObjecは、配列上で現在有効になっているGameObjectの次に設定されたものです。 もし有効化されているGameObjectが最後の要素である場合、次に最初のものを有効化します。

このスクリプトは、 例えばLightを「暗い・普通・明るい」等、順番に切り替えたいときなどに便利です。

[SerializeField]
private GameObject[] targets;

[SerializeField]
private bool runOnInteract = true;

[SerializeField]
private bool runOnPickupUseUp = true;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;
  • runOnInteract

    • オブジェクトをUseしたときに処理を実行するか否か
    • オブジェクトをピックアップしたときにも実行されるようになります
  • runOnPickupUseUp

    • オブジェクトをPickupしていて、かつUseしたときに処理を実行するか否か

PickupオブジェクトのUse時のみに実行したい場合 (例えば傘を持った状態でトリガーを引いたときに、傘を開きたい場合) は、runOnInteractをfalseに・runOnPickupUseUpをtrueにするとうまくいくはずです。

Issues

ポータルをActivate(Inactivate)できない

'ポータルをActivate(Inactivate)できない - Issues - Activate' と同様に、ポータルを操作できません。

代わりにSwitchPortalRoomIdを使用してください。

調査求む! Issue2

SwitchDirectlyChildrenGameObjects

SwitchGameObjectsと似ていますが、rootの子GameObject全てを対象にスイッチします。

例えば下記では、X -> Y -> Z -> Xの順に有効化します。

  • root
    • X
    • Y
      • YX
    • Z
[SerializeField]
private Transform root;

[SerializeField]
private bool runOnInteract = true;

[SerializeField]
private bool runOnPickupUseUp = true;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

TeleportLocalPlayer

Interactしたユーザーを、指定したオブジェクトの位置にワープさせます。

[SerializeField]
private Transform teleportedPoint;

TeleportObjects

  • TODO: Currently teleporting via network is not work well

Interactしたとき、オブジェクトを対応する位置に移動させます。

targets[0]の「対応する位置」はpoints[0]です。 その他の要素についても番号で対応します。

対応するpoints要素のないtargetsの要素は移動されません。

[SerializeField]
private GameObject[] targets;

[SerializeField]
private Transform[] points;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

ToggleAllGameObjects

Targetsに指定された全てのGameObjectの有効・無効をトグル(反転)させます。

[SerializeField]
private GameObject[] targets;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

SwitchPortalRoomId

WIP: 機能しているのかよくわかってない。PRs are welcome!

ポータルのワールドID(RoomID)を切り替えます。 これを用いて、実質的にポータルの切り替えが可能です。

ただし非公開ワールドのIDも扱うことができるので、そのワールドIDは自己責任で扱ってください。

[SerializeField]
private VRCPortalMarker portal;

[SerializeField]
private string[] worldIds;

[SerializeField]
private bool isWorkingOnlyOnLocal = false;

Please also see 'VRChat-UdonSharpCommon/Assets/galaxy-sixth-sensey/UdonSharpCommon - GitHub'.

About this development

Prepare to build

This project is including a world to test U# scirpts.

Before run (please see below 'Run' section), we must import below assets yourself. (To avoid infringing the licenses.)

Run

We can check the world by 2 ways.

  1. Run by unity (via CyanEmu)
  2. Build & Test by VRChat SDK tab

NOTE

This readme is build with README.mdpp and MarkdownPP.