Script para crear un interruptor de luz en Unity

La capacidad de encender o apagar una luz en un entorno de juego puede mejorar enormemente la inmersión del jugador. Ya sea el simple acto de explorar una habitación oscura o indicarle a un jugador que ha ocurrido un evento, el humilde interruptor de la luz puede desempeñar un papel fundamental. Este script proporciona una manera fácil de alternar una fuente de luz en Unity.

¿Por qué utilizar un script de interruptor de luz?

  • Entornos interactivos: una fuente de luz conmutable puede hacer que sus entornos sean más interactivos y dinámicos.
  • Puzzles: Se puede integrar en los mecanismos de puzzle.
  • Mecanismo de retroalimentación: las luces pueden actuar como retroalimentación, mostrando al jugador que se ha reconocido una acción.

¿Cuándo usarlo?

  • Juegos de terror: Para casos en los que gestionar la oscuridad y la luz es fundamental para crear tensión.
  • Juegos de aventuras: donde los jugadores necesitan interactuar con su entorno.
  • Escape Rooms: donde resolver un rompecabezas puede requerir encender o apagar luces.

Configuración y cómo utilizar

  • Crea una Luz: En Unity, crea una Luz Puntual, un Foco o cualquier otra fuente de luz que desees.
  • Adjunte el script: Cree un nuevo script C# llamado 'LightSwitch' y adjunte al GameObject deseado.
  • Conecte la fuente Light: arrastre su fuente light al campo del componente Light del script en el inspector.

'LightSwitch.cs'

using UnityEngine;

public class LightSwitch : MonoBehaviour
{
    public Light lightSource; // Drag your light source here
    public bool isOn = true; // If you want the light to start as ON

    private void Start()
    {
        if (lightSource)
        {
            lightSource.enabled = isOn;
        }
    }

    public void ToggleLight()
    {
        if (lightSource)
        {
            isOn = !isOn;
            lightSource.enabled = isOn;
        }
    }
}
  • Asegúrate de tener un reproductor transitable etiquetado como "Player". Si has seguido nuestro tutorial Unity FPS Controller, ya deberías tener el reproductor en su lugar, simplemente cambia su etiqueta a "Player".
  • Crea un nuevo GameObject vacío cerca del alcance del jugador y llámalo "LightSwitchTrigger". Esto actuará como zona de interacción para el interruptor de la luz.
  • Agregue un componente 'Box Collider' al GameObject "LightSwitchTrigger". Ajusta su tamaño y posición para cubrir el área donde deseas que el jugador pueda interactuar con el interruptor de la luz. Asegúrese de marcar la casilla de verificación "Is Trigger" en 'Box Collider'.

Guión de interacción:

  • Cree un nuevo script C# llamado 'LightSwitchInteraction'. Este script verificará si el jugador ha ingresado a la zona de interacción y escuchará las entradas para alternar la luz.

'LightSwitchInteraction.cs'

using UnityEngine;

public class LightSwitchInteraction : MonoBehaviour
{
    public LightSwitch lightSwitch; // Reference to our LightSwitch script
    private bool playerInZone = false;

    private void Update()
    {
        if (playerInZone && Input.GetKeyDown(KeyCode.E)) // E key is used for interaction in this example
        {
            lightSwitch.ToggleLight();
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerInZone = true;
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerInZone = false;
        }
    }
}

Configurarlo:

  • Adjunte el script 'LightSwitchInteraction' al "LightSwitchTrigger" GameObject.
  • En el Inspector, arrastre el GameObject con el script 'LightSwitch' al campo "Light Switch" del componente 'LightSwitchInteraction'.

Jugando el juego

Ahora, cuando su jugador (con la etiqueta "Player") se acerque a la zona de interacción, al presionar la tecla "E" se encenderá o apagará la luz. También puede ajustar la clave de interacción en el script LightSwitchInteraction cambiando 'KeyCode.E' por cualquier otra clave que desee.

Preguntas frecuentes relacionadas con el tema:

  • ¿Puede este script manejar múltiples fuentes de luz?: Tal como está escrito, no, pero puedes modificarlo fácilmente para aceptar una lista de objetos de Luz y recorrerlos en el método 'ToggleLight' para alternarlos todos a la vez.
  • ¿Cómo puedo agregar sonido cuando la luz se enciende o apaga?: Puedes agregar un componente 'AudioSource' al GameObject y reproducir un clip de sonido en el método 'ToggleLight' cuando cambia el estado de la luz..

Conclusión

La implementación de un interruptor de luz en Unity no solo sirve como una herramienta dinámica para alterar el ambiente y el estado de ánimo de un entorno de juego, sino que también aumenta la interacción y la inmersión del jugador. Al usar scripts simples y las funciones integradas Unity, podemos crear un mecanismo interactivo de alternancia de luz que responde a la proximidad del jugador y a la entrada. Estos elementos, aunque aparentemente menores, pueden mejorar significativamente el juego, haciendo que los entornos sean más atractivos y respondan mejor a las acciones de los jugadores.