25個のCubeをランダムで表示/非表示してそれを同期させるサンプルについて解説

Udonスクリプト作成

サンプルのCubeArraySyncをU#に書き直し

Udon Graph

U#

public class CubeArraySyncBySharp : UdonSharpBehaviour
{
    public GameObject[] cubes;

    [UdonSynced]
    private bool[] data = new bool[25];

    public override void Interact()
    {
        SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.Owner, nameof(Randomize));
    }

    public void Randomize()
    {
        for (int i = 0; i < data.Length; i++)
        {
            data[i] = (Random.value > 0.5);
        }
        RequestSerialization();
        UpdateCubes();
    }

    public override void OnDeserialization()
    {
        UpdateCubes();
    }

    public void UpdateCubes()
    {
        for (int i = 0; i < cubes.Length; i++)
        {
            cubes[i].SetActive(data[i]);
        }
    }
}

シーン作成

まず、Cubeを25個分配置します。

スクリプトにInterractがあるので、Box Colliderコンポーネントを追加してUseできるようにします。

あとはUdon Behaviourにさきほどのスクリプトを指定。パラメータはさきほどのCubeです。

さいごに

このスクリプトだとboolの配列とGameObjectの配列の個数が一致していないとバグが発生するので、Cube1つ1つにUdon Behaviourを追加する前提のスクリプトのほうがバグを防止できる気がします。ということを考えると配列の同期はあまり使わないほうがいいかも。

配列の手動同期

投稿ナビゲーション


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)