Sprite di disegno 2D Unity 5 a livello di codice


8

Come posso disegnare sprite in Unity 5 a livello di codice? Sto cercando qualcosa di simile a spriteBatch.Draw()XNA. I risultati che ottengo quando lo cerco sono obsoleti http://wiki.unity3d.com/index.php?title=SpriteManager (questo è stato scritto nel 2012), oppure sono fatti usando l'interfaccia di unità. Tutto quello che posso trovare è una Spriteclasse in UnityEngine.dll. È questo ciò di cui ho bisogno? Come funzionerebbe il disegno? Davvero non capisco.


Cosa intendi per disegno di sprite? Vuoi dire renderli sullo schermo o creare dinamicamente l'immagine rappresentata dallo sprite?
MichaelHouse

@ Byte56 che rende un'immagine 2D sullo schermo, proprio come ogni motore di gioco 2D che ho visto. Non so perché questo sia così frustrantemente difficile da trovare quando cerchi su Google. Ho bisogno di qualcosa come spriteBatch.Draw (SpriteSheetName, posizione, rettangolo, origine, scala, rotazione) in cui il rettangolo sta definendo la parte del foglio sprite che sto cercando di disegnare. Ora sto provando a farlo creando un Spritee poi un SpriteRendererma non riesco a capire come impostare un'immagine per lo sprite.
dimitris93

Gli Spriteoggetti @ Byte56 non sembrano nemmeno avere una proprietà per impostare l'immagine. la cosa più vicina che vedo è sprite.texture che è di sola lettura ... in realtà ogni proprietà di sprite è di sola lettura
dimitris93

Risposte:


16

Unity non ha questo tipo di rendering in "modalità diretta", non si chiamerà Drawin alcun ciclo di aggiornamento per Unity.

In Unity devi creare un oggetto di gioco, quindi collegare gli script a quell'oggetto di gioco. Questi script controlleranno il comportamento dell'oggetto, se e come viene visualizzato sullo schermo, se fa parte del sistema fisico ecc.

Per creare un nuovo sprite da disegnare sullo schermo dovrai creare un nuovo oggetto di gioco, quindi collegare lo script SpriteRenderer e impostarne lo sprite.

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

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

Questo presuppone una struttura di directory di

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

Per esempio:

inserisci qui la descrizione dell'immagine

Quindi avresti avuto uno script diverso per cambiare posizione, rotazione ecc., A seconda di come vuoi che si comporti.

Il modo più semplice per ottenere tutto ciò senza dover scrivere più codice? Crea prima l'oggetto di gioco nell'editor Unity. Una volta che l'oggetto di gioco è dotato dello sprite desiderato e degli script di comportamento e tutto il resto. Trascinalo e rilascialo in una directory di risorse. Questo crea un prefabbricato. I prefabbricati sono proprio come sembrano, prefabbricati. Sono oggetti completi che puoi quindi fare riferimento e creare al volo.

Creeresti quelli come:

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

Ciò genererà un clone del prefabbricato creato in precedenza. Quindi, se per esempio, avessi dato al tuo prefabbricato il comportamento di muoversi verso il giocatore e attaccare, ogni volta che genererai un nuovo prefabbricato di quel tipo, inizieranno a muoversi verso il giocatore e ad attaccare. Gli script che dovevi scrivere una sola volta controllano tutti quegli oggetti di gioco.

Penso che la differenza principale che stai vedendo qui è l'uso pesante di componenti. Che probabilmente non hai visto in altri motori di gioco come XNA. Unity è davvero un motore potente, ma la tua frustrazione proviene dal tentativo di usarlo come altri motori, quando non è come altri motori. Controlla il mio profilo per un po 'di formazione, ho aggiunto un link per una prova gratuita in modo da non dover pagare.


Wow. la mia conoscenza dell'unità è appena aumentata di una tonnellata :) questo ha molto senso in realtà. non avevo mai sentito parlare di prefabbricati prima d'ora. grazie mille per l'aiuto :)
dimitris93

anche io ho appena iniziato a guardare i tuoi tutorial: D
dimitris93

@Shiro Potresti prima cercare quelli di base, per consolidare la tua comprensione di oggetti Unity, componenti, prefabbricati, ecc. Inoltre, non preoccuparti del capitolo GUI del mio corso :( non è aggiornato.
MichaelHouse

1
Sembra una nuova domanda per il sito, non i commenti.
MichaelHouse

1
Questa risposta dovrebbe essere stampata sulla prima pagina dei documenti Unity.
easwee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.