instanceIDs | 要激活或停用的 GameObjects 的实例 ID。 |
active | 要设置的活动状态,其中 true 将 GameObjects 设置为活动状态,而 false 将它们设置为非活动状态。 |
激活或停用由实例 ID 标识的多个 GameObjects。
使用 SetGameObjectsActive
批量激活或停用多个 GameObjects。
using System; using Unity.Collections; using UnityEngine; using UnityEngine.InputSystem;
//Add this script to a GameObject. This example requires the Input System package.
public class DeactivateGOComponent : MonoBehaviour { public GameObject prefab; public int count = 100;
NativeArray<int> m_SpawnedInstanceIDsNative; int[] m_SpawnedInstanceIDs; bool m_SetActive = false; bool m_UseSlowMethod = false; void Start() { m_SpawnedInstanceIDs = new int[count]; //Spawn some prefabs for (int i = 0; i < count; i++) { //Save their instanceID m_SpawnedInstanceIDs[i] = Instantiate(prefab).GetInstanceID(); } //Create native array with instanceIDs m_SpawnedInstanceIDsNative = new NativeArray<int>(m_SpawnedInstanceIDs, Allocator.Persistent); }
void Update() { if (Keyboard.current[Key.A].wasPressedThisFrame) { if (m_UseSlowMethod) { SetActiveSlow(m_SetActive); } else { SetActiveFast(m_SpawnedInstanceIDsNative, m_SetActive); } m_SetActive = !m_SetActive; } } void SetActiveSlow(bool setActive) { foreach(int id in m_SpawnedInstanceIDs) { ((GameObject)Resources.InstanceIDToObject(id)).SetActive(setActive); } } static void SetActiveFast(NativeArray<int> ids, bool setActive) { GameObject.SetGameObjectsActive(ids, setActive); }
void OnDestroy() { m_SpawnedInstanceIDsNative.Dispose(); } }