--- title: "API gráfica com os nomes da Unity" version: snapshot-2026-10-28 engineGeneration: astra-current language: C# status: source-reviewed reviewedAt: 2026-10-26 appRelease: "0.4.0-preview.20261028" runtimeVerified: false platformEvidence: [] url: https://astraengine.com.br/guia/scripts/api-grafica/ --- # API gráfica com os nomes da Unity Volume e perfil, overrides de pós, RenderSettings, Hora do dia com eventos, materiais por nome da URP e busca no mundo, com exemplos que rodaram no celular. > **Validado no aparelho** · APK 0.4.0 · os seis exemplos rodaram no POCO F7 em C# e em Flow em 26/10 Desde a 0.4.0, o que os componentes gráficos fazem também tem os **nomes e as assinaturas da Unity**, no namespace `Astra.Rendering` e nas fachadas de `Astra.Components`. Os nomes antigos continuam valendo. ## Volume e perfil ```csharp using Astra; using Astra.Rendering; var volume = Volume.Get(objetoDoVolume)!; // o Volume (componente Ambiente) do objeto volume.Weight = 1; // 0 a 1, como volume.weight volume.SharedProfile = outroPerfil; // troca o perfil compartilhado (Volume.sharedProfile) var perfil = volume.Profile; // cópia só deste Volume (volume.profile) if (!perfil.TryGet(out var bloom)) bloom = perfil.Add(overrides: true); bloom.Intensity.Override(0.6f); // marca a caixa e põe o valor bloom.Threshold.Override(0.9f); ``` - [Volume](/pt-br/snapshot-2026-10-28/api/astra-rendering-volume/): `IsGlobal`, `Weight`, `Priority`, `BlendDistance`, `SharedProfile`, `Profile`, `HasInstantiatedProfile()`. - [VolumeProfile](/pt-br/snapshot-2026-10-28/api/astra-rendering-volumeprofile/): `TryGet`, `Add`, `Remove`, `Has`. - Cada parâmetro ([VolumeComponent](/pt-br/snapshot-2026-10-28/api/astra-rendering-volumecomponent/)) tem `Value`, `OverrideState` e `Override(valor)`. - Overrides: Exposure, Tonemapping, ColorAdjustments, Bloom, DepthOfField, MotionBlur, ChromaticAberration, LensDistortion, Vignette, ColorCurves (liga e desliga; as chaves das curvas só no Inspector), WhiteBalance, LiftGammaGain, ShadowsMidtonesHighlights, FilmGrain, AmbientOcclusion, Sky, Celestial, PhysicallyBasedSky, IndirectLightingController, Fog e CloudLayer. ## RenderSettings Atalho estático sobre o Ambiente da cena (o da janela Iluminação). Cada escrita marca a caixa do parâmetro, como mexer no campo: ```csharp RenderSettings.Fog = true; RenderSettings.FogMode = FogMode.ExponentialSquared; RenderSettings.FogDensity = 0.03f; RenderSettings.AmbientIntensity = 0.8f; ``` ## Hora do dia ```csharp var hora = TimeOfDay.Current!.Value; // a primeira Hora do dia da cena hora.Hour = 18.5f; // vale no quadro seguinte hora.Speed = 60; // 1 minuto real = 1 hora de jogo hora.HourChanged(this, h => Scene.Log(ObjectId, $"{h:00}:00")); hora.Sunset(this, () => Scene.Log(ObjectId, "Anoiteceu")); ``` Também `Sunrise` e `DayChanged`. Os mesmos quatro eventos existem na [Conexão de evento](/guia/scripts/flow-sem-codigo/). ## Materiais pelo nome da URP ```csharp var malha = Object.GetComponent()!.Value; malha.Material.SetColor("_BaseColor", new Color(1, 0.2f, 0.1f)); malha.Material.SetFloat("_Smoothness", 0.9f); malha.SharedMaterial = outroMaterial; // troca o material do primeiro slot ``` Nomes aceitos: `_BaseColor`, `_Smoothness`, `_Metallic`, `_BumpScale`, `_Cutoff`, `_OcclusionStrength`, `_EmissionColor`, `_BaseMap`, `_BumpMap`, `_MetallicGlossMap`, `_EmissionMap`, `_OcclusionMap` e os do Standard (`_Color`, `_MainTex`, `_Glossiness`). Um nome desconhecido dá erro em vez de sumir. ## Achar componentes no mundo `SceneQuery.FindFirstObjectByType()` e `SceneQuery.FindObjectsByType()`, como na Unity. ## Outros nomes da Unity Light (`Type`, `Shadows`, `RenderingLayerMask`), Camera (`ClearFlags`, `FieldOfView`, `Rect`, `UsePhysicalProperties`, `AllowHDR`, `RenderPostProcessing`, `VolumeLayerMask`), MeshRenderer (`ShadowCastingMode`, `LightProbeUsage`, `ReflectionProbeUsage`, `LightmapScaleOffset`), ReflectionProbe (`Mode`, `Size`, `Center`, `BakedTexture`, `RenderProbe()`) e LightProbeGroup (`GetProbePosition`, `SetProbePosition`, `ProbeCount()`). ## Exemplo completo: desfoque ao mirar Validado no POCO F7. Fica na câmera; segurar a ação **Mirar** fecha o campo de visão e liga a profundidade de campo de um Volume de mira, focada no que está no centro. ```csharp using Astra; using Astra.Components; using Astra.Rendering; [ComponentId("g7.mira_com_desfoque")] public sealed class MiraComDesfoque : Behavior { [PropertyId("volume_de_mira")] public ObjectReference VolumeDeMira; [PropertyId("campo_normal")] public float CampoNormal = 60; [PropertyId("campo_mirando")] public float CampoMirando = 30; [PropertyId("velocidade")] public float Velocidade = 6; private Volume? volume; private DepthOfField? desfoque; public override void Start() { volume = Volume.Get(Resolve(VolumeDeMira)!); var perfil = volume!.Profile; // cópia própria, como volume.profile desfoque = perfil.TryGet(out var existente) ? existente : perfil.Add(overrides: true); desfoque!.Mode.Override(DepthOfFieldMode.Bokeh); volume.Weight = 0; } public override void Update(float deltaTime) { var mirando = Input.Pressed("Mirar"); var camera = Object.GetComponent()!.Value; volume!.Weight = Mathf.MoveTowards(volume.Weight, mirando ? 1f : 0f, Velocidade * deltaTime); camera.FieldOfView = Mathf.Lerp(CampoNormal, CampoMirando, volume.Weight); var pose = Object.WorldTransform; var frente = System.Numerics.Vector3.Transform(System.Numerics.Vector3.UnitZ, pose.Rotation); if (mirando && Physics.RayCast(pose.Position, frente * 50) is { } acerto) desfoque!.FocusDistance.Override(acerto.Distance); } } ``` Outros exemplos completos em [Exemplos da API gráfica](/guia/exemplos/api-grafica/). ## Ainda não existe Trocar o shader do override de um único objeto (troque o Material), editar as chaves das Color Curves por script, saber quando a recaptura de uma sonda terminou e `Light.lightmapBakeType`.