我一直在尝试在 Unity 中使用 PNG 图像作为纹理,当我只使用一两个时,将它们拖放到检查器中很容易。在我目前的项目中,我有超过 300 张图像,我正在尝试将它们加载到数组中,然后我想在每次更新时更改纹理,使其看起来像视频。
这是我到目前为止所拥有的:
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];
}
}
}
我一直在尝试将图像加载到对象数组中,将它们转换为纹理,然后输出到纹理数组。有谁知道我哪里出了问题,它似乎没有任何错误,但纹理没有改变?
任何建议都非常感谢
谢谢
你正在做的事情有点慢和不合适。
我建议使用动画器和动画。将所有纹理放入图集纹理中,这样您将限制绘制调用量。将该纹理设置为子精灵,并使用精灵编辑器剪切子精灵。
添加动画器并创建动画。选择整个子精灵并将它们拖到动画中。做。
现在,您可以通过动画器组件轻松控制速度和播放。
我最终设法解决了这个问题,问题似乎是资产的加载无法正常工作,这就是框架没有改变的原因。我还将包含图像的文件夹的名称从"框架"更改为"资源"。以下是其他需要它的人的完整代码:
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];
}
}
}
感谢您对动画的建议,我仍然会研究它,因为图像的性能不是很好。