Para mí, Rider de JetBrains se ha establecido durante mucho tiempo como el mejor IDE para el desarrollo de Unity. En el reciente lanzamiento de Rider 2023.1, se agregaron muchas funciones nuevas que facilitan la vida de los desarrolladores. JetBrains una vez más no ha defraudado y sigue poniendo el listón muy alto.
La nueva versión permite depurar juegos que se ejecutan en dispositivos Android a través de un cable USB. En general, simplifica la depuración al crear automáticamente configuraciones de ejecución temporales para los jugadores conectados, optimizar las sesiones posteriores y permitir guardar y compartir fácilmente con su equipo en varias plataformas. Para algunos, una característica importante será la compatibilidad con la documentación localizada dentro del IDE.
También es hora de profundizar y explorar finalmente el kit de herramientas de la interfaz de usuario.
Rider ha agregado tres plantillas para extensiones de UI para el editor de Unity basadas en el kit de herramientas de UI.
Rider 2023.1 incluye mejoras en la identificación de campos con el atributo [SerializeReference], búsqueda del uso de C# en animaciones de Unity (que se echaba mucho de menos) y formato de atributos [Header].
En general, se han agregado muchas mejoras para trabajar con C#. Y por último, pero no menos importante, la parte más dulce: el tan esperado soporte DOTS de JetBrains.
Bueno, repasemos brevemente de qué se trata todo esto y si vale la pena actualizar Rider a la última versión. Si aún no ha estado usando este IDE, este artículo también le será útil.
A veces, un juego se comporta perfectamente bien en el editor de Unity, pero las cosas no funcionan tan bien en los dispositivos. Ahora Rider le permite depurar el código directamente en el dispositivo a través de USB. Bueno, eso es inspirador.
Recuerde, para que esta función funcione, la compilación debe compilarse con las opciones de compilación de desarrollo y depuración de scripts habilitadas.
Me gustaría recordarle que el dispositivo en sí también debe configurarse correctamente. Primero, el modo de desarrollador debe estar habilitado en el dispositivo.
Otra forma sencilla de encontrar el elemento "Número de compilación" es buscarlo en la configuración.
A continuación, lo que debe hacer es habilitar la "Depuración de USB" en las "Opciones de desarrollador" que aparecen.
Solo quedan un par de pasos más. Inicie su juego en el dispositivo y, en el menú principal de Rider, haga clic en "Ejecutar" y luego en "Adjuntar al proceso de Unity...". En la ventana abierta, seleccione el dispositivo Android con su aplicación.
¡Todo está listo! ¡Establece puntos de interrupción y depura tu juego directamente desde el dispositivo! No dude en aprovechar esta poderosa herramienta de depuración y mejorar su proceso de desarrollo de juegos.
Tan pronto como comience a depurar por primera vez, Rider creará automáticamente una configuración de ejecución temporal para el reproductor de Android. Si desea guardar la configuración de ejecución para usarla en el futuro, puede hacerlo y compartirla con su equipo.
Por supuesto, todos estamos muy acostumbrados a la IMGUI antigua, buena y, al mismo tiempo, terriblemente inflexible. Sin embargo, el equipo de Unity ha estado trabajando en un nuevo paquete de herramientas de interfaz de usuario durante mucho tiempo para mejorar nuestra experiencia de creación de interfaz de usuario para juegos. A partir de Unity 2022.2, se recomienda utilizar un nuevo enfoque al crear la interfaz de usuario en el editor.
UI Toolkit es un tema profundo separado. Solo diré que el nuevo enfoque ofrece un enfoque más conveniente y, hasta cierto punto, más común para crear una interfaz de usuario. Si tienes experiencia con HTML y CSS, te será muy fácil adaptarte. Pero también aconsejo a otros que no se demoren en dominar UI Toolkit.
Ahora Rider, para proyectos de Unity 2022.2 o anteriores, ofrece el uso de nuevas plantillas de forma predeterminada. Probemos uno de ellos. Para esto, primero, crearemos un ScriptableObject simple para describir los elementos del juego.
[CreateAssetMenu(fileName = "GameItem", menuName = "Game Item", order = 0)] public class GameItem : ScriptableObject { public string itemName; public int weight; public int price; }
Vamos a crear un editor personalizado para este ScriptableObject. Para hacer esto, haga clic derecho en la carpeta Editor en Rider, luego Agregar y seleccione Unity Script.
En la ventana abierta, seleccione Editor personalizado. Llamemos a nuestro editor GameItemEditor.
En el atributo CustomEditor, indique que el editor creado está destinado a la clase GameItem.
using UnityEditor; using UnityEngine.UIElements; [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public override VisualElement CreateInspectorGUI() { return base.CreateInspectorGUI(); } }
Abra Ventana-> Kit de herramientas de interfaz de usuario-> Constructor de interfaz de usuario. En la ventana gráfica, guarde el documento de interfaz de usuario actual y asígnele el nombre GameItem.uxml. Desde la ventana Biblioteca, agregue tres campos que se correspondan con nuestros campos de clase GameItem y asígneles los nombres apropiados.
Trabajar con UI Toolkit tiene varias ventajas obvias. Es posible editar gráficamente documentos UXML disponibles desde el primer momento a través de UI Builder, así como a través de la programación, algo similar a IGMUI. Ahora, el estilo de visualización de la interfaz de usuario se puede configurar en USS, esencialmente similar a CSS, y luego se puede reutilizar en el proyecto. Oh, cómo faltaba esto. El soporte de deshacer automático también está presente.
Otro hecho significativo es el enlace automático de datos. Indiquemos los nombres de los campos de la clase GameItem en los campos Binding Path.
No olvide guardar el documento a través del menú Archivo-> Guardar como… en la ventana de la ventana gráfica. Las teclas de acceso rápido para guardar Ctrl-S / Cmd-S no lo ayudarán aquí.
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> <ui:TextField picking-mode="Ignore" label="Name" name="Name" binding-path="itemName" /> <ui:IntegerField label="Weight" value="0" name="Weight" binding-path="weight" readonly="false" /> <ui:IntegerField label="Price" value="0" name="Price" binding-path="price" focusable="true" /> </ui:UXML>
Ahora terminemos de escribir el GameItemEditor para que forme el inspector directamente desde el documento UXML.
[CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public VisualTreeAsset treeAsset; public override VisualElement CreateInspectorGUI() { var inspector = new VisualElement(); treeAsset.CloneTree(inspector); return inspector; } }
Seleccione la secuencia de comandos GameItemEditor en la ventana Proyecto y especifique el documento de IU creado GameItem.uxml para el campo Activo del árbol, simplemente arrastrándolo allí.
Nuestro editor personalizado para la clase GameItem está listo. Puede experimentar un poco con el documento de la interfaz de usuario y ver cómo sus cambios afectarán la visualización en el inspector.
Bueno, el lanzamiento del nuevo Rider 2023.1 es una buena razón para profundizar en el estudio de UI Toolkit y obtener todos los beneficios de su uso.
La pila de tecnología orientada a datos de Unity, o simplemente DOTS, es un proyecto que el equipo de Unity ha estado desarrollando durante muchos años. Después de casi un año sin actualizaciones, los paquetes DOTS han pasado del estado experimental a la versión preliminar, recibiendo la versión 1.0.0. Al momento de escribir este artículo, es 1.0.0-pre.65. Y hay una promesa de un lanzamiento en 2023.
A pesar del largo tiempo de desarrollo y las dudas que algunos tenían sobre DOTS, que ya habían renunciado a esperar el lanzamiento, la nueva pila aún sorprende con sus capacidades y rendimiento.
El Diseño Orientado a Datos, o en términos generales, el Sistema de Componentes de Entidad (ECS), ofrece un enfoque completamente diferente a la arquitectura de programación de juegos. A diferencia de los patrones familiares de Programación Orientada a Objetos, el enfoque aquí está en la separación de datos y su procesamiento. En una arquitectura de este tipo, los datos similares generalmente se ubican uno cerca del otro en la memoria y permiten que los sistemas los procesen con una velocidad increíble, especialmente si esto se puede hacer en un modo de subprocesos múltiples.
Se ha realizado una gran cantidad de trabajo en DOTS, con mecanismos de administración de memoria nativos agregados para que puedan usarse convenientemente directamente desde C#.
Con el lanzamiento de DOTS 1.0.0, muchos enfoques para el desarrollo de aplicaciones han cambiado. En mi opinión, se han vuelto más convenientes e intuitivos.
Aunque todavía falta buena documentación, hay suficiente para comenzar a sumergirse en el mundo increíblemente productivo de DOTS y volver a conectar su cerebro para ECS y el procesamiento de datos de subprocesos múltiples.
Anteriormente publiqué un artículo sobre la simulación de gravedad usando Gravity Simulation With Unity DOTS 1.0 . Si lo desea, también puede encontrar muchos otros materiales educativos para estudiar esta pila. Para probar las nuevas capacidades de Rider, abrí mi antiguo proyecto Wave Propagation, que estaba escrito en la versión anterior de DOTS.
Lo que siempre me molestó fueron las muchas advertencias emitidas por Rider o Visual Studio debido a las especificaciones de la escritura de código. Ahora el código se ve limpio y agradable.
¡Finalmente! ¡Cómo he estado esperando esto! Rider es oficialmente compatible con DOTS, lo que sin duda lo convierte en el IDE número uno para el desarrollo de Unity. Ahora Rider realmente entiende lo que está bien y lo que no.
Por ejemplo, en este fragmento de código,
public partial struct TransformingSystem : ISystem { [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
Rider sugirió que ahora, para el acceso correcto al campo singleton, OnCreate() necesita establecer la expectativa a través del método state.RequireForUpdate<Field>().
public partial struct TransformingSystem : ISystem { public void OnCreate(ref SystemState state) { state.RequireForUpdate<Field>(); } [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
Han aparecido plantillas para crear panaderos para MonoBehaviors, y se le ofrecerá crear un nuevo componente o agregar campos a uno existente.
Por supuesto, no todo es perfecto todavía. Al generar código de panadero, se usa una plantilla desactualizada. Tengo este código.
public class FieldAuthoring : MonoBehaviour { public GameObject CellPrefab; public Field Field; public Impulse Impulse; public class FieldAuthoringBaker : Baker<FieldAuthoring> { public override void Bake(FieldAuthoring authoring) { AddComponent(new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab), Field = authoring.Field, Impulse = authoring.Impulse }); } } } public struct FieldComponentData : IComponentData { public Entity CellPrefab; public Field Field; public Impulse Impulse; }
Aquí, se utilizan los métodos ya obsoletos GetEntity() y AddComponent(). En su lugar, la adición de componentes ahora debe hacerse de esta manera.
public override void Bake(FieldAuthoring authoring) { var entity = GetEntity(TransformUsageFlags.Dynamic); AddComponent(entity, new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab, TransformUsageFlags.Dynamic), Field = authoring.Field, Impulse = authoring.Impulse }); }
Por supuesto, puede cambiar las plantillas usted mismo. Pero creo que el arreglo de JetBrains no tardará en llegar. También existe la posibilidad de crear un MonoBehaviour autorizador con un panadero para el componente. En su blog, ya puede encontrar un artículo que describe ampliamente las nuevas capacidades cuando se trabaja con DOTS, por lo que no veo el sentido de describir lo mismo aquí.
El lanzamiento de Rider 2023.1 trae una gran cantidad de nuevas funciones y mejoras para los desarrolladores de Unity, consolidando su posición como el mejor IDE para el desarrollo de Unity. Con depuración mejorada para dispositivos Android, nuevas plantillas para UI Toolkit, soporte DOTS largamente esperado y características adicionales como acceso rápido a documentación en línea para paquetes de registro de Unity y documentación de API localizada, JetBrains continúa elevando el nivel de las herramientas de desarrollo de juegos. Estas funciones no solo simplifican el proceso de desarrollo, sino que también permiten a los desarrolladores crear juegos mejores y más eficientes.
Además, Rider 2023.1 ofrece varias otras actualizaciones, como una detección más precisa de campos serializados en el código, soporte mejorado para encontrar usos de C# en animaciones de Unity y la actualización muy solicitada del motor de formato para colocar atributos [Header] en una línea separada. Estas mejoras contribuyen a una experiencia de desarrollo más optimizada y eficiente.
Tanto si es un desarrollador experimentado de Unity como si acaba de empezar, vale la pena explorar la versión Rider 2023.1. Las nuevas características satisfacen una amplia gama de necesidades y ayudan a optimizar el proceso de desarrollo. Si no ha usado Rider antes, esta versión ofrece una excelente oportunidad para experimentar sus potentes funciones de primera mano. Para aquellos que ya usan Rider, la actualización a la última versión sin duda mejorará su flujo de trabajo de desarrollo de juegos.
Adopte los últimos avances en el desarrollo de Unity con Rider 2023.1 y lleve sus proyectos de juegos a nuevas alturas. No pierda la oportunidad de mejorar su experiencia de desarrollo y crear juegos más atractivos y de alto rendimiento.