Sprites de dibujo 2D de Unity 5 mediante programación


8

¿Cómo puedo dibujar sprites en Unity 5 mediante programación? Estoy buscando algo similar a spriteBatch.Draw()en XNA. Los resultados que obtengo cuando lo busco están desactualizados http://wiki.unity3d.com/index.php?title=SpriteManager (esto fue escrito en 2012), o se hacen usando la interfaz de la unidad. Todo lo que puedo encontrar es una Spriteclase en UnityEngine.dll. ¿Es esto lo que necesito? ¿Cómo funcionaría el dibujo? Realmente no lo entiendo.


¿Qué quieres decir con dibujar sprites? ¿Te refieres a mostrarlos en la pantalla o crear dinámicamente la imagen representada por el sprite?
MichaelHouse

@ Byte56 renderizando una imagen 2D en la pantalla, al igual que todos los motores de juegos 2D que he visto. No sé por qué esto parece ser tan difícil de encontrar cuando buscas en Google. Necesito algo como spriteBatch.Draw (SpriteSheetName, posición, rectángulo, origen, escala, rotación) donde el rectángulo está definiendo la parte de la hoja de sprites que estoy tratando de dibujar. Ahora estoy tratando de hacer esto haciendo un Spritey luego un SpriteRendererpero no puedo entender cómo configurar una imagen para el sprite.
dimitris93

Los Spriteobjetos @ Byte56 ni siquiera parecen tener una propiedad para configurar la imagen. lo más parecido que veo es sprite.texture, que es de solo lectura ... en realidad, todas las propiedades de sprite son de solo lectura
dimitris93

Respuestas:


16

Unity no tiene este tipo de renderizado de "modo directo", no invocará Drawningún ciclo de actualización para Unity.

En Unity necesitas crear un objeto de juego, luego adjuntar scripts a ese objeto de juego. Esas secuencias de comandos controlarán cómo se comporta el objeto, si y cómo se muestra en la pantalla, si es parte del sistema de física, etc.

Para crear un nuevo sprite para dibujar en la pantalla, deberás crear un nuevo objeto de juego, luego adjuntarle el script SpriteRenderer y configurar su sprite.

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

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

Esto supone una estructura de directorio de

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

Por ejemplo:

ingrese la descripción de la imagen aquí

Luego, tenía un script diferente para cambiar la posición, la rotación, etc., dependiendo de cómo desea que se comporte.

¿La forma más fácil de lograr todo esto sin tener que escribir tanto código? Cree primero el objeto del juego en el editor de Unity. Una vez que el objeto del juego está equipado con el sprite que deseas y los scripts de comportamiento y todo eso. Arrástrelo y suéltelo en un directorio de recursos. Esto crea un prefabricado. Los prefabricados son exactamente lo que parecen, prefabricaciones. Son objetos completos a los que luego puedes hacer referencia y crear sobre la marcha.

Crearías aquellos como:

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

Esto generará un clon del prefabricado que creaste antes. Entonces, si, por ejemplo, le has dado a tu prefabricado el comportamiento de moverse hacia el jugador y atacar, cada vez que generas un nuevo prefabricado de ese tipo, comenzarán a moverse hacia el jugador y atacar. Los guiones que solo tenía que escribir una vez controlan todos esos objetos del juego.

Creo que la principal diferencia que está viendo aquí es el uso intensivo de componentes. Lo que probablemente no has visto en otros motores de juegos como XNA. La unidad realmente es un motor potente, pero su frustración proviene de intentar usarlo como otros motores, cuando no es como otros motores. Consulte mi perfil para obtener capacitación, agregué un enlace para una prueba gratuita para que no tenga que pagar.


Guau. mi conocimiento de la unidad solo aumentó en una tonelada :) esto tiene mucho sentido en realidad. Nunca he oído hablar de prefabricados antes. muchas gracias por tu ayuda :)
dimitris93

También acabo de empezar a ver sus tutoriales: D
dimitris93

@Shiro Es posible que desee explorar los básicos primero, para solidificar su comprensión de los objetos, componentes, prefabricados, etc. de Unity. Además, no le importe el capítulo de GUI de mi curso :( está desactualizado.
MichaelHouse

1
Suena como una nueva pregunta para el sitio, no los comentarios.
MichaelHouse

1
Esta respuesta debe imprimirse en la primera página de los documentos de Unity.
easwee
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.