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.
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
Ejecuta el script correspondiente a tu sistema operativo dentro de esta carpeta:
-
En Windows (1 Clic): Ejecuta
build-signalr-unity.bathaciendo 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.
-
Copia la carpeta
scripts/Plugins/SignalR_Unity_Libs/a la rutaAssets/Plugins/en tu proyecto de Unity:Assets/Plugins/SignalR_Unity_Libs/ -
Copia la carpeta
scripts/UnityScripts/a la rutaAssets/Scripts/en tu proyecto de Unity:Assets/Scripts/UnityScripts/
- En Unity, crea un Empty GameObject en la jerarquía de tu escena inicial (o pantalla de título) y nómbralo
NetworkManager. - Arrastra el script
NetworkManager.cshacia el objetoNetworkManager. - En el Inspector:
- Hub Url:
http://localhost:5240/hubs/game
- Hub Url:
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");
}
}
}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;
}
}- Duplicidad de
System.Text.Json.dll: Si Unity muestra un aviso de DLL duplicada:- Ve a
Assets/Plugins/SignalR_Unity_Libs/System.Text.Json.dll. - En el Inspector, desmarca la casilla Any Platform.
- Haz clic en Apply.
- Ve a