Scene
Container for all GameObjects. Manages object lifecycle and provides search methods.
using Xengine.Scene;
Creating a Scene
// Load via engine
var scene = engine.LoadScene("GameScene");
// Direct creation
var scene = new Scene("MyScene");
Properties
| Property | Type | Description |
|---|---|---|
Name | string | Scene name |
GameObjects | IReadOnlyList | All root objects |
AllGameObjects | IEnumerable | All objects including children |
IsLoaded | bool | True if scene is active |
Creating GameObjects
CreateGameObject
GameObject CreateGameObject(string name)
var player = scene.CreateGameObject("Player");
var enemy = scene.CreateGameObject("Enemy", new Vector3(5, 0, 0));
var obj = scene.CreateGameObject("Object", position, rotation);
AddGameObject
void AddGameObject(GameObject obj)
var obj = new GameObject("MyObject");
scene.AddGameObject(obj);
Finding Objects
FindByName
GameObject? FindByName(string name)
var player = scene.FindByName("Player");
if (player != null)
player.Transform.Position = spawnPoint;
FindAllByName
IEnumerable<GameObject> FindAllByName(string name)
foreach (var enemy in scene.FindAllByName("Enemy"))
enemy.GetComponent<EnemyAI>()?.Alert();
FindByGuid
GameObject? FindByGuid(Guid guid)
FindWithComponent<T>
GameObject? FindWithComponent<T>()
var playerObj = scene.FindWithComponent<PlayerController>();
FindAllWithComponent<T>
IEnumerable<GameObject> FindAllWithComponent<T>()
foreach (var obj in scene.FindAllWithComponent<Health>())
{
var health = obj.GetComponent<Health>();
health.Heal(10);
}
GetComponent<T>
T? GetComponent<T>()
Find first component of type in scene.
var camera = scene.GetComponent<CameraController>();
GetComponents<T>
IEnumerable<T> GetComponents<T>()
foreach (var enemy in scene.GetComponents<EnemyAI>())
enemy.SetTarget(player);
Lifecycle
// Clear all objects
scene.Clear();
// Destroy specific object
scene.DestroyGameObject(obj);
// Process pending destroys
scene.ProcessDestroys();
Example
var scene = engine.LoadScene("GameScene");
// Create player
var player = scene.CreateGameObject("Player", Vector3.Zero);
player.AddComponent<PlayerController>();
player.AddComponent<Health>().MaxHealth = 100;
// Spawn enemies
var random = new XRandom();
for (int i = 0; i < 10; i++)
{
var pos = new Vector3(random.Float(-20, 20), 0, random.Float(-20, 20));
var enemy = scene.CreateGameObject("Enemy", pos);
enemy.AddComponent<EnemyAI>();
}
// Later: find and damage all enemies
foreach (var enemy in scene.FindAllByName("Enemy"))
{
enemy.GetComponent<Health>()?.TakeDamage(25);
}