2016-02-28 6 views
0

Я пытаюсь использовать PNG-изображения в качестве текстур в Unity, когда я использую только один или два, их легко перетащить и отбросить в инспекторе. В моем текущем проекте у меня есть более 300 изображений, которые я пытаюсь загрузить в массив, поэтому я хочу менять текстуру каждый раз вокруг обновления, чтобы оно выглядело как видео.Загрузить PNG-изображения в массив и использовать в качестве текстур

Вот то, что я до сих пор:

using UnityEngine; 
using System.Collections; 

public class ChangeImage : MonoBehaviour { 

public Texture[] frames; 
public int CurrentFrame; 
public object[] images; 

    void OnMouseDown() { 
     if (GlobalVar.PlayClip == false){ 
      GlobalVar.PlayClip = true;   
     } else { 
      GlobalVar.PlayClip = false;   
     } 
    } 

    public void Start() { 

     images = Resources.LoadAll("Frames"); 

     for (int i = 0; i < images.Length; i++){ 
      Texture2D texImage = (Texture2D) images[i]; 
      frames[i] = texImage; 
     } 
    } 

    // Update is called once per frame 
    void Update() { 
     if(GlobalVar.PlayClip == true){ 
      CurrentFrame++; 
      CurrentFrame %= frames.Length; 
      GetComponent<Renderer>().material.mainTexture = frames[CurrentFrame]; 
     } 
    } 


} 

, которые я пытался загрузить изображения в массив объектов преобразовать их в текстурах затем вывод в массив текстур. Кто-нибудь знает, где я ошибаюсь, это, похоже, не дает никаких ошибок, но текстура не меняется?

Любой совет высоко ценится

Благодаря

+0

Обратите внимание, что анимация * и действительно видео * прекрасно встроена в Unity – Fattie

+0

чисто FWIW, обратите внимание также. это немыслимо, вам нужно будет перемещаться по анимации каждый * Рамка Unity * (т. е. как вы бы теоретически делали, используя «Update» там) – Fattie

ответ

0

В конце концов мне удалось исправить проблему, проблема заключалась в том, что загрузка активов не работала правильно, и именно поэтому кадр не менялся. Я также изменил имя папки, содержащей изображения из «Рамки», в «Ресурсы». Вот завершенный код для всех, кто нуждается в этом:

using UnityEngine; 
using System.Collections; 

public class ChangeImage : MonoBehaviour { 

public Texture[] frames; 
public int CurrentFrame; 

    void OnMouseDown() { 
     if (GlobalVar.PlayClip == false){ 
      GlobalVar.PlayClip = true;   
     } else { 
      GlobalVar.PlayClip = false;   
     } 
    } 

    public void Start() { 
     frames = Resources.LoadAll<Texture>(""); 
    } 

    // Update is called once per frame 
    void Update() { 
     if(GlobalVar.PlayClip == true){ 
       CurrentFrame %= frames.Length; 
       CurrentFrame++; 
       Debug.Log ("Current Frame is " + CurrentFrame); 
       GetComponent<Renderer>().material.mainTexture = frames[CurrentFrame];    
      } 

     } 

} 

Спасибо за совет по анимации я все равно буду смотреть в него, как производительность изображений не велика.

1

Что вы делаете, это своего рода медленный и неуместны.

Что я рекомендую использовать Animator и анимацию. У вас есть все текстуры в текстуре атласа, таким образом, вы ограничите количество вызывного вызова. Сделайте эту текстуру спрайтом и используйте редактор спрайтов, чтобы разрезать вспомогательный спрайт.

Добавить аниматор и создать анимацию. Выберите все вспомогательные спрайты и перетащите их в анимацию. Готово.

Теперь вы можете легко управлять скоростью и игрой через компонент аниматора.

+0

Спасибо, могу ли я спросить, поддерживают ли анимации прозрачность, все мои изображения PNG удалены фоном? – randomer

+0

Конечно, да. http://michaelcummings.net/mathoms/creating-2d-animated-sprites-using-unity-4.3 – Everts