【注】源码下载地址http://download.csdn.net/detail/yy763496668/9838697
我们在玩的像素鸟的时候,我们控制的小鸟并没有移动,而是后面的背景在循环的滚动。后面的背景就是两张精灵在循环的利用,比如第一张图片在我们视野范围内的时候,我们就需要将第二张图片紧随其后的放在第一张的后面。当第一张图片消失在我们的视野范围的时候,我们就可以将第一张放在第二张的后面。
根据以上的思路我们有两种实现的方式:
第一种使用动画
第二种使用代码
我们这篇博文说的就是第二种
首先我们创建一个空物体命名为Ground在空物体上添加SpriteRenderer并选择Sprite为GrassThinSprite
其次给Gound添加Box collider 2D ,我们可以看到碰撞器的宽度就是北京图片的宽度见 Size.X,我们可以通过设置Size.Y的值调整碰撞器的大小。通过设置offset来调整碰撞器的偏移量。
然后给Gound添加刚体Rigidbody2D 设置BodyType 为Kinematic 否则在放置第二张北京图片的时候会有物理作用力,两张北京图片之间会有空隙。
以上内容设置好后,我们开始写脚本:
以下脚本是用来重设北京图片的,具体的脚本解释看代码注释
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ResetBackGround: MonoBehaviour {
//自身碰撞器的长度
private BoxCollider2D groundCollider;
//地面的长度 其实就是图片的长度
private float groundHorizontalLength;
// Use this for initialization
void Start () {
//获取自身的碰撞器
groundCollider = transform.GetComponent<BoxCollider2D>();
//碰撞器的长度就是地面的长度
groundHorizontalLength = groundCollider.size.x;
}
// Update is called once per frame
void Update () {
//计算发生偏移的位置
if (transform.position.x<-groundHorizontalLength)
{
//满足条件,就发生偏移
RepositionBackGround();
}
}
void RepositionBackGround()
{
//计算重置背景图片时的位置和重置后的位置之间的偏移量
Vector2 groundOffSet = new Vector2(groundHorizontalLength * 2.0f, 0);
//重置图片后的位置
transform.position = (Vector2)transform.position + groundOffSet;
}
}
以下的脚本是用来控制背景图片的移动的,这个脚本在后面的柱子的移动也会使用到
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveObject : MonoBehaviour {
private Rigidbody2D m_rigidbody;
// Use this for initialization
void Start () {
//获取自身的刚体
m_rigidbody = GetComponent<Rigidbody2D>();
//设置刚体的速度
m_rigidbody.velocity = new Vector2(-1.5f, 0);
}
// Update is called once per frame
void Update () {
}
}
背景的设置先介绍到这里,如有瑕疵,多多指教!