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

简单的范例
在这里插入图片描述

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

图片准备

准备两张图,如下图,BG0003 的尺寸是 1536 x 768 像素,BG0004 为 3072 x 768 像素。
在这里插入图片描述

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

原理

由于是左右移动,所以只要更改 Sprite 的 Transform 的坐标位置即可,然后判断是否到了左右边界?到达之后就更改移动的方向。
在这里插入图片描述

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

当 position.x > 0时,如下图,蓝色线条表示此图的Pivot 位置,此时见到的内容会往左移。
在这里插入图片描述
反之,当 position.x <0,就会看到内容往右移动了。
在这里插入图片描述

左右的边界,只要知道 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 即可。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值