S&box Wiki

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 );⤶ }⤶ }⤶ ```⤶