¿Te encanta Unreal Engine pero te gustaría poder trabajar con el lenguaje de programación C#? Hace poco más de un año vimos la Proyecto USharp que lamentablemente parece haber sido abandonado. Afortunadamente hay otro proyecto, irrealCLR que ha recorrido un largo camino en un período de tiempo muy corto. En este tutorial, veremos los conceptos básicos para comenzar a utilizar UnrealCLR. Hay algunas cosas que debe tener instaladas antes de comenzar.
El primer requisito más obvio es Unreal Engine, la versión más reciente (4.25.3) al momento de escribir este artículo. También debe tener instalada su cadena de compilación nativa (esto está disponible para Windows, Linux y Mac, por lo que cambiará de una plataforma a otra), en Windows eso significa usar Visual Studio 2017 o nuevo, el la versión comunitaria está bien. también necesitas tener Núcleo DotNet instalado así como un cliente de git.
Comenzamos con la creación de un nuevo proyecto en Unreal Engine. Crear un nuevo proyecto de juego:
Una plantilla en blanco está bien, aunque en realidad no importa tanto.
Los valores predeterminados están bien, apéguese a Blueprints para el tipo.
Deje que Unreal cree el proyecto, luego apáguelo ya que es el momento de configuración de UnrealCLR. Ahora haga clic derecho en su proyecto recién creado y elija Mostrar en carpeta.
Esto abrirá el proyecto en el Explorador de Windows, seleccione la ubicación, copie y pegue y cierre esta ventana.
Ahora es el momento de instalar UnrealCLR, copie la dirección de git de https://github.com/nxrighthere/UnrealCLR (https://github.com/nxrighthere/UnrealCLR.git)
Abra un símbolo del sistema y luego clone ese repositorio en un directorio permanente (la instalación persistirá en esta carpeta). Simplemente ejecuta:
clon de git https://github.com/nxrighthere/UnrealCLR.git
Próximo
cd UnrealCLR(+versión)instalar
ejecutar dotnet
Esto ejecutará el instalador, lo primero que debe hacer es pegar la ruta al Proyecto Unreal Engine que copiamos anteriormente.
Responda S a todas las preguntas restantes y deje que finalice la instalación. Ahora cargue su proyecto Unreal Engine nuevamente y se le pedirá que construya el módulo UnrealCLR faltante, diga que sí. Si esta parte falla, la configuración de compilación no está configurada correctamente.
Una vez que su proyecto esté cargado, seleccione Archivo->Abrir nivel… luego elija Pruebas en la carpeta Pruebas.
Ahora puede presionar el ícono Reproducir y ver un ejemplo con C# en acción:
Puede ver cómo se inicia el nivel usando Blueprints->Open Level Blueprint
En el editor de Blueprint, presione el ícono Detener si se está ejecutando, luego puede seleccionar el ejemplo activo en la variable Sistemas de prueba:
Ahora puede seleccionar un ejemplo diferente en el lado derecho de la pantalla.
Entonces, ¿dónde exactamente está controlando esto el código fuente? Los proyectos de prueba se encuentran en la carpeta UnrealCLR. en mi caso eso es C:tempUnrealCLR-1.14SourceManagedPruebas. El siguiente por ejemplo es InstancedStaticMeshes.csel primer ejemplo con los cubos giratorios.
using System; using System.Drawing; using System.Numerics; using System.Reflection; using UnrealEngine.Framework; namespace UnrealEngine.Tests { public static class InstancedStaticMeshes { private const int maxCubes = 200; private static Actor actor = new Actor("InstancedCubes"); private static SceneComponent sceneComponent = new SceneComponent(actor); private static Transform[] transforms = new Transform[maxCubes]; private static InstancedStaticMeshComponent instancedStaticMeshComponent = new InstancedStaticMeshComponent(actor, setAsRoot: true); private static Material material = Material.Load("/Game/Tests/BasicMaterial"); private static float rotationSpeed = 2.5f; public static void OnBeginPlay() { Debug.AddOnScreenMessage(-1, 3.0f, Color.LightGreen, MethodBase.GetCurrentMethod().DeclaringType + " system started!"); World.GetFirstPlayerController().SetViewTarget(World.GetActor<Camera>("MainCamera")); instancedStaticMeshComponent.SetStaticMesh(StaticMesh.Cube); instancedStaticMeshComponent.SetMaterial(0, material); instancedStaticMeshComponent.CreateAndSetMaterialInstanceDynamic(0).SetVectorParameterValue("Color", LinearColor.White); for (int i = 0; i < maxCubes; i++) { sceneComponent.SetRelativeLocation(new Vector3(150.0f * i, 50.0f * i, 100.0f * i)); sceneComponent.SetRelativeRotation(Maths.CreateFromYawPitchRoll(5.0f * i, 0.0f, 0.0f)); sceneComponent.AddLocalOffset(new Vector3(15.0f * i, 20.0f * i, 25.0f * i)); sceneComponent.GetTransform(ref transforms[i]); instancedStaticMeshComponent.AddInstance(transforms[i]); } Debug.AddOnScreenMessage(-1, 3.0f, Color.LightGreen, "Instances are created! Number of instances: " + instancedStaticMeshComponent.InstanceCount); } public static void OnEndPlay() => Debug.ClearOnScreenMessages(); public static void OnTick() { Debug.AddOnScreenMessage(1, 1.0f, Color.SkyBlue, "Frame number: " + Engine.FrameNumber); float deltaTime = World.DeltaTime; Quaternion deltaRotation = Maths.CreateFromYawPitchRoll(rotationSpeed * deltaTime, rotationSpeed * deltaTime, rotationSpeed * deltaTime); for (int i = 0; i < maxCubes; i++) { sceneComponent.SetWorldTransform(transforms[i]); sceneComponent.AddLocalRotation(deltaRotation); sceneComponent.GetTransform(ref transforms[i]); instancedStaticMeshComponent.UpdateInstanceTransform(i, transforms[i], markRenderStateDirty: i == maxCubes - 1); } } } }
Como puede ver, la lógica de su juego se implementa mediante una serie de funciones de devolución de llamada llamadas por el motor. Puedes aprender más sobre el modelo de programación en el manual. Obtén más información sobre UnrealCLR y cómo comenzar en el video debajo.