unity2d如何实现单张图片不间断播放

介绍

游戏中,有时候需要反复使用一张图,但是无限拼接一张图特别麻烦

using UnityEngine;

public class MovingBackground : MonoBehaviour 
{
    public float backgroundSpeed = 5f; // 移动速度
    private Renderer bgRenderer; // 纹理渲染器对象
    private Vector2 offset = Vector2.zero; // 偏移量

    void Start()
    {
        bgRenderer = GetComponent<Renderer>(); // 获取纹理渲染器组件
    }

    void Update () 
    {
        // 计算新偏移量,并向右移动图片
        offset += new Vector2(backgroundSpeed * Time.deltaTime, 0);
        
        // 若 x 坐标超出范围则设置为 0,从而实现循环
        if (offset.x > 1f) 
        {
            offset.x = 0;
        }

        bgRenderer.material.SetTextureOffset("_MainTex", offset); // 更新材质偏移量
    }
}

创建了一个名为MovingBackground的组件,并添加到 Sprite 图片所在的 GameObject 上。Start() 函数将获取该 Sprite 对象对应的纹理渲染器对象,Update() 函数将计算新的偏移量,在每一帧更新材质的偏移量 _MainTex,以实现图像向右不停滚动并且不会产生空隙。

需要注意的是,这段代码只可以实现平滑地滚动 Sprite 图片,若想要达到其它类型的效果,例如随机滚动、按照曲线移动等,可能需要考虑使用其它类型的算法或者技术手段。同时也需要注意,该技术会消耗一些系统开销,对于性能敏感的应用场景需要进行优化。


方法一

Unity 中更改材质的偏移量
bg.material.SetTextureOffset(“_MainTex”, new Vector2(0, Time.time / 5));


方法二

unity对图片进行瞬移

public class BackgroundController : MonoBehaviour
{
    // 用于移动的速度
    public float backgroundSpeed = 5f;

    // 当前背景图的 x 坐标
    private float currentBackgroundX;

    // 背景图的宽度
    private float backgroundWidth;

    // 引用需要滚动的背景缓存对象
    private Transform backgroundTransform;

    void Start()
    {
        // 获取需要滚动的背景缓存对象的 Transform 组件
        backgroundTransform = transform.Find("Background");

        // 获取背景图的宽度
        backgroundWidth = backgroundTransform.GetComponent<SpriteRenderer>().bounds.size.x;

        // 初始化当前背景图的 x 坐标
        currentBackgroundX = backgroundTransform.position.x;
    }

    void Update()
    {
        // 让当前背景图向左移动
        currentBackgroundX -= backgroundSpeed * Time.deltaTime;

        // 如果背景图已经完全移出屏幕左侧,应该将其瞬移至屏幕右侧
        if (currentBackgroundX <= -backgroundWidth / 2)
        {
            currentBackgroundX += backgroundWidth;
        }

        // 更新当前背景图所在的位置
        backgroundTransform.position = new Vector3(currentBackgroundX, 0, 0);
    }
}



缺点:需要根据需要调节数值,很麻烦


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值