# Banned Nodes

This document outlines the list of **banned nodes** used in Unity Visual Scripting within our project environment. These nodes are filtered to ensure safety, stability, and prevent misuse of potentially dangerous or editor-only functionalities.

***

### 🧾 Summary of Banned Categories

| Category                         | Description                                              |
| -------------------------------- | -------------------------------------------------------- |
| 🔥 GameObject Methods            | Dangerous methods like`Find`,`SendMessage`, etc.         |
| 🛑 Editor-Only Members           | Available only in Unity Editor; not available at runtime |
| 💥 Unsafe or Problematic Methods | Includes`DestroyImmediate`, etc.                         |
| 🎮 Gamepad Audio APIs            | Not supported outside of editor/gamepad modules          |
| 📸 Camera & Scene Control        | Prevents tampering with main camera or scene objects     |
| ⏱ Time Manipulation              | Avoids time scale changes and timing issues              |

***

### 🔒 Full List of Banned Nodes

#### 1. **GameObject Methods**

These methods are blocked due to potential performance issues or misuse:

* `GameObject.Find`
* `GameObject.FindWithTag`
* `GameObject.FindGameObjectWithTag`
* `GameObject.FindGameObjectsWithTag`
* `GameObject.SendMessage`
* `GameObject.SendMessageUpwards`

***

#### 2. **UnityEngine.Object Methods**

These global search and object manipulation methods are restricted:

* `UnityEngine.Object.FindObjectOfType`
* `UnityEngine.Object.FindObjectsOfType`
* `UnityEngine.Object.FindObjectsOfTypeIncludingAssets`
* `UnityEngine.Object.FindObjectsOfTypeAll`
* `UnityEngine.Object.FindSceneObjectsOfType`
* `UnityEngine.Object.DontDestroyOnLoad`
* `UnityEngine.Object.DestroyImmediate`

***

#### 3. **Component Methods**

Avoid dynamic message sending:

* `Component.SendMessage`
* `Component.SendMessageUpwards`

***

#### 4. **Editor-Only Members**

These members exist only in Unity Editor and cause compile errors if used in runtime builds:

**MeshRenderer**

* `MeshRenderer.stitchLightmapSeams`
* `MeshRenderer.receiveGI`
* `MeshRenderer.scaleInLightmap`

**LightProbeGroup**

* `LightProbeGroup.dering`
* `LightProbeGroup.probePositions` *(read-only)*

**Light**

* `Light.lightmapBakeType`
* `Light.SetLightDirty`
* `Light.shadowRadius`
* `Light.areaSize`
* `Light.shadowAngle`

**Texture / Texture2D**

* `Texture.imageContentsHash`
* `Texture2D.alphaIsTransparency`

**LightingSettings**

A long list of advanced lighting settings related to lightmapping:

* `LightingSettings.filteringAtrousPositionSigmaIndirect`
* `LightingSettings.filteringAtrousPositionSigmaDirect`
* ... *(many others – mostly lightmapper-related properties)*

**MonoBehaviour**

* `MonoBehaviour.runInEditMode`

***

#### 5. **Audio (Editor Only)**

Used for gamepad audio output, which is not supported in runtime:

* `AudioSource.PlayOnGamepad`
* `AudioSource.GamepadSpeakerSupportsOutputType`
* `AudioSource.gamepadSpeakerOutputType`
* `AudioSource.SetGamepadSpeakerRestrictedAudio`
* `AudioSource.SetGamepadSpeakerMixLevelDefault`
* `AudioSource.DisableGamepadOutput`

***

#### 7. **UI (Editor Only)**

Related to UI rebuild events:

* `UnityEngine.UI.Graphic.OnRebuildRequested`
* `UnityEngine.UI.Text.OnRebuildRequested`

***

#### 8. **ParticleSystem (Editor Only)**

Editor-specific particle system tools:

* `ParticleSystemRenderer.supportsMeshInstancing`
* `ParticleSystemForceField.FindAll`

***

#### 9. **Time Manipulation**

To avoid unexpected behavior in gameplay:

* `Time.timeScale`
* `Time.fixedDeltaTime`
* `Time.maximumDeltaTime`
* `Time.maximumParticleDeltaTime`
* `Time.captureDeltaTime`
* `Time.captureFramerate`

***

#### 10. **Camera Access**

Prevents interference with the main camera or scene management:

* `Camera.main`
* `Camera.allCameras`
* `Camera.current`
* `Camera.scene`

***

#### 11. **Graphics Settings**

Advanced rendering features that should not be modified:

* `GraphicsSettings.videoShadersIncludeMode`

***

### 🛑 Blocked Types

The following types are completely blocked from being used in Visual Scripting graphs:

* `Application` – Contains dangerous methods like loading/unloading scenes.
* `Resources` – Allows loading assets by string path, which is unsafe.
* `SceneManager` – Loads or unloads scenes, which could break the flow.
* `Scene` – Gets root game objects, which may expose critical objects.
* `VideoShadersIncludeMode`
