51 lines
1.4 KiB
C#
51 lines
1.4 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using Unity.Netcode;
|
||
|
using Unity.Netcode.Components;
|
||
|
using UnityEngine;
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// [Netcode for gameobjects] This is used for disabling components/objects depending on is host/server/client.
|
||
|
/// </summary>
|
||
|
public class ZNGODisabler : NetworkBehaviour
|
||
|
{
|
||
|
[SerializeField] private bool RunOnAwake = true;
|
||
|
[Space(10)]
|
||
|
|
||
|
[Tooltip("Add all the objects to disable on join")]
|
||
|
public UnityEngine.Object[] objectsToDisable;
|
||
|
|
||
|
private void Start() { if (RunOnAwake) ZDisable(); }
|
||
|
|
||
|
public void ZDisable()
|
||
|
{
|
||
|
if (RunOnAwake && IsOwner) return;
|
||
|
|
||
|
for (int i = 0; i < objectsToDisable.Length; i++)
|
||
|
{
|
||
|
var objectType = objectsToDisable[i]; // Apparently, "typeof" is not needed /shrug
|
||
|
|
||
|
switch (objectType)
|
||
|
{
|
||
|
case MonoBehaviour monoBehaviour:
|
||
|
monoBehaviour.enabled = false;
|
||
|
break;
|
||
|
|
||
|
case GameObject gameObject:
|
||
|
gameObject.SetActive(false);
|
||
|
break;
|
||
|
|
||
|
case Rigidbody rigidbody:
|
||
|
rigidbody.isKinematic = true;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
Debug.LogError($"Can't disable: {objectType.name} (not supported)", objectType);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|