Unity 2D 学习手札(七)Sprite 背景的移动

时间:2024-04-03 17:34:19

简单的范例
Unity 2D 学习手札(七)Sprite 背景的移动

如上图,后面的蓝天白云及前面的建筑物会依据各自不同的速率左右移动。

图片准备

准备两张图,如下图,BG0003 的尺寸是 1536 x 768 像素,BG0004 为 3072 x 768 像素。
Unity 2D 学习手札(七)Sprite 背景的移动

屏幕大小设为 1024 x 768像素,因为 Pixels to Units 维持默认值的 100,所以 Main Camera 的 Size 设为 3.84。

原理

由于是左右移动,所以只要更改 Sprite 的 Transform 的坐标位置即可,然后判断是否到了左右边界?到达之后就更改移动的方向。
Unity 2D 学习手札(七)Sprite 背景的移动

如上图,两条红色线之间的宽度是所谓的屏幕宽度,称之为 ViewWidth。当 position.x = 0 时,会显示 Sprite 中间的部分,因为 Pivot 设定为 Center,如上图的红色框之间部分。黑色那条代表中心位置。

当 position.x > 0时,如下图,蓝色线条表示此图的Pivot 位置,此时见到的内容会往左移。
Unity 2D 学习手札(七)Sprite 背景的移动
反之,当 position.x <0,就会看到内容往右移动了。
Unity 2D 学习手札(七)Sprite 背景的移动

左右的边界,只要知道 Sprite 的宽度及显示区域的宽度,两者间的差,除以 2 再除以 Pixels to Units 的 100,就是左右的边界值了。此例为:

( 1536 – 1024 ) / 2 / 100 = 2.56

所以右边界为 2.56,左边界为 -2.56。

设计脚本

新建一个 MoveSprite 脚本,完整代码如下:

public class MoveSprite : MonoBehaviour {
    public int  viewWidth;
    public int  spriteWidth;
    public float distance;   // 每秒移動的單位距離
    public bool  toLeft;     // 一开始是向左或向右

    private float m_nMax;
    private float m_nMin;
    //--------------------------------------------------
    void Start()
    {
        // 200f 为 / 2 / PixelsPerUnit
        m_nMax = (spriteWidth - viewWidth) / 200f;
        m_nMin = (-1) * m_nMax;
    }
    //--------------------------------------------------
    void Update()
    {
        Vector3 pos = gameObject.transform.position;
        float dx = distance * Time.deltaTime;

        if ( toLeft )
        {
            pos.x += dx;
            if (pos.x >= m_nMax)
            {
                pos.x = m_nMax;
                toLeft = false;
            }
           else
           {
               pos.x -= dx;
               if (pos.x <= m_nMin)
               {
                   pos.x = m_nMin;
                   toLeft = true;
               }
           }
           gameObject.transform.position = pos;
        }
    }
}

创建 Sprite 对象

将两张图先导入到项目中,然后分别建立两个 Sprite 对象,在 Sprite Renderer 中,特别留意 Order in Layer,将蓝天白云的 Layer 设为 0,建筑物设为 1,这样蓝天白云就会跑到建筑物的后面。

最后将两个 Sprite 分别挂上 MoveSprite 脚本,然后设定好 View Width, Sprite Width, Distance, ToLeft 即可。
Unity 2D 学习手札(七)Sprite 背景的移动