Sprites de desenho 2D do Unity 5 programaticamente

8

Como posso desenhar sprites no Unity 5 programaticamente? Eu estou procurando algo semelhante ao spriteBatch.Draw()XNA. Os resultados obtidos quando pesquiso sobre ele estão desatualizados em http://wiki.unity3d.com/index.php?title=SpriteManager (isso foi escrito em 2012) ou são feitos usando a interface da unidade. Tudo o que posso encontrar é uma Spriteclasse no UnityEngine.dll. É disso que eu preciso? Como o desenho funcionaria? Eu realmente não entendo.

dimitris93
fonte
O que você quer dizer com desenhar sprites? Você quer dizer renderizá-los na tela ou criar dinamicamente a imagem representada pelo sprite?
Michaelhouse
@ Byte56 renderizando uma imagem 2D na tela, assim como todo mecanismo de jogo 2D que eu já vi. Não sei por que isso parece tão frustrantemente difícil de encontrar quando você pesquisa no google. Eu preciso de algo como spriteBatch.Draw (SpriteSheetName, position, Rectangle, origem, escala, rotação) onde o retângulo está definindo a parte da folha de sprite que estou tentando desenhar. Agora estou tentando fazer isso fazendo um Spritee depois um, SpriteRenderermas não consigo descobrir como definir uma imagem para o sprite.
dimitris93
Objetos @ Byte56 Spritenem parecem ter uma propriedade para definir a imagem. a coisa mais próxima que eu vejo é sprite.texture que só é lido ... na verdade cada propriedade do sprite é somente leitura
dimitris93

Respostas:

16

O Unity não possui esse tipo de renderização de "modo direto"; você não chamará Drawnenhum loop de atualização para o Unity.

No Unity, você precisa criar um objeto de jogo e anexar scripts a esse objeto. Esses scripts controlarão como o objeto se comporta, se e como é exibido na tela, se faz parte do sistema de física etc.

Para criar um novo sprite para desenhar na tela, você precisará criar um novo objeto de jogo, anexar o script SpriteRenderer e definir seu sprite.

GameObject go = new GameObject();
SpriteRenderer renderer = go.AddComponent<SpriteRenderer>();

renderer.sprite = Resources.Load("Sprites/Player", typeof(Sprite)) as Sprite;

Isso pressupõe uma estrutura de diretório

-Assets
--Resources
---Sprites
----<Your 2D assets, set with their texture type to Sprite (2D and UI)>

Por exemplo:

insira a descrição da imagem aqui

Então você tinha um script diferente para alterar a posição, rotação etc., dependendo de como deseja que ele se comporte.

A maneira mais fácil de fazer tudo isso sem precisar escrever tanto código? Crie o objeto do jogo no editor do Unity primeiro. Uma vez que o objeto do jogo esteja equipado com o sprite desejado, os scripts de comportamento e tudo mais. Arraste e solte-o em um diretório de recursos. Isso cria uma pré-fabricada. Pré-fabricados são exatamente o que parecem, pré-fabricados. Eles são objetos completos que você pode fazer referência e criar em tempo real.

Você criaria como:

public void CreateObject(string prefabName) {
   GameObject newObject = 
      GameObject.Instantiate(Resources.Load(prefabName)) as GameObject;
}

Isso gerará um clone da pré-fabricada que você criou antes. Portanto, se, por exemplo, você der ao seu pré-fabricado o comportamento de avançar em direção ao jogador e atacar, toda vez que gerar um novo pré-fabricado desse tipo, eles começarão a se mover em direção ao jogador e ao ataque. Os scripts que você só precisava escrever uma vez controlam todos esses objetos do jogo.

Eu acho que a principal diferença que você está vendo aqui é o uso pesado de componentes. O que você provavelmente não viu em outros mecanismos de jogos como o XNA. A unidade é realmente um mecanismo poderoso, mas sua frustração vem de tentar usá-lo como outros mecanismos, quando não é como outros motores. Confira meu perfil para obter treinamento. Adicionei um link para uma avaliação gratuita para que você não precise pagar.

MichaelHouse
fonte
Uau. meu conhecimento da unidade aumentou em uma tonelada :) isso faz muito sentido, na verdade. Eu nunca ouvi falar de casas pré-fabricadas antes. muito obrigado pela vossa ajuda :)
dimitris93
Também comecei a assistir seus tutoriais: D
dimitris93 4/15
@Shiro Você pode procurar primeiro os básicos, para solidificar sua compreensão dos objetos, componentes, prefabs etc. do Unity. Além disso, não se importe com o capítulo da GUI do meu curso :( está desatualizado.
MichaelHouse
11
Parece uma nova pergunta para o site, não os comentários.
Michaelhouse
11
Esta resposta deve ser impressa na primeira página dos documentos do Unity.
22815 easvee