Scene
Buscar, crear, instanciar y destruir objetos; cambiar de escena.
Scene.find(nombre) | Primera entidad con ese nombre, o nil. |
Scene.findWithTag(tag) | Primera entidad con esa etiqueta. |
Scene.findAllWithTag(tag) | Tabla con todas las entidades con esa etiqueta. |
Scene.create(nombre, posición) | Entidad vacía nueva. |
Scene.instantiate(entidad, posición, giro) | Copia una entidad con sus hijos y componentes (incluidos los scripts). posición y giro (grados) son opcionales. |
Scene.instantiate("Prefabs/Enemigo", posición, giro) | Crea una instancia de un prefab por su ruta dentro de Assets (con o sin .crprefab). Devuelve nil si no existe. Los prefabs se crean en el editor arrastrando un objeto de la Jerarquía al panel Proyecto. |
Scene.destroy(entidad) | Igual que entidad:destroy(). |
Scene.load(nombre) | Cambia de escena al terminar el frame ("Nivel2" busca Nivel2.crscene). |
Scene.name() | Nombre de la escena actual. |
Mundos grandes: origen flotante
Los números de las posiciones (float) solo tienen unas 7 cifras: lejos del centro todo tiembla. Cramion lo evita
solo: cuando la cámara se aleja más de 2 km del origen, el mundo entero se desplaza (en pasos de
1024 m) para que vuelva a estar cerca, y guarda en doble precisión dónde está de verdad ese origen. Las mallas, la
luz, las sombras, la física, los bloques, la navegación y el sonido siguen igual; tú no tienes que hacer nada si lees
las posiciones cada frame (self.entity.position).
| Función | Qué hace |
|---|---|
Scene.origin() | x, y, z (doble precisión) del origen actual del mundo. |
Scene.toAbsolute(pos) | x, y, z reales de una posición: úsalo para guardar posiciones en una partida. |
Scene.toLocal(x, y, z) | Vec3 local de una posición real guardada (al cargar). |
function Script:OnOriginShift(offset) | Se llama cuando el mundo se desplaza -offset: resta offset a las posiciones que tengas guardadas en variables (un destino, un punto de aparición). |
function Script:Start()
self.destino = Vec3(5000, 0, 200)
end
-- El mundo se desplazo: el destino guardado tambien.
function Script:OnOriginShift(offset)
self.destino = self.destino - offset
end
-- Guardar y cargar la posicion del jugador sin perder precision
function Script:guardar()
local x, y, z = Scene.toAbsolute(self.entity.position)
Prefs.setString("jugador", x .. "," .. y .. "," .. z)
end
¿Algo no queda claro o falta algo? Pregunta en el Discord.