Chargement d'un PNG image comme texture à l'exécution dans Unity3d

Je suis en utilisant une série d'images PNG sprites pour créer des animations sur un avion pour une réalité augmentée de l'application dans l'Unité. Les images PNG sont chargés comme des textures, et les textures sont appliquées à un plan pour créer une séquence d'animation qui retrace avec une réalité augmentée cible.

Voici le script qui est attaché à l'avion et les contrôles de la séquence d'animation.

Fichier PNGSequence.js

#pragma strict
var tecture : Texture[];

var changeInterval : float = 0.06;
var isRunning = false;
var isLooping = false;

function Start () {
    var isRunning = true;
}

function Update () {
    if( isRunning == true) {
        Animation ();
    }
}

function Animation () {
    var index : int = Time.time/changeInterval;
    index = index % tecture.Length;
    renderer.material.mainTexture = tecture[index];
    if ( index == tecture.Length-1){
        if( isLooping == false){
            isRunning = false;
        }
           renderer.material.mainTexture = tecture[0];
    }
}

Textures sont affectés par glisser-déposer de fichiers PNG dans l'éditeur et tout fonctionne bien si je limite le PNG comte. Comme ma texture compte augmente, cependant, j'obtiens des erreurs de mémoire insuffisante sur Android.

Je voudrais charger les fichiers PNG en tant que textures au moment de l'exécution de limiter le nombre de mémoire, mais je vais avoir du mal à obtenir le code de travail.

J'ai essayé LoadImage.

var imageTextAsset : TextAsset = Resources.Load("test.png");
var tex = new Texture2D (4, 4);
tex.LoadImage(imageTextAsset.bytes);
renderer.material.mainTexture = tex;

J'ai aussi essayé de chargement de l'image directement à la texture (puisque cela semble fonctionner avec l'éditeur).

renderer.material.mainTexture = Resources.LoadAssetAtPath"Assets/Images/test.png",Texture);

Pas de chance avec les deux. Toutes les suggestions sur la façon d'accomplir ceci?

ÉDITÉ

J'ai été en mesure d'obtenir ce travail grâce au lien fourni par Xerosigma. J'ai eu un problème avec les chemins (et je soupçonne avec la Texture exigence de la charge).

À l'extérieur de chargement de la PNG textures, j'ai aussi découvert que l'Unité ne fait pas de la gestion de la mémoire sur les textures. Pour récupérer de la mémoire, les textures doivent être déchargés manuellement après l'utilisation.

Les Textures sont tous placés dans un "Ressources" du dossier. Le dossier de ressources peut être placé n'importe où dans l'Actif de la hiérarchie - j'ai créé plusieurs dossiers individuels de chacun de mes séquences PNG pour les organiser, puis ajouté un dossier de Ressources à l'intérieur de chacun de tenir le réel Png.

Les Textures sont affectés par l'entremise de l'éditeur en spécifiant une texture count (ie. 100), un nom de base ("texture_", par exemple), et zéro de remplissage.

Fichier PNGSequenceRunTime.js

#pragma strict

var imageCount : int = 0;
var imageNameBase : String = "";
var imageNameZeroPadding : int = 0;

var changeInterval : float = 0.06;
var isRunning = false;
var isLooping = false;

private var texture : Texture = null;

function PlayRocket () {
    isRunning = true;
}

function Start () {
    var isRunning = false;
    var fileName : String = imageNameBase + ZeroPad(0,imageNameZeroPadding);
    texture = Resources.Load(fileName);
}

function Update () {
    if( isRunning == true) {
        PNGAnimation ();
    }
}

function PNGAnimation () {
    var index : int = Time.time/changeInterval;
    index = index % imageCount;
    var fileName : String = imageNameBase + ZeroPad(index,imageNameZeroPadding);
    Resources.UnloadAsset(texture);
    texture = Resources.Load(fileName);
    renderer.material.mainTexture = texture;


    if ( index == imageCount-1){
        Debug.Log("End of Animation");
        Debug.LogWarning("End of Animation");
        if( isLooping == false){
            isRunning = false;
        }
        fileName = imageNameBase + ZeroPad(0,imageNameZeroPadding);
        Resources.UnloadAsset(texture);
        texture = Resources.Load(fileName);
        renderer.material.mainTexture = texture;
    }
}

function ZeroPad(number : int, size : int) {
    var numberString : String = number.ToString();
    while (numberString.Length < size) numberString = "0" + numberString;
    return numberString;
}

OriginalL'auteur Jason George | 2013-04-04