Cómo Personalizar los Controles de Cámara en Hytale

Hytale: Guías, Mods, Opiniones | Videojuegos en CIBERED

La cámara se controla enviando un paquete SetServerCamera con un objeto ServerCameraSettings.

Ejemplo de cámara en tercera persona:

ServerCameraSettings settings = new ServerCameraSettings();
settings.distance = 10.0f;           // Distancia al jugador
settings.isFirstPerson = false;      // Modo tercera persona
settings.positionLerpSpeed = 0.2f;   // Suavizado al seguir al jugador

playerRef.getPacketHandler().writeNoCache(
    new SetServerCamera(ClientCameraView.Custom, true, settings)
);

Para restablecer la cámara a la configuración predeterminada:

playerRef.getPacketHandler().writeNoCache(
    new SetServerCamera(ClientCameraView.Custom, false, null)
);

Explorando el Código de HytaleServer.jar

Presets de Cámara

Vista Superior (Estilo RTS/ARPG)

Fuente: PlayerCameraTopdownCommand

ServerCameraSettings settings = new ServerCameraSettings();
settings.positionLerpSpeed = 0.2f;
settings.rotationLerpSpeed = 0.2f;
settings.distance = 20.0f;
settings.displayCursor = true;
settings.isFirstPerson = false;
settings.movementForceRotationType = MovementForceRotationType.Custom;
settings.movementForceRotation = new Direction(-0.7853981634f, 0.0f, 0.0f);  // 45° izquierda
settings.eyeOffset = true;
settings.positionDistanceOffsetType = PositionDistanceOffsetType.DistanceOffset;
settings.rotationType = RotationType.Custom;
settings.rotation = new Direction(0.0f, -1.5707964f, 0.0f);  // Mirando hacia abajo
settings.mouseInputType = MouseInputType.LookAtPlane;
settings.planeNormal = new Vector3f(0.0f, 1.0f, 0.0f);       // Plano del suelo

Lateral (Side-Scroller, Estilo 2D)

Fuente: PlayerCameraSideScrollerCommand

ServerCameraSettings settings = new ServerCameraSettings();
settings.positionLerpSpeed = 0.2f;
settings.rotationLerpSpeed = 0.2f;
settings.distance = 15.0f;
settings.displayCursor = true;
settings.isFirstPerson = false;
settings.movementForceRotationType = MovementForceRotationType.Custom;
settings.movementMultiplier = new Vector3f(1.0f, 1.0f, 0.0f);  // Bloquea eje Z
settings.eyeOffset = true;
settings.positionDistanceOffsetType = PositionDistanceOffsetType.DistanceOffset;
settings.rotationType = RotationType.Custom;
settings.mouseInputType = MouseInputType.LookAtPlane;
settings.planeNormal = new Vector3f(0.0f, 0.0f, 1.0f);         // Plano lateral

Configuración Común Explicada

Posición y Rotación

  • positionLerpSpeed (0.0-1.0): Suavizado de la posición al seguir al jugador. Más bajo = más lento pero más fluido.
  • rotationLerpSpeed (0.0-1.0): Suavizado de la rotación de la cámara.
  • distance: Distancia de la cámara al jugador.
  • rotation: Ángulo de la cámara (Direction(yaw, pitch, roll) en radianes).
  • rotationType: Tipo de cálculo de la rotación. Custom usa el valor definido en rotation.

Alineación del Movimiento

  • movementForceRotationType:

    • AttachedToHead: el movimiento sigue la dirección de la mirada del jugador.
    • Custom: usa movementForceRotation.
  • movementForceRotation: Dirección personalizada para los movimientos W/S, alineada con el yaw de la cámara y pitch = 0.

Entrada y Visualización

  • displayCursor: Muestra u oculta el cursor del ratón.

  • mouseInputType:

    • LookAtPlane: mueve cursor sobre un plano (ideal para top-down).
    • LookAtTarget: rota la cámara hacia el objetivo.
  • planeNormal: Para LookAtPlane, define el plano sobre el que se mueve el cursor. (0,1,0) = suelo.

Avanzado

  • positionDistanceOffsetType:

    • DistanceOffset: distancia simple.
    • DistanceOffsetRaycast: evita que la cámara atraviese paredes.
  • eyeOffset: Desplaza la cámara desde los ojos del jugador.

  • movementMultiplier: Escala movimiento por eje. (1,1,0) = bloquea eje Z para movimiento 2D.


Importaciones Necesarias

import com.hypixel.hytale.protocol.ClientCameraView;
import com.hypixel.hytale.protocol.Direction;
import com.hypixel.hytale.protocol.MouseInputType;
import com.hypixel.hytale.protocol.MovementForceRotationType;
import com.hypixel.hytale.protocol.PositionDistanceOffsetType;
import com.hypixel.hytale.protocol.RotationType;
import com.hypixel.hytale.protocol.ServerCameraSettings;
import com.hypixel.hytale.protocol.Vector3f;
import com.hypixel.hytale.protocol.packets.camera.SetServerCamera;

Consejos Prácticos

  • Ajusta zoom con distance (mayor = más alejada).
  • Controla suavidad con positionLerpSpeed y rotationLerpSpeed.
  • Evita que la cámara atraviese paredes con DistanceOffsetRaycast.
  • Bloquea la cámara con isLocked = true.
  • Para movimiento 2D, usa movementMultiplier para inhabilitar un eje.
  • Cámaras isométricas: siempre alinea movementForceRotation con el yaw de la cámara.
  • Convierte ángulos a radianes: Math.toRadians(degrees) o degrees * Math.PI / 180.0.

  • Basado en Hytale Server build 2026.01.13-dcad8778f.