Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

Guía de Extracción de Librerías e Integración de SignalR en Unity 🎮

Esta carpeta contiene los scripts de automatización y los componentes cliente de C# optimizados para Unity 6 (6.3 LTS) listos para conectar con el backend en .NET Core.


📂 Estructura de la Carpeta scripts/

scripts/
├── build-signalr-unity.bat       # Script automatizado de extracción para Windows
├── build-signalr-unity.sh        # Script automatizado de extracción para Linux / macOS
├── Plugins/
│   └── SignalR_Unity_Libs/       # Carpetas con las 30 DLLs compiladas en .NET Standard 2.1
└── UnityScripts/                 # Scripts de C# de la implementación multijugador
    ├── DTOs/
    │   ├── ChatMessageDto.cs     # DTO serializable para chat
    │   └── PlayerMovementDto.cs  # DTO serializable para posición/movimiento y avatar
    ├── Networking/
    │   ├── NetworkManager.cs     # Singleton principal para conexión SignalR y eventos
    │   ├── NetworkPlayerSpawner.cs # Generación y actualización de jugadores remotos
    │   └── UnityMainThreadDispatcher.cs # Despachador para ejecutar callbacks en el hilo de Unity
    ├── Player/
    │   ├── PlayerController.cs   # Control de movimiento local y transmisión por red
    │   └── PlayerSetup.cs        # Configuración visual del jugador local (nombre/avatar)
    └── UI/
        ├── ChatUIManager.cs      # Interfaz de usuario para chat global y espacial
        └── MainMenu.cs           # Menú principal para configurar avatar e iniciar juego

🚀 Guía de Integración Paso a Paso en Unity

Paso 1: Generar/Actualizar las DLLs Oficiales de SignalR

Ejecuta el script correspondiente a tu sistema operativo dentro de esta carpeta:

  • En Windows (1 Clic): Ejecuta build-signalr-unity.bat haciendo doble clic o desde la consola:

    scripts\build-signalr-unity.bat
  • En Linux / macOS:

    chmod +x scripts/build-signalr-unity.sh
    ./scripts/build-signalr-unity.sh

El script creará automáticamente la carpeta scripts/Plugins/SignalR_Unity_Libs/ con las 30 DLLs oficiales de Microsoft Microsoft.AspNetCore.SignalR.Client compiladas en .NET Standard 2.1.


Paso 2: Importar en tu Proyecto de Unity

  1. Copia la carpeta scripts/Plugins/SignalR_Unity_Libs/ a la ruta Assets/Plugins/ en tu proyecto de Unity:

    Assets/Plugins/SignalR_Unity_Libs/
    
  2. Copia la carpeta scripts/UnityScripts/ a la ruta Assets/Scripts/ en tu proyecto de Unity:

    Assets/Scripts/UnityScripts/
    

Paso 3: Configurar el NetworkManager en la Escena de Unity

  1. En Unity, crea un Empty GameObject en la jerarquía de tu escena inicial (o pantalla de título) y nómbralo NetworkManager.
  2. Arrastra el script NetworkManager.cs hacia el objeto NetworkManager.
  3. En el Inspector:
    • Hub Url: http://localhost:5240/hubs/game

💻 Ejemplo de Uso desde tus Scripts de Juego en Unity

A. Mover a tu Jugador y Transmitir Posición (PlayerController.cs)

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float VelocidadInput = 5f;
    private Rigidbody2D rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
        float moveX = Input.GetAxisRaw("Horizontal");
        float moveY = Input.GetAxisRaw("Vertical");
        Vector2 movement = new Vector2(moveX, moveY).normalized;

        if (rb != null)
        {
            rb.velocity = movement * VelocidadInput;
        }

        if (movement != Vector2.zero && NetworkManager.Instance != null)
        {
            _ = NetworkManager.Instance.SendMovement(rb.position, moveY > 0 ? "up" : "down");
        }
    }
}

B. Recibir Movimiento de Otros Jugadores en Tiempo Real (NetworkPlayerSpawner.cs)

using UnityEngine;

public class RemotePlayerManager : MonoBehaviour
{
    void OnEnable()
    {
        if (NetworkManager.Instance != null)
            NetworkManager.Instance.OnPlayerMovedReceived += OnOtherPlayerMoved;
    }

    private void OnOtherPlayerMoved(PlayerMovementDto movement)
    {
        Debug.Log($"Jugador {movement.Username} ({movement.PlayerId}) se movió a ({movement.PositionX}, {movement.PositionY})");
    }

    void OnDisable()
    {
        if (NetworkManager.Instance != null)
            NetworkManager.Instance.OnPlayerMovedReceived -= OnOtherPlayerMoved;
    }
}

💡 Resolución de Conflictos Comunes en Unity

  • Duplicidad de System.Text.Json.dll: Si Unity muestra un aviso de DLL duplicada:
    1. Ve a Assets/Plugins/SignalR_Unity_Libs/System.Text.Json.dll.
    2. En el Inspector, desmarca la casilla Any Platform.
    3. Haz clic en Apply.