Como faço para desenhar manualmente uma parte de uma folha de sprite?

9

Estou trabalhando no Unity e descobrindo que o animador não está trabalhando para o que estou tentando fazer, no meu jogo 2D. Desejo criar uma animação específica, usando folhas de sprite, e poder reutilizar a mesma animação com outros sprites com o mesmo tamanho e dimensões pelas células. Depois de algumas pesquisas, acho que é impossível.

Em vez disso, estou tentando criar meu próprio script de animação, mas não entendo como dizer ao Unity para desenhar apenas uma seção do sprite. Algo como no XNA, onde você pode renderizar apenas um retângulo específico de um sprite usando coordenadas de início e fim.

Como faço para desenhar manualmente uma parte de uma folha de sprite?

Shaun
fonte
3
Isso é possível no Unity sem duplicar os dados da animação, com um pequeno truque. Efetivamente, você reproduz a animação A usando a planilha A, e no LateUpdate você troca o Sprite de cada SpriteRenderer para o análogo da planilha B. Havia um vídeo do Unity sobre essa técnica; Vou postá-lo como resposta se puder encontrá-lo mais tarde e elaborar os detalhes. Isso permitirá que você use todo o poder do sistema de animação nativo do Unity sem precisar criar o seu próprio do zero.
DMGregory
Você deve tentar o Spine ou outro software de animação esquelético. Ele possui um recurso de skins que permite manter as mesmas animações de bone, mas troque e troque de skins conforme necessário. Eu pessoalmente uso o Spine porque é simples, existem tutoriais e possui um tempo de execução de unidade que torna tudo super simples. A desvantagem é que custa dinheiro, mas a versão básica oferece tudo o que você precisa para fazer animações. A versão pro apenas torna mais fácil e rápido.
Savlon
usar máscaras se você trabalha em UI
virtouso

Respostas:

1

Eu acho que pode haver uma abordagem mais simples na qual você pode fazer isso e ainda usar o Unity Mecanim para a animação.

Passos:-

1) Você pode atribuir programaticamente sprites 2D de textura a partir da imagem e, como é uma grade, não será muito difícil fazê-lo. Na resposta a seguir, o usuário criou seu próprio slicer de sprite e salvou no diretório (opcional, apenas salve-o em uma variável). Você não precisa de todo o código, basta verificar a função GetSprites () e terá a ideia :)

http://answers.unity3d.com/questions/576799/coding-my-own-auto-slicer-getting-islands-of-pixel.html

2) Quando você conseguir fazer isso, mantenha uma Matriz de sprites, obtida na etapa 1.

3) Agora você precisa criar um arquivo de animação desses sprites que possa ser conectado ao mecanim. Para isso, você precisa da função Set Curve da Unity (verifique o link fornecido abaixo). Depois que você tiver o clipe, é possível salvá-lo para uso futuro ou apenas tê-lo em uma variável apenas para a instância atual do jogo.

http://docs.unity3d.com/ScriptReference/AnimationClip.SetCurve.html

Espero que isso resolva sua dúvida :)

Hash Buoy
fonte