Skip to content

Instantly share code, notes, and snippets.

@khlizard
Last active August 9, 2022 16:31
Show Gist options
  • Save khlizard/9b7dfda8e8c8325413ec14a55f0a45eb to your computer and use it in GitHub Desktop.
Save khlizard/9b7dfda8e8c8325413ec14a55f0a45eb to your computer and use it in GitHub Desktop.
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
namespace lizscript
{
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class UnlockObjects : UdonSharpBehaviour
{
[SerializeField,Header("Unlock対象のオブジェクト(強制的にActiveになります)")]
private GameObject[] targetObjects;
[SerializeField,Header("素通しするプレイヤーの名前")]
private string[] adminPlayersName;
[SerializeField,Range(2,20),Header("Unlockするインタラクト回数(この倍数で開きます)")]
private int numberOfUnlock = 3;
private bool isAdmin = false;
private int interactCount = 0;
// 開始時、名前がリストにあればAdmin(素通し)モードに
void Start()
{
targetsSetActive(true);
string name = Networking.LocalPlayer.displayName;
foreach (string i in adminPlayersName) {
if (i == name) {
isAdmin = true;
targetsSetActive(false);
}
}
}
// Adminじゃない場合、インタラクト回数が解錠回数の倍数なら解除する
public override void Interact()
{
if (!isAdmin) {
interactCount++;
targetsSetActive(interactCount % numberOfUnlock != 0);
} else {
// 後々の拡張用に念のため
targetsSetActive(false);
}
}
private void targetsSetActive(bool val)
{
foreach (GameObject i in targetObjects) {
i.SetActive(val);
}
}
}
}

Udon#: UnlockObjects.cs

  1. UdonSharpを入れる
  2. UnlockObjects.unitypackage を入れる
  3. ON/OFF対象のオブジェクトを作る
  4. キーにするオブジェクトを作る
    1. トリガーにする:ON
    2. コンポーネントを追加:Udon Behaviour
    3. UnlockObjects.assetをUdon Behaiviourに貼り付ける(緑色で箸とU#とあるアイコンの方)
    4. Target ObjectsにON/OFF対象オブジェクトを指定する
    5. Admin Players Nameに素通しするプレイヤー名を入れる
    6. Number Of Unlock を決める
  5. 実際に入ってみて、Adminなら最初からオブジェクトがなければ、その他ならインタラクトしてたら数回に1回オブジェクトが消えたら成功

手元でやってみて上手く行ったので大体使えるんじゃないかと思います。

以下参考画像

UnitySettings

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment