Trabalho em equipe na unidade

30

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?

Matias Valdenegro
fonte
Eu acho que este artigo vai lhe dar algumas dicas: va.lent.in/blog/2011/12/13/…
Den
2
O DropBox suporta controle de versão, o recurso é chamado "Pack-Rat", mas não é gratuito. Para aconselhamento para desenvolvedores indie iniciantes, várias perguntas foram feitas antes. Eu sugiro que você ande um pouco. Finalmente bem-vindo ao GameDev SE!
Quazi Irfan
Sem o servidor ativo pode haver alguns problemas quando indo e voltando prefabs e cenas
Sidar

Respostas:

17

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.

Kevin Laity
fonte
4
Este é um recurso somente para profissionais? Não vejo esse item de menu na versão gratuita / indie do Windows do Unity 2.6.
James
A partir de 30/01/2011, é somente para uso profissional. Veja o segundo parágrafo de: unity3d.com/support/documentation/Manual/…
ojrac
11
A última versão do desenvolvedor do Unity (3.5 RC1) fez uma alteração para oferecer suporte ao controle de versão na versão gratuita. do changelog ( unity3d.com/unity/preview/notes ): Licença: O controle de versão externa genérico (arquivos .meta) está agora disponível na versão gratuita.
Programador de jogos crônicos
2
apenas para futuros visitantes, anote a data nesta resposta; já está desatualizado. Agora não há necessidade de ativar nenhuma configuração; apenas faça a versão das pastas "Assets" (verifique se o controle de versão está pegando arquivos .meta ocultos) e "Project Settings" e ignore todo o resto.
jhocking
10

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
cchomiak
fonte
Isso é quase o mesmo que o .gitingoreuso 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).
precisa
Erro interno do servidor no seu blog.
Santosh Kumar
4

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.

Jesse Dorsey
fonte
4

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.

Kylotan
fonte
Obrigado! Você me deu grandes conselhos sobre os meus dois problemas.
Nosferat 17/12
4

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 SerializedPropertyturma, é 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 GameObjectouComponentexiste 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 SerializedObjecte SerializedPropertypara percorrer as gameObjectpropriedades do e desenhá-las exatamente como estão desenhadas no inspetor. Isso garante consistência e é muito mais fácil de codificar!

insira a descrição da imagem aqui

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.Updatefunçã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 SerializedPropertymanipulaçõ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!

bolinho
fonte
1
Parece uma ferramenta útil, obrigado por melhorar sua resposta anterior "somente link".
MichaelHouse
1

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.

caosTécnico
fonte
1

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.

Engenheiro
fonte
Isso é muuuito doloroso embora. O Unity precisa reconstruir a cena toda vez que você a abre em um computador diferente. Isso altera a pasta da biblioteca em muitos lugares para cada confirmação. Ignorar a pasta da biblioteca seria bom, mas você não teria arquivos de cena controlados por versão. Minha equipe desistiu e comprou várias licenças profissionais e usou o servidor de ativos.
Brandon
@brandon Acho que depende do tamanho do projeto.
Engenheiro de
1
Definitivamente, se é um casal de desenvolvedores com orçamento limitado, eu sugeriria sua abordagem, pois ela é realmente a única
brandon
Mas você já trabalhou em um projeto com menos de 2 GB? e os modelos e texturas que você incluirá. Dê uma olhada no bitbucket.com e comece a aprender git!
XandruCea
Absolutamente. Os projetos Android / iOS definitivamente ficam bem abaixo desse tamanho na minha experiência (durante o ano em que escrevi esta resposta). Além disso, você pode ganhar mais espaço no Dropbox convidando amigos.
Engenheiro