背景循环滚动
背景循环滚动是2d游戏制作时经常可能会涉及到的一部分。https://www.zhihu.com/video/1064105089442168832
(因为不是无缝贴图,所以效果一般)
新建2d项目
创建sprite,改名为bg,向SpriteRenderer中的Sprite里拖拽一张你希望作为背景的图。(最好有无缝贴图,这里的图是网上找来的,没有找到合适的无缝贴图。)
将Sprite的DrawMode改为Tiled(平铺),然后调整Width为原来的三倍(方便观察滚动的效果。注意:不改动也可以,下文对应代码中不需要除以3了)。
代码逻辑:
在Start()方法中得到bg的右边界,左边界,和左右边界的距离。
使bg图不断向右移动,当position的x轴坐标到达right点,重置bg图的位置,使position的x轴处于左边界的位置。
不断重复, 达到背景循环滚动的目的。
注意:
1. [Range(0f,1f)] 是将rollSpeed在Inspector面板中设置成滑动条的样式,方便滑动调整滚动速度。
2. bounds是图形的边界框,bounds.extents.x是图形边界框长度一半,position.x+bounds.extents.x也就是right的位置,position.x-bounds.extens.x是left的位置。
代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class bgRoll : MonoBehaviour {
[Range(0f,1f)] //将rollSpeed在Inspector面板中设置成滑动条的样式
public float rollSpeed = 1f;//滚动速度
private float right; //右边界
private float left; //左边界
private float distance; //左右边界距离
// Use this for initialization
void Start () {
//计算左右边界。Bounds是当图形的边界框
SpriteRenderer sRender = GetComponent();
right = transform.position.x + sRender.bounds.extents.x / 3;
left = transform.position.x - sRender.bounds.extents.x / 3;
distance = right - left;//左右边界相减得到距离
}
// Update is called once per frame
void Update () {
//使背景图片向右移动
transform.localPosition+= rollSpeed * Vector3.right * Time.deltaTime;
//判断是否到达右边界
if(transform.position.x > right)
{
//如果到达,将背景图片的位置向后(x轴方向)调整一个背景图片长度的距离
transform.position -= new Vector3(distance, 0, 0);
}
}
}
最后将脚本添加给背景图。
最终效果如文章开头视频所示。
欢迎关注公众号:siki,分享优质课程与众多学习干货,欢迎大家关注留言评论,提出课程建议!