写一个unity脚本 导入本地图片并保存在游戏中,导入的图片会显示在列表中,点击已导入的图片就能让一个空图像将其显示出来
时间: 2023-12-03 09:47:31 浏览: 94
保存图片到Access,读取并显示出来。
5星 · 资源好评率100%
以下是一个简单的Unity脚本,可以导入本地图片并在游戏中显示:
```csharp
using UnityEngine;
using UnityEngine.UI;
using System.IO;
public class ImageManager : MonoBehaviour
{
public GameObject imageList; // 存放图片列表的面板
public GameObject imagePrefab; // 图片列表中的每个图片预制体
public GameObject displayImage; // 显示图片的面板
private Texture2D selectedTexture; // 当前选择的纹理
// 点击“导入”按钮后执行的方法
public void OnImportButtonClicked()
{
// 打开文件对话框,选择要导入的图片
string path = EditorUtility.OpenFilePanel("Select Image", "", "png,jpg,jpeg");
if (!string.IsNullOrEmpty(path))
{
// 读取图片数据
byte[] imageData = File.ReadAllBytes(path);
// 创建纹理
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(imageData);
// 创建图片列表中的图片对象
GameObject imageObject = Instantiate(imagePrefab, imageList.transform);
imageObject.GetComponent<Image>().sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
// 添加点击事件,使得点击已导入的图片能够显示在显示面板中
Button button = imageObject.GetComponent<Button>();
button.onClick.AddListener(() =>
{
selectedTexture = texture;
displayImage.GetComponent<Image>().sprite = Sprite.Create(selectedTexture, new Rect(0, 0, selectedTexture.width, selectedTexture.height), new Vector2(0.5f, 0.5f));
});
}
}
// 点击“保存”按钮后执行的方法
public void OnSaveButtonClicked()
{
if (selectedTexture != null)
{
// 将纹理保存为png文件
byte[] pngData = selectedTexture.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/SavedImages/image.png", pngData);
}
}
}
```
在场景中创建一个空对象,将上述脚本挂载到该对象上,然后将“imageList”、“imagePrefab”、“displayImage”三个游戏对象分别指定到对应的UI面板上。接着在UI面板中添加两个按钮,分别命名为“Import”和“Save”,并将它们的点击事件分别绑定到“OnImportButtonClicked”和“OnSaveButtonClicked”方法上。
当用户点击“Import”按钮时,会弹出一个文件对话框,让用户选择要导入的图片。如果用户选择了一张图片,脚本会读取这张图片的数据并创建一个纹理。然后将这个纹理用于创建一个新的列表项,并将其添加到图片列表中。同时还会为这个列表项的按钮添加一个点击事件,使得点击这个按钮时能够将该纹理显示在显示面板中。
当用户点击“Save”按钮时,如果当前有纹理被选中,脚本会将该纹理保存为png文件,保存到项目的“Assets/SavedImages/”目录下。
阅读全文