当前位置:   article > 正文

Unity自动从本地加载图片实现图片轮播(图片数量可任意删减)_unity 图片轮播

unity 图片轮播

一、效果展示:

二、步骤

2.1 创建UI Image命名为“Mask”宽为500,高为360(可以根据需要自己调),添加Mask组件。

mask功能可以参考我这篇文章使用Mask遮罩功能实现头像

 

在场景中调整位置。

2.2 在Mask下新建空物体命名为“Bg”并调整位置。

2.3 创建Image预制体设置宽为500,高为360。

2.4 在Assets文件下新建文件夹命名为“Resources”,同时放入几张图片。

2.5 编写代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using DG.Tweening;
  5. using System.IO;
  6. using UnityEngine.UI;
  7. public class Test : MonoBehaviour
  8. {
  9. public GameObject go;
  10. public GameObject prefabToInstantiate;
  11. int n = 0;
  12. int index = 0;
  13. int num = 0;
  14. Transform parentTransform;
  15. GameObject newObject;
  16. // Start is called before the first frame update
  17. void Start()
  18. {
  19. parentTransform = go.transform; // 替换 go为实际的父级对象
  20. LoadLocalTextures();
  21. InvokeRepeating("lunbo", 1, 4);
  22. }
  23. public void LoadLocalTextures()
  24. {
  25. string imgType = "*.BMP|*.JPG|*.PNG"; //需要加载的图片类型后缀
  26. string[] imgTypes = imgType.Split('|');
  27. for (int i = 0; i < imgTypes.Length; i++)
  28. {
  29. string[] s2 = Directory.GetFiles(Application.dataPath + "/Resources/", imgTypes[i]); //Application.dataPath + "/Resources/"为图片所在路径
  30. num += s2.Length ;
  31. for (int ji = 0; ji < s2.Length; ji++)
  32. {
  33. if (++n <= num)
  34. {
  35. newObject = Instantiate(prefabToInstantiate);
  36. newObject.transform.SetParent(parentTransform);
  37. newObject.transform.localPosition = new Vector3((500f*n-250), 0f, 0f);
  38. }
  39. //文件流读取图片
  40. FileStream fileStream = new FileStream(s2[ji], FileMode.Open, FileAccess.Read);
  41. byte[] bytes = new byte[fileStream.Length];
  42. fileStream.Read(bytes, 0, (int)fileStream.Length);
  43. fileStream.Close();
  44. fileStream.Dispose();
  45. fileStream = null;
  46. //设置图片大小
  47. int width = 500;
  48. int height = 360;
  49. //创建texture2D
  50. Texture2D texture = new Texture2D(width, height);
  51. //加载图片流
  52. texture.LoadImage(bytes);
  53. //创建sprite并赋值
  54. Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
  55. //ga.GetComponent<Image>().sprite = sprite;
  56. newObject.GetComponent<Image>().sprite = sprite;
  57. }
  58. }
  59. }
  60. void lunbo()
  61. {
  62. if (index == (num-1))
  63. {
  64. index = 0;
  65. //go.transform.localPosition = new Vector3(-250, 0, 0);
  66. go.transform.DOLocalMoveX(-250, 1);
  67. }
  68. else
  69. {
  70. index++;
  71. go.transform.DOLocalMoveX(-250 - 500 * index, 1);
  72. }
  73. //Resources.Load<Image>
  74. }
  75. }

2.6 将脚本挂载在Bg上,同时将Bg和预制体Image拖入。

 三、总结

这里轮播的逻辑类似我之前的文章Unity实现图片轮播 ,只不过加入了自动加载的功能。整体逻辑是先加载图片再轮播。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/606862
推荐阅读
相关标签
  

闽ICP备14008679号