Revision Difference
GameObjects#560521
<cat>Code.Game</cat>⤶
<title>GameObjects</title>⤶
⤶
# GameObjects⤶
⤶
GameObjects are the fundamental building blocks of a scene. A GameObject can have [Components](tbd) which can provide a wide variety of functionality.⤶
⤶
## Transform⤶
⤶
You can manipulate a GameObject through code, including its [Transform](https://asset.party/api/Transform/). A GameObject's Transform is held relative to its parent.⤶
⤶
```cs⤶
// Set world position⤶
GameObject.Transform.Position = new Vector3( 100, 100, 100 );⤶
⤶
// Set position relative to parent⤶
GameObject.Transform.LocalPosition = new Vector3( 100, 100, 100 );⤶
⤶
// Set world transform⤶
GameObject.Transform.World = new Transform( Vector3.Zero, new Angles( 90, 90, 180 ), 2.0f )⤶
```⤶
⤶
## Tags⤶
GameObjects have tags, which can be used a variety of ways. Some common usages include only returning GameObjects from a trace that include or omit certain tags, or determining what objects you want a specific camera to render.⤶
```cs⤶
GameObject.Tags.Add( "player" );⤶
⤶
// Only trace against GameObjects that include the player tag⤶
var tr = Scene.Trace.Ray( myRay, 64f ).WithTag( "player" ).Run();⤶
```⤶
⤶
## Directory⤶
If you want to find a GameObject in your scene by name or Guid, you can use `Scene.Directory`. You can also query `Scene.GetAllObjects( bool enabled )`. These are expensive, so you shouldn't do it all the time (such as in OnUpdate).⤶
⤶
```cs⤶
var go1 = Scene.Directory.FindByName( "my_go" );⤶
var go2 = Scene.Directory.FindByGuid( "9bb977ad-5e74-4915-9ef7-c0249ec396d2" );⤶
var go3 = Scene.GetAllObjects( true ).Where( go => go.Tags.Has( "player" ) );⤶
```⤶
⤶
## As a Property⤶
Sometimes, a Component may need a reference to a particular GameObject in your scene. You can set it as a property, and then reference it without having to iterate through all GameObjects in the scene to find it.⤶
⤶
```cs⤶
public sealed class MyComponent : Component⤶
{⤶
[Property] public GameObject Body { get; set; }⤶
⤶
protected override void OnStart()⤶
{⤶
var bodyClone = Body.Clone();⤶
bodyClone.Transform.Position = new Vector3( 100f, 100f, 100f );⤶
}⤶
}⤶
```⤶