# Control del skybox

Puedes cambiar cómo un jugador ve el skybox cuando está en tu escena; esto también afecta el matiz y la dirección de la iluminación global.

El cielo en Decentraland sigue un ciclo predeterminado día/noche donde 1 minuto pasa cada segundo, por lo que un ciclo completo tarda 24 minutos en completarse. Si la escena no aplica una hora fija del día, los jugadores también pueden cambiar a una hora concreta del día ajustando un deslizador en su UI.

Cada vez que los jugadores entran en una escena con una hora del día diferente, o la escena cambia la hora del día dinámicamente, el skybox hace una transición suave durante unos segundos hacia este nuevo valor.

## Hora fija del día

Puedes establecer una hora del día fija para tu escena. Todos los jugadores verán la escena con esta hora del día, y el skybox no seguirá el ciclo día/noche.

En el Creator Hub, abre la configuración de la escena y haz clic en la **Settings** pestaña para encontrar la **Skybox** sección. Desmarca la **opción Auto** y establece la hora del día que quieras.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-85bd070c455c7e5852eba1e78902edb88dbfd17b%2Ffixed-time-of-day.png?alt=media)

También puedes establecer la hora del día del skybox en el código de tu escena. Para hacer esto, agrega la siguiente sección a tu `scene.json` a nivel raíz:

```json
 "skyboxConfig": {
    "fixedTime": 36000
  }
```

El número se refiere a la cantidad de segundos desde el inicio del día, que va desde 0 (eso se refiere a *00:00*) hasta 86400 (eso se refiere a *24:00*). Cualquier número mayor que 86400 se interpreta también como medianoche.

Aquí hay algunos ejemplos más de valores válidos:

* 0 segundos => *00:00*
* 21600 segundos => *06:00*
* 43200 segundos => *12:00*
* 64800 segundos => *18:00*
* 86400 segundos => *24:00*

## Leer la hora del día

Puedes leer la hora del día desde el código de tu escena usando el `getWorldTime()` función.

```ts
import { getWorldTime } from '~system/Runtime'

executeTask(async () => {
  let time = await getWorldTime({})
  console.log(time.seconds)
})
```

La función devuelve un número entre 0 y 86400, donde 0 es medianoche y 86400 es 24:00. Este valor se actualiza si la escena cambia la hora del día dinámicamente o si el jugador cambia la hora del día en la UI. De lo contrario, devuelve el valor relativo al ciclo predeterminado día/noche.

## Cambiar la hora del día dinámicamente

Puedes cambiar la hora del día dinámicamente usando el `SkyboxTime` componente. Este componente solo puede ser añadido a la entidad raíz de la escena `engine.rootEntity`.

```ts
import { SkyboxTime } from '@dcl/sdk/ecs'

function main() {
  SkyboxTime.create(engine.RootEntity, { fixedTime: 36000 })
}
```

El `fixed_time` la propiedad es un número entre 0 y 86400, donde 0 es medianoche y 86400 es 24:00. Cualquier número mayor que 86400 se interpreta también como medianoche.

Siempre que este componente se añada, elimine o la `fixed_time` propiedad cambie, el tiempo del día del skybox hace una transición suave durante unos segundos hacia este nuevo valor. Lo mismo ocurre cuando el jugador sale o entra en la escena. Mientras el tiempo del día del skybox esté fijo, el skybox ya no seguirá el progreso de su ciclo día/noche y los jugadores no podrán cambiar la hora del día mediante la UI.

Por defecto, la transición siempre ocurre en la dirección hacia adelante, pero puedes cambiar esto configurando el `dirección` propiedad a `TransitionMode.TM_FORWARD` o `TransitionMode.TM_BACKWARD`.

```ts
import { TransitionMode } from '~system/Runtime'
import { SkyboxTime } from '@dcl/sdk/ecs'

function main() {
  SkyboxTime.create(engine.RootEntity, { fixedTime: 36000, direction: TransitionMode.TM_BACKWARD })
}
```
