Jump to content
Unity Insider Forum

Aus einem 2D-Array ein Sprite/Bitmap-Grafik erstellen


Recommended Posts

Hallo,

ich würde gerne aus einem z.B. 8x8 Array ein Sprite erstellen. Das Array würde zum Beispiel nur nullen oder einsen enthalten, was bedeutet, dass an bei 1 an der jeweiligen Position ein Pixel gesetzt wird. Bei 0 würde kein Pixel gesetzt, bzw. es sollte hier transparent sein.

Wie wäre meine Vorangehensweise?

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube er will ein Sprite mit 8x8 Pixeln erstellen, wobei die Farben der Pixel abhängig von den entsprechenden Werten im Array sind.

 

Du kannst einfach eine Texture2D ( https://docs.unity3d.com/ScriptReference/Texture2D.html ) erstellen und dann die Farben für jeden Pixel setzen ( https://docs.unity3d.com/ScriptReference/Texture2D.SetPixels.html ).

Danach nicht vergessen "Apply();" ( https://docs.unity3d.com/ScriptReference/Texture2D.Apply.html ) aufzurufen, um die Änderungen 'anzuwenden'.

Die Texture2D kannst du in eine RawImage Komponente laden, oder du generierst aus der Textur ein Sprite ( https://docs.unity3d.com/ScriptReference/Sprite.Create.html ) und übergibst es an deinen SpriteRenderer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PicArray : MonoBehaviour {

    public Texture2D texture;
    public Sprite mySprite;

    private int[,] arr = new int[8, 8];

    void Start()
    {
        texture = new Texture2D(8, 8);

        // Array zufällig füllen
        for (int y = 0; y < texture.height; y++)
        {
            for (int x = 0; x < texture.width; x++)
            {
                arr[x, y] = Random.Range(0, 2);
            }
        }

        // Textur erzeugen
        for (int y = 0; y < texture.height; y++)
        {
            for (int x = 0; x < texture.width; x++)
            {
                Color color = (arr[x, y] == 0 ? Color.clear : Color.black);
                texture.SetPixel(x, y, color);
            }
        }
        texture.Apply();

        // Thanks to "Mr 3d" ;)
        mySprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100.0f);
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habs fix eingebaut, das Image auf den entsprechenden Slot ziehen (ich gehe mal davon aus du meintest ein UI-Image):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PicArray : MonoBehaviour {

    public Image image;

    private Texture2D texture;
    private Sprite mySprite;

    private int[,] arr = new int[8, 8];

    void Start()
    {
        texture = new Texture2D(8, 8);

        // Zufallstextur setzen
        for (int y = 0; y < texture.height; y++)
        {
            for (int x = 0; x < texture.width; x++)
            {
                arr[x, y] = Random.Range(0, 2);
            }
        }

        // Textur erzeugen
        for (int y = 0; y < texture.height; y++)
        {
            for (int x = 0; x < texture.width; x++)
            {
                Color color = (arr[x, y] == 0 ? Color.clear : Color.black);
                texture.SetPixel(x, y, color);
            }
        }
        texture.Apply();

        mySprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100.0f);
        image.sprite = mySprite;
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...