# LLM Guide: Low-Level Project Data (`LowLevel/`) ## 1. Purpose This data level provides the **most granular, detailed, and raw view** of the project's assets. It is designed for deep inspection of specific object properties, component values, and raw file contents. **Use this data ONLY when:** - The user asks for a specific property value that is not available in the Mid-Level data (e.g., "What are the exact position coordinates of the 'Player' object?"). - You need to read the content of a C# script or a shader file. - You need to examine the raw, unmodified project settings files. ## 2. File Structure The `LowLevel` folder contains a highly detailed breakdown of the project, where scenes and prefabs are exploded into their constituent GameObjects. ``` LowLevel/ ├── Assets/ │ ├── Scenes/ │ │ └── SampleScene.unity/ // A directory, not a file │ │ ├── 14854.json // Represents the Main Camera GameObject │ │ ├── 99012.json // Represents the Player Character GameObject │ │ └── root_objects.json // Lists the fileIDs of top-level objects │ ├── Scripts/ │ │ └── PlayerController.cs // The actual C# script file │ └── Shaders/ │ └── Lit.shader // The actual shader file └── ProjectSettings/ ├── TagManager.json └── ... (other raw project settings files as JSON) ``` ## 3. Key Files & Schema ### `Assets/.../{fileID}.json` This file represents a **single GameObject or Component** from a scene or prefab. The filename is the object's unique `fileID` within its original asset file. This is a raw dump of the object's data as seen in the YAML source. **Schema Example (`99012.json` for the Player Character):** ```json { "GameObject": { "m_ObjectHideFlags": 0, "m_CorrespondingSourceObject": { "fileID": 0 }, "m_PrefabInstance": { "fileID": 0 }, "m_PrefabAsset": { "fileID": 0 }, "m_Component": [ { "component": { "fileID": 990120 } }, // Link to its own Transform { "component": { "fileID": 990121 } }, // Link to a BoxCollider { "component": { "fileID": 990122 } } // Link to a MonoBehaviour ], "m_Layer": 8, "m_Name": "Player Character", "m_TagString": "Player", "m_IsActive": 1 } } ``` - The data is raw. To find the position, you would need to find the `Transform` component (e.g., `990120.json`) and look for the `m_LocalPosition` property within it. - To find which script is attached, you would need to find the `MonoBehaviour` component (e.g., `990122.json`) and look for the `m_Script` property, which contains the script's GUID. ### `Assets/.../root_objects.json` This file contains a simple JSON list of the `fileID`s for all the root (top-level) GameObjects within that scene or prefab. **Schema Example:** ```json [ 14854, 99012, 123456 ] ``` ### Other Files - **`*.cs` and `*.shader` files:** These are direct, plain-text copies of the original source files. - **`ProjectSettings/*.json`:** These are raw, one-to-one conversions of the corresponding `.asset` files from YAML to JSON. ## 4. Handling Shrunken / Tokenized Data The JSON files in this folder may have been processed by `json_reducer.py`. **If the data is shrunken:** 1. The file content will look like this: `{"key_mapper":{"k0":"GameObject",...},"data":{"k0":{...}}}` 2. You **MUST** use the `key_mapper` to de-tokenize the keys in the `data` object before you can interpret the schema. 3. The `json_reducer` also removes keys with empty values. If a key is missing from a de-tokenized object, you can assume its value was empty. Once de-tokenized, the data will conform to the schemas described above.