Jump to content
Unity Insider Forum
Sign in to follow this  
knuppel

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?

 

 

Share this post


Link to post
Share on other sites

Was möchtest du denn genau machen? 8 x 8 Array im Zusammenhang mit Sprite? Versuchst du ein ein Sprite-Array zu erstellen? Erklär mal genauer was du vor hast. :) 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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);
    }
}

 

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb Mr 3d:

 

Danke für deinen Quellcode. Wie krieg ich das Sprite jetzt in die GUI?

Ich hab ein Canvas mit einem Sprite erstellt und dann das Script angefügt, das hat aber nicht geklappt.

Share this post


Link to post
Share on other sites

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;
    }
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×