Para mim, o Rider da JetBrains há muito se estabeleceu como o melhor IDE para o desenvolvimento do Unity. Na versão recente do Rider 2023.1, muitos novos recursos foram adicionados para facilitar a vida dos desenvolvedores. A JetBrains mais uma vez não decepcionou e continua a elevar a fasquia.
A nova versão permite depurar jogos rodando em dispositivos Android via cabo USB. Em geral, simplifica a depuração criando automaticamente configurações de execução temporária para jogadores conectados, otimizando as sessões subsequentes e permitindo salvar e compartilhar facilmente com sua equipe em várias plataformas. Para alguns, um recurso importante será o suporte para documentação localizada diretamente no IDE.
Também é hora de finalmente mergulhar mais fundo e explorar o UI Toolkit.
O Rider adicionou três modelos para extensões de interface do usuário para o Unity Editor com base no UI Toolkit.
O Rider 2023.1 inclui melhorias na identificação de campos com o atributo [SerializeReference], localização do uso de C# em animações do Unity (que foi extremamente perdida) e formatação dos atributos [Header].
Em geral, muitos aprimoramentos foram adicionados para trabalhar com C#. E por último, mas não menos importante, a parte mais doce: o tão esperado suporte DOTS da JetBrains.
Bem, vamos revisar brevemente do que se trata e se vale a pena atualizar o Rider para a versão mais recente. Se você ainda não usa este IDE, este artigo também será útil para você.
Às vezes, um jogo se comporta perfeitamente bem no editor do Unity, mas as coisas não funcionam tão bem nos dispositivos. Agora o Rider permite depurar o código diretamente no dispositivo via USB. Bem, isso é inspirador.
Lembre-se, para que esse recurso funcione, a compilação deve ser compilada com as opções Development Build e Script Debugging ativadas.
Gostaria de lembrá-lo de que o próprio dispositivo também deve ser configurado corretamente. Primeiro, o modo de desenvolvedor deve estar ativado no dispositivo.
Outra maneira simples de encontrar o item "Número da compilação" é procurá-lo nas configurações.
Em seguida, o que você precisa fazer é ativar a "depuração USB" nas "Opções do desenvolvedor" exibidas.
Faltam apenas mais alguns passos. Inicie seu jogo no dispositivo e, no menu principal do Rider, clique em "Executar" e depois em "Anexar ao processo do Unity...". Na janela aberta, selecione o dispositivo Android com seu aplicativo.
Tudo está pronto! Defina pontos de interrupção e depure seu jogo diretamente do dispositivo! Não hesite em aproveitar esta poderosa ferramenta de depuração e aprimorar seu processo de desenvolvimento de jogos.
Assim que você iniciar a depuração pela primeira vez, o Rider criará automaticamente uma configuração de execução temporária para o player Android. Se você quiser salvar a configuração de execução para uso futuro, poderá fazê-lo e compartilhá-la com sua equipe.
Claro, estamos todos muito acostumados com o antigo, bom e ao mesmo tempo terrivelmente inflexível IMGUI. No entanto, a equipe do Unity está trabalhando há muito tempo em um novo pacote UI Toolkit para melhorar nossa experiência de criação de interface do usuário para jogos. A partir do Unity 2022.2, é recomendável usar uma nova abordagem ao criar a interface do usuário no editor.
O UI Toolkit é um tópico profundo separado. Direi apenas que a nova abordagem oferece uma abordagem mais conveniente e, até certo ponto, mais comum para a criação de IU. Se você tiver experiência com HTML e CSS, será muito fácil se adaptar. Mas também aconselho outras pessoas a não demorarem para dominar o UI Toolkit.
Agora o Rider, para projetos Unity 2022.2 ou anteriores, oferece o uso de novos modelos por padrão. Vamos tentar um deles. Para isso, primeiro vamos criar um ScriptableObject simples para descrever os itens do jogo.
[CreateAssetMenu(fileName = "GameItem", menuName = "Game Item", order = 0)] public class GameItem : ScriptableObject { public string itemName; public int weight; public int price; }
Vamos criar um editor personalizado para este ScriptableObject. Para fazer isso, clique com o botão direito do mouse na pasta Editor no Rider, depois em Adicionar e selecione Unity Script.
Na janela aberta, selecione Editor personalizado. Vamos nomear nosso editor GameItemEditor.
No atributo CustomEditor, indique que o editor criado é destinado à classe GameItem.
using UnityEditor; using UnityEngine.UIElements; [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public override VisualElement CreateInspectorGUI() { return base.CreateInspectorGUI(); } }
Abra Janela-> UI Toolkit-> UI Builder. No Viewport, salve o documento de UI atual e nomeie-o como GameItem.uxml. Na janela Biblioteca, adicione três campos que corresponderão aos nossos campos de classe GameItem e dê a eles nomes apropriados.
Trabalhar com o UI Toolkit tem várias vantagens óbvias. É possível editar graficamente documentos UXML disponíveis imediatamente através do UI Builder, bem como através de programação, um pouco semelhante ao IGMUI. Agora, o estilo de exibição da interface do usuário pode ser definido no USS, essencialmente semelhante ao CSS, e reutilizado no projeto. Oh, como isso estava faltando. O suporte para desfazer automático também está presente.
Outro fato significativo é a vinculação automática de dados. Vamos indicar os nomes dos campos da classe GameItem nos campos Binding Path.
Não se esqueça de salvar o documento através do menu Arquivo-> Salvar como… na janela Viewport. Teclas de atalho para salvar Ctrl-S / Cmd-S não irão ajudá-lo aqui.
<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>
Agora vamos terminar de escrever o GameItemEditor para que ele forme o inspetor diretamente do 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; } }
Selecione o script GameItemEditor na janela Project e especifique o documento de UI criado GameItem.uxml para o campo Tree Asset, simplesmente arrastando-o para lá.
Nosso editor personalizado para a classe GameItem está pronto. Você pode experimentar um pouco com o documento de interface do usuário e ver como suas alterações afetarão a exibição no inspetor.
Bem, o lançamento do novo Rider 2023.1 é um bom motivo para mergulhar no estudo do UI Toolkit e obter todos os benefícios de seu uso.
O Data-Oriented Technology Stack do Unity, ou simplesmente DOTS, é um projeto que vem sendo desenvolvido pela equipe do Unity há muitos anos. Depois de quase um ano sem nenhuma atualização, os pacotes DOTS passaram do estado experimental para o pré-lançamento, recebendo a versão 1.0.0. No momento da redação deste artigo, é 1.0.0-pre.65. E há a promessa de um lançamento em 2023.
Apesar do longo tempo de desenvolvimento e das dúvidas de alguns sobre o DOTS, que já haviam desistido de esperar pelo lançamento, a nova pilha ainda surpreende com suas capacidades e desempenho.
Data-Oriented Design, ou de um modo geral, o Entity Component System (ECS), oferece uma abordagem completamente diferente para a arquitetura de programação de jogos. Ao contrário dos padrões familiares de Programação Orientada a Objetos, o foco aqui está na separação de dados e seu processamento. Em tal arquitetura, dados semelhantes geralmente estão localizados próximos uns dos outros na memória e permitem que os sistemas os processem com uma velocidade incrível, especialmente se isso puder ser feito em um modo multithread.
Uma grande quantidade de trabalho foi feita em DOTS, com mecanismos de gerenciamento de memória nativa adicionados para que possam ser usados convenientemente diretamente do C#.
Com o lançamento do DOTS 1.0.0, muitas abordagens para o desenvolvimento de aplicativos mudaram. Na minha opinião, eles se tornaram mais convenientes e intuitivos.
Embora ainda haja uma falta de boa documentação, há o suficiente para começar a mergulhar no mundo incrivelmente produtivo do DOTS e reprogramar seu cérebro para ECS e processamento de dados multithread.
Anteriormente, lancei um artigo sobre simulação de gravidade usando Gravity Simulation With Unity DOTS 1.0 . Se desejar, você também pode encontrar muitos outros materiais educacionais para estudar esta pilha. Para testar os novos recursos do Rider, abri meu antigo projeto Wave Propagation, que foi escrito na versão anterior do DOTS.
O que sempre me incomodou foram os muitos avisos emitidos pelo Rider ou pelo Visual Studio devido às especificidades de escrever código. Agora o código parece limpo e agradável.
Finalmente! Como eu estava esperando por isso! O Rider oferece suporte oficial ao DOTS, o que sem dúvida o torna o IDE número um para o desenvolvimento do Unity. Agora Rider realmente entende o que é certo e o que não é.
Por exemplo, neste pedaço 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 sugeriu que agora, para o acesso correto ao campo singleton, OnCreate() precisa definir a expectativa por meio do 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(); } }
Modelos para criar padeiros para MonoBehaviors apareceram e você poderá criar um novo componente ou adicionar campos a um existente.
Claro, nem tudo é perfeito ainda. Ao gerar o código do padeiro, um modelo desatualizado é usado. Eu tenho 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; }
Aqui, os métodos já desatualizados GetEntity() e AddComponent() são usados. Em vez disso, a adição de componentes agora deve ser feita dessa maneira.
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 }); }
Claro, você mesmo pode alterar os modelos. Mas acho que a correção da JetBrains não vai demorar muito para chegar. Existe também a possibilidade de criar um MonoBehaviour de autorização com um padeiro para o componente. No blog deles, você já pode encontrar um artigo , que descreve extensivamente os novos recursos ao trabalhar com DOTS, então não vejo sentido em descrever o mesmo aqui.
A versão Rider 2023.1 traz diversos novos recursos e melhorias para desenvolvedores Unity, solidificando sua posição como o melhor IDE para desenvolvimento Unity. Com depuração aprimorada para dispositivos Android, novos modelos para UI Toolkit, suporte DOTS há muito esperado e recursos adicionais, como acesso rápido à documentação on-line para pacotes de registro Unity e documentação de API localizada, a JetBrains continua elevando o nível de ferramentas de desenvolvimento de jogos. Esses recursos não apenas simplificam o processo de desenvolvimento, mas também capacitam os desenvolvedores a criar jogos melhores e mais eficientes.
Além disso, o Rider 2023.1 oferece várias outras atualizações, como detecção mais precisa de campos serializados no código, suporte aprimorado para encontrar usos de C# em animações do Unity e a atualização altamente solicitada do mecanismo de formatação para colocar os atributos [Header] em uma linha separada. Esses aprimoramentos contribuem para uma experiência de desenvolvimento mais simplificada e eficiente.
Seja você um desenvolvedor Unity experiente ou apenas começando, vale a pena explorar a versão Rider 2023.1. Os novos recursos atendem a uma ampla gama de necessidades e ajudam a simplificar o processo de desenvolvimento. Se você nunca usou o Rider antes, esta versão oferece uma excelente oportunidade para experimentar seus poderosos recursos em primeira mão. Para aqueles que já usam o Rider, atualizar para a versão mais recente sem dúvida aprimorará seu fluxo de trabalho de desenvolvimento de jogos.
Adote os avanços mais recentes no desenvolvimento do Unity com o Rider 2023.1 e leve seus projetos de jogo a novos patamares. Não perca a chance de melhorar sua experiência de desenvolvimento e criar jogos mais envolventes e de alto desempenho.