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 编写代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using System.IO;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public GameObject go;
    public GameObject prefabToInstantiate;
    
    int n = 0;
    int index = 0;
    int num = 0;
    Transform parentTransform;
    GameObject newObject;

    

    // Start is called before the first frame update
    void Start()
    {
        parentTransform = go.transform; // 替换 go为实际的父级对象
        
        LoadLocalTextures();
        InvokeRepeating("lunbo", 1, 4);
    }

    
    public void LoadLocalTextures()
    {

        string imgType = "*.BMP|*.JPG|*.PNG";    //需要加载的图片类型后缀
        string[] imgTypes = imgType.Split('|');
        for (int i = 0; i < imgTypes.Length; i++)
        {
            string[] s2 = Directory.GetFiles(Application.dataPath + "/Resources/", imgTypes[i]);    //Application.dataPath + "/Resources/"为图片所在路径
            num += s2.Length ;
            for (int ji = 0; ji < s2.Length; ji++)
            {               
                if (++n <= num)
                {
                    newObject = Instantiate(prefabToInstantiate);
                    newObject.transform.SetParent(parentTransform);
                    newObject.transform.localPosition = new Vector3((500f*n-250), 0f, 0f);
                }

                //文件流读取图片
                FileStream fileStream = new FileStream(s2[ji], FileMode.Open, FileAccess.Read);

                byte[] bytes = new byte[fileStream.Length];

                fileStream.Read(bytes, 0, (int)fileStream.Length);


                fileStream.Close();

                fileStream.Dispose();
                fileStream = null;
                //设置图片大小
                int width = 500;
                int height = 360;
                //创建texture2D
                Texture2D texture = new Texture2D(width, height);
                //加载图片流
                texture.LoadImage(bytes);
                //创建sprite并赋值
                Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
                //ga.GetComponent<Image>().sprite = sprite;
                newObject.GetComponent<Image>().sprite = sprite;
            }

        }
    }

    void lunbo()
    {
        if (index == (num-1))
        {
            index = 0;
            //go.transform.localPosition = new Vector3(-250, 0, 0);
            go.transform.DOLocalMoveX(-250, 1);
        }
        else
        {
            index++;
            go.transform.DOLocalMoveX(-250 - 500 * index, 1);
        }
        //Resources.Load<Image>
    }
}

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

 三、总结

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

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity是一款跨平台的游戏引擎,也可以用于制作轮播图等应用。在Unity中,图片自动轮播可以通过使用Slider组件和Image组件实现。 首先,在Hierarchy中创建一个Slider对象,并将其命名为“ImageSlider”。然后,在Inspector中将Slider的Min Value和Max Value都设置为0,将Value设置为0.5。 接下来,在“Canvas”下创建一个Image对象,并将其命名为“Image”。在Inspector中,将Image的“Source Image”设置为需要轮播的第一张图片。 然后,在Script中使用InvokeRepeating函数实现自动轮播。定义一个数组存储需要轮播的图片,在Start函数中使用InvokeRepeating函数调用自定义的RotateImages函数,设置初始延迟为0,周期时间为2秒。 RotateImages函数中,每次调用改变ImageSlider的Value值,从而切换当前显示的图片。如果Value值为1,则将Value值重新设置为0,从而将轮播回到第一张图片。每次切换图片时都需要更新Image组件的“Source Image”属性,将其设置为当前需要显示的图片。 完成以上步骤后,保存脚本并运行程序即可实现图片自动轮播功能。 总之,Unity图片自动轮播功能可以通过Slider组件和Image组件的配合使用来实现。通过编写脚本完成轮播逻辑,同时设置周期时间,就可以方便地实现多张图片自动切换,从而让程序更加美观和实用。 ### 回答2: Unity是一款非常强大的游戏引擎,在实现Unity图片自动轮播的功能方面,可以通过以下步骤: 首先,需要导入图片资源,并将它们放置在一个空的GameObject上。 其次,需要使用Unity自带的InvokeRepeating函数来实现自动轮播的功能。该函数可以重复执行你所指定的方法,实现循环轮播的效果。在这个方法中,可以通过代码控制图片的切换,例如通过设置texture、sprite等方式实现。 另外,为了实现更加流畅的轮播效果,可以使用Lerp插值函数来过渡图片的切换过程。该函数可以让图片的过渡更加自然,避免了突兀的跳过效果。 在以上几个步骤的基础上,可以根据自己的需求和实际情况对Unity图片自动轮播做出更为细致的调整和优化。 需要注意的是,在实现Unity图片自动轮播的过程中,需要注意内存的使用以及图片资源的大小。为了避免内存溢出和程序崩溃的问题,建议尽可能地减小图片资源的大小,并进行必要的资源优化和管理。 ### 回答3: Unity是一个强大的游戏开发引擎,不仅可以制作游戏,还可以用来做多媒体展示等等。在Unity中,要实现图片自动轮播非常简单。本篇文章将为大家介绍Unity中如何实现图片自动轮播。 首先,在Unity中,我们需要一个图片容器,可以用RawImage来实现。然后,将需要轮播的图片打包成一个Texture,以便我们可以方便地进行控制。接着,我们需要在代码中实现对这些图片进行控制。我们可以用一个数组来存储图片,然后使用一个计时器来控制图片的显示。最后,我们将计时器的时间间隔调整到自己需要的时间,就可以实现图片的轮播了。 具体实现过程如下:创建一个新的Unity场景,将需要自动轮播的图片拖入到场景中。然后,在画布上添加一个RawImage用来显示图片。创建一个空的GameObject作为父物体,并将RawImage放置在父物体下。重复以上步骤来载入所需的图片。 现在开始编写脚本。首先,我们需要定义一个类来实现图片自动轮播的计时器。在这个计时器类中,我们声明一个数组用来存储所有要轮播的图片。我们还需要一个变量来存储当前显示的图片的索引。 接下来,我们需要编写代码来实现自动轮播的效果。在Start()函数中,我们将第一张图片设置为显示状态。在Update()函数中,我们将计时器时间增加。如果计时器时间大于我们设置的间隔时间,我们将当前的图片设置为隐藏状态,然后显示下一张图片的状态。 最后,我们需要在场景中添加一个空的GameObject,并将我们创建的脚本作为其组件。我们将所有要轮播的图片拖拽到该脚本的数组中,并将RawImage作为子物体放置在该空物体下。 这样,我们就完成了Unity图片自动轮播的功能实现了。虽然实现时需要定时器等一些技巧,但总体来说并不难。只要我们按照以上步骤进行,就能轻松实现图片自动轮播。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值