您的位置:首页 > 移动开发 > Unity3D

Unity学习笔记-2D横版游戏中的背景移动

2014-03-16 22:30 906 查看
2D横版游戏中,背景是可以无限延续下去的。今天实现了一个比较简陋的版本。

就当是学习下Unity中的脚本编写吧。

先设置两个地面,窗口中显示出来的,也就是玩家当前站着的地面,命名为leftGround,在右侧紧挨着的就是rightGround了。

命名规则什么的不要纠结,毕竟是测试。

另外,不需要刻意区分两个地面谁是左谁是右。

移动规则:当玩家向右侧移动的时候,2个地面都向左移动,移动的距离当然就是玩家的移动速度了。

以地面向右移动为例:当某个地面的x坐标超过了屏幕中的x最大值时,这个地面就需要重置到最左侧。

两个地面的处理是一样的。在移动过程中,两个地面会有换位置的情况,所以,是无法区分谁左谁右的。

其实也没必要。



然后就是编写移动的控制脚本了,脚本是绑定在玩家身上的,毕竟移动的触发是玩家发起的。

using UnityEngine;
using System.Collections;

public class SceneMove : MonoBehaviour {
private bool m_bMove = false;	//是否移动背景
private bool m_bLeft = true;	//true表示从右向左移动,人物则是向右移动

public float m_Speed = 2.0f;	//移动速度
public tk2dTiledSprite m_GroundLeft; //左侧地面
public tk2dTiledSprite m_GroundRight;//右侧地面
private float m_fMinX = -13.2f;
private float m_fMaxX = 13.2f;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.A)) {
m_bLeft = false;
m_bMove = true;
} else if (Input.GetKeyDown (KeyCode.D)) {
m_bLeft = true;
m_bMove = true;
}

if (m_bMove) {
MoveBackGround(Time.deltaTime);
}
}

void MoveBackGround(float fDelta) {
float fMoveSpeed = m_Speed * fDelta;
if (m_bLeft) {
m_GroundLeft.transform.Translate (Vector3.left * fMoveSpeed, Space.World); //向左移动
m_GroundRight.transform.Translate (Vector3.left * fMoveSpeed, Space.World);

if (m_GroundLeft.transform.localPosition.x <= m_fMinX) {
m_GroundLeft.transform.localPosition = new Vector3(m_fMaxX,
m_GroundLeft.transform.localPosition.y,
m_GroundLeft.transform.localPosition.z);
}
if (m_GroundRight.transform.localPosition.x <= m_fMinX) {
m_GroundRight.transform.localPosition = new Vector3(m_fMaxX,
m_GroundRight.transform.localPosition.y,
m_GroundRight.transform.localPosition.z);
}
} else {
m_GroundLeft.transform.Translate(Vector3.right * fMoveSpeed, Space.World);
m_GroundRight.transform.Translate(Vector3.right * fMoveSpeed, Space.World);
if (m_GroundLeft.transform.localPosition.x >= m_fMaxX) {
m_GroundLeft.transform.localPosition = new Vector3(m_fMinX,
m_GroundLeft.transform.localPosition.y,
m_GroundLeft.transform.localPosition.z);
}
if (m_GroundRight.transform.localPosition.x >= m_fMaxX) {
m_GroundRight.transform.localPosition = new Vector3(m_fMinX,
m_GroundRight.transform.localPosition.y,
m_GroundRight.transform.localPosition.z);
}
}
}
}
脚本绑定到玩家身上后,需要设置如下:



运行游戏,哈哈,没问题。按A是玩家向左移动,按D是玩家向右移动。

注意:我这里地面的图片是很小的,所以我为了方便显示,采用了tk2dTiledSprite,然后脚本中的m_fMinX和m_fMaxX就是单个地面的缩放系数了。

现在还不知道怎么在脚本中获取这两个地面的对象。继续学吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: