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

来源:互联网 发布:程序员的算法趣题 pdf 编辑:程序博客网 时间:2024/04/28 00:02
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 initializationvoid Start () {}// Update is called once per framevoid 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就是单个地面的缩放系数了。
现在还不知道怎么在脚本中获取这两个地面的对象。继续学吧。

0 0
原创粉丝点击