Kann ich ein animiertes GIF als Textur verwenden?

6

Ich möchte ein Flugzeug haben, das ein animiertes Gif als Textur zeigt, also wird es im Wesentlichen ein Film sein. Kann ich ein animiertes Gif als Textur anwenden? Wenn ja, gilt es wie eine normale Textur? Hinweis: Ich kenne mich mit Filmtexturen aus , möchte sie aber nicht verwenden

Liam McInroy
quelle
4
Das GIF-Dateiformat war sehr lange Gegenstand von Patenten und die Grafikindustrie hat keine wirklich gute Unterstützung für dieses Format, da es für diesen Zweck kein wirklich gutes Format ist (Animation) und es andere Möglichkeiten gibt, fast dasselbe zu tun Einige einfache Sprites, die in einem einzigen Bild in Serie geschaltet und nacheinander verwendet werden, wenn Sie Ihren Charakter animieren möchten.
user827992
@ user827992 Also würde ich so etwas wie hier beschrieben machen , wo ich ständig die Textur ändere ?
Liam McInroy

Antworten:

7

Kurze Antwort ist nein. Sie müssen das GIF in eine atlasierte Textur konvertieren (ein einzelnes 2D-Bild, das alle GIF-Frames enthält) und dann die UV-Koordinaten auf einem strukturierten Quad zyklisch ändern, um zu ändern, welcher Frame derzeit sichtbar ist. Dies ist nicht besonders schwierig, und es gibt bereits Sprite-Animationspakete für Unity, die das meiste für Sie erledigen können (Sie müssen den Atlas wahrscheinlich selbst erstellen oder das GIF zumindest für jeden Frame in separate PNG-Bilder aufteilen einen vorhandenen Atlas-Ersteller verwenden).

Sean Middleditch
quelle
Danke, und mit welchem ​​Objekt würde ich das machen?
Liam McInroy
Sie können die UVs einer Netzkomponente manuell animieren. Es gibt Pakete im Asset Store, die all dies für Sie erledigen, aber ich habe keine Erfahrung mit einem dieser Pakete, sodass ich keine Empfehlung für die Verwendung abgeben kann.
Sean Middleditch
Ich habe keine persönlichen Erfahrungen damit, aber ich höre, dass ShoeBox ziemlich schlau ist. Es unterstützt die Konvertierung animierter GIFs in Unity-Texturatlanten.
Postgoodism
0

Ich habe dieses Skript gemacht. Hänge es einfach an das Spielobjekt an, zum Beispiel eine Ebene, und fülle dann das Frames-Array mit allen Frames des Gifs im Inspektor.

public class AnimGif : MonoBehaviour {

    [SerializeField] private Texture2D[] frames;
    [SerializeField] private  float fps = 10.0f;

    private Material mat;

    void Start () {
        mat = GetComponent<Renderer> ().material;
    }

    void Update () {
        int index = (int)(Time.time * fps);
        index = index % frames.Length;
        mat.mainTexture = frames[index]; // usar en planeObjects
        //GetComponent<RawImage> ().texture = frames [index];
    }
}
Engel
quelle