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

2D横版游戏中,背景是可以无限延续下去的。今天实现了一个比较简陋的版本。
就当是学习下Unity中的脚本编写吧。
先设置两个地面,窗口中显示出来的,也就是玩家当前站着的地面,命名为leftGround,在右侧紧挨着的就是rightGround了。
命名规则什么的不要纠结,毕竟是测试。
另外,不需要刻意区分两个地面谁是左谁是右。

移动规则:当玩家向右侧移动的时候,2个地面都向左移动,移动的距离当然就是玩家的移动速度了。
以地面向右移动为例:当某个地面的x坐标超过了屏幕中的x最大值时,这个地面就需要重置到最左侧。
两个地面的处理是一样的。在移动过程中,两个地面会有换位置的情况,所以,是无法区分谁左谁右的。
其实也没必要。
Unity学习笔记-2D横版游戏中的背景移动_第1张图片
然后就是编写移动的控制脚本了,脚本是绑定在玩家身上的,毕竟移动的触发是玩家发起的。

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就是单个地面的缩放系数了。
现在还不知道怎么在脚本中获取这两个地面的对象。继续学吧。

你可能感兴趣的:(Unity)