这个问题的解决方案如下:
public class PhotoAlbum : MonoBehaviour
{
// 公共组件变量
public GameObject canvas;
public Image photoPreview1, photoPreview2;
// 图片数组
public Photograph[] savedPictures;
// 指针位置
private int i = 0;
private void Update()
{
// 检测 I 键是否被按下
if (Input.GetKeyDown(KeyCode.I))
{
// 指针位置超过图片数量,设置其为 0
i = Mathf.Clamp(i, 0, savedPictures.Length - 1);
// 检测是否有可用图片
if (savedPictures.Length > 0)
{
// 显示第一张图片
photoPreview1.sprite = savedPictures[i].sprite;
// 移动指针到下一张图片,超出数量后回到头部
i = (i + 1) % savedPictures.Length;
// 显示第二张图片(如果有多张)
if (savedPictures.Length > 1)
{
// 显示第一张图片
if (i == 0)
{
photoPreview2.sprite = savedPictures[savedPictures.Length - 1].sprite;
}
else
{
photoPreview2.sprite = savedPictures[i - 1].sprite;
}
}
}
}
}
// 将新照片存入照片册
public void SaveNewPhoto(Photograph photoToAdd)
{
// 检测剩余可用位置是否满足
if (savedPictures.Length > 0)
{
// 将新照片添加到最末尾的位置
savedPictures = ResizeArray(savedPictures, 1);
// 存储新照片
savedPictures[savedPictures.Length - 1] = photoToAdd;
}
else
{
// 新建 1 个位置的新数组
savedPictures = new Photograph[1];
// 存储新照片
savedPictures[0] = photoToAdd;
}
}
// 对数组进行动态扩展或缩小
private Photograph[] ResizeArray(Photograph[] arr, int diff)
{
Photograph[] newArr = new Photograph[arr.Length + diff];
Array.Copy(arr, newArr, arr.Length);
return newArr;
}
}
注意:
- 我们使用的
savedPictures数组是一个动态长度的数组,可以根据需要扩展或缩小。 - 当检查剩余可用位置是否满足时,也有多种方法可以实现。
- 我们使用
ResizeArray方法来创建新的数组来存储新照片,这可以动态地改变数组长度,使得我们不必事先设置好一个指定长度的数组。ReszieArray方法会根据传入的diff个数来扩展或缩小一个数组。
评论 (0)