Eu tenho um projeto do Unity sem nenhum controle de versão e preciso compartilhá-lo com outro desenvolvedor para que possamos trabalhar no projeto.
Que estratégias devem ser usadas para se sair bem com os Unity Assets?
Eu tenho um projeto do Unity sem nenhum controle de versão e preciso compartilhá-lo com outro desenvolvedor para que possamos trabalhar no projeto.
Que estratégias devem ser usadas para se sair bem com os Unity Assets?
Respostas:
O Unity possui um recurso interno para oferecer suporte adequado ao controle de versão.
Basta ir em Arquivo-> Configurações do projeto-> Editor e ativar o controle de versão externa.
Eu recomendo usar o Git, é gratuito e o melhor.
Há um tempo atrás escrevi sobre controle de versão (usando Git) no meu blog
Longa história curta:
Habilite o controle de versão externo Arquivo-> Configurações do projeto-> Editor e crie o arquivo .gitignore para evitar coisas desnecessárias no repositório (isso não é realmente necessário, mas será inestimável durante o desenvolvimento).
Aqui está como o arquivo deve ficar:
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
uso I para projetos de unidade, mas com algumas omissões: [Bb]uild/
, *.booproj
, sysinfo.txt
. Tenho certeza de que o que eu uso é baseado nos novos modelos de repositório do GitHub para o Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) qualquer Objective-C (ao direcionar o iOS).
O Unity 3.0 está configurado para funcionar bem com o subversion. (Pelo menos melhor do que antes) Eu não sei se isso é apenas na versão pro ou não, vou ter que verificar.
Em geral, porém, o sistema de controle de versão mais recomendado é o Unity Asset Server.
Unity specific - trabalhe em cenas diferentes e em arquivos de código diferentes o tempo todo e mescle as alterações da outra pessoa manualmente. Se vocês dois precisam trabalhar na mesma cena, duplique-a e use a cópia como teste. Caso contrário, se você modificar a mesma cena, as alterações de uma pessoa substituirão a outra. Você ainda pode usar o controle de origem para seus arquivos de origem, apenas não os mova, no sistema de arquivos ou via Unity, depois que eles forem criados.
Conselho para iniciantes - adquira uma ferramenta decente de difusão / mesclagem (eu gosto do WinMerge ) e se acostume a usá-la para ver as mudanças que a outra pessoa fez e para mesclar manualmente as alterações nos arquivos em conflito. Configure um espaço central de documentação, por exemplo. um documento de escrita do Google ou um wiki e mantenha sua documentação - a documentação deve conter no mínimo uma lista de recursos básicos para que você saiba o que está buscando e, idealmente, uma lista de tarefas derivada da lista de recursos, juntamente com uma indicação clara de quem está trabalhando na tarefa. Conversem entre si para ter uma idéia aproximada de quem precisa trabalhar em qual tarefa e riscá-los da lista à medida que forem concluídos. Continue revisando e reavaliando a lista para ver se tudo ainda é válido e se você precisa refazer as prioridades.
Eu trabalho com uma equipe que se chama Defective Studios. Lutamos com o mesmo problema há anos e, recentemente, finalmente desisti e comecei a escrever uma extensão para me ajudar a mesclar objetos de jogo.
Basicamente, a abordagem é criar uma interface do tipo inspetor em uma janela que alinha cada objeto, componente e propriedade do jogo lado a lado para comparação e fornece botões para copiar valores (ou objetos inteiros) de um lado para outro. Se você conhece a SerializedProperty
turma, é isso que faz a maior parte do trabalho aqui. Basicamente, criamos uma GUI que sincroniza o estado de desdobramento entre o lado direito e esquerdo e cria espaço vertical onde quer que seja GameObject
ouComponent
existe apenas no lado direito ou esquerdo. Uma função de comparação verifica a igualdade em cada nível e transforma o fundo de cada linha em vermelho ou verde, dependendo do estado da igualdade. Qualquer linha cujos filhos contenham diferença também ficará vermelha, e também incluímos um botão bacana para pesquisar recursivamente na árvore e expandir todos os objetos que são diferentes ou que têm diferenças em seus filhos.
Além disso, há um conjunto de campos de máscara que permitem filtrar certos tipos de componentes da comparação. Atributos de GameObject como nome, camada e tag também são comparados. Usamos SerializedObject
e SerializedProperty
para percorrer as gameObject
propriedades do e desenhá-las exatamente como estão desenhadas no inspetor. Isso garante consistência e é muito mais fácil de codificar!
Um último detalhe bacana é que o processo de comparação (acionado quando os objetos são carregados e sempre que uma alteração é feita) é executado em uma rotina ad-hoc atualizada pela EditorWindow.Update
função, para que, caso você esteja comparando um objeto extremamente complicado, a janela não trava o editor. Essa era uma obrigação ao comparar objetos com centenas (ou milhares!) De crianças. No fim das contas, era como um "projeto lego", como meu amigo gosta de dizer, mas definitivamente uma ferramenta inestimável que instantaneamente se tornou parte do nosso fluxo de trabalho de colaboração.
A ferramenta Unity Merge está documentada no wiki do Unify, que inclui um roteiro e um endereço de email para feedback e relatórios de problemas. Se você está realmente lutando com uma mesclagem complicada, experimente e deixe-nos saber o que pensa! Além disso, não me preocupei em transformá-lo em uma DLL, portanto, fique à vontade para procurar na fonte. A implementação e SerializedProperty
manipulações ad-hoc da rotina , bem como alguns truques da GUI que acabei precisando são uma grande parte do seu kit de ferramentas de extensão de editor. Estou muito interessado nas alterações / melhorias que os usuários possam ter, então entre em contato!
Se você tiver os fundos para isso, o servidor Asset com a versão pro do Unity é bastante decente. Eu o usei em um projeto grande para várias pessoas no passado e ele fez o trabalho. Para o controle de versão de baunilha, ele fez o que esperávamos.
Eu tentei usar um repositório SVN com um projeto do Unity e foi um pouco complicado. No entanto, acabamos descartando a ideia antes de fazê-la funcionar. O Unity mantém muitos arquivos de backup que eu não queria dedicar tempo para descobrir o que aconteceria se eles não fossem sincronizados com o servidor. Eu acho que, com um pouco de sutileza, pode ser possível, mas não tive experiência com isso funcionando bem.
Eu fiz um pequeno projeto usando os recursos gratuitos do DropBox. Isso me deixou nervoso, mas nunca tivemos problemas. E não acho que acabamos precisando de qualquer controle real de versão para esse projeto, por isso não posso falar muito sobre como teria sido a reversão ou mesclagem de arquivos.
O Dropbox suporta versões por arquivo (e não por confirmação) e funciona bem com o Unity. É gratuito inicialmente (2 gigabytes) e muito barato depois (cerca de US $ 10 por 50gig). Você precisa do complemento PackRat para ter acesso ao histórico de versões.
Assim como no SVN, CVS, GIT etc., você precisará criar pastas de tags quando chegar a cada estágio principal do desenvolvimento (por exemplo, final de semana, final de etapa). Diferentemente do mencionado, será muito mais difícil reverter para esse estágio, se você não fizer isso, porque teria que reverter cada arquivo individualmente. Tenha isso em mente durante o desenvolvimento e você terá um tempo fácil sem pagar pelo Asset Server.