Unity学习笔记-2D横版游戏中的背景移动
2014-03-16 22:30
906 查看
2D横版游戏中,背景是可以无限延续下去的。今天实现了一个比较简陋的版本。
就当是学习下Unity中的脚本编写吧。
先设置两个地面,窗口中显示出来的,也就是玩家当前站着的地面,命名为leftGround,在右侧紧挨着的就是rightGround了。
命名规则什么的不要纠结,毕竟是测试。
另外,不需要刻意区分两个地面谁是左谁是右。
移动规则:当玩家向右侧移动的时候,2个地面都向左移动,移动的距离当然就是玩家的移动速度了。
以地面向右移动为例:当某个地面的x坐标超过了屏幕中的x最大值时,这个地面就需要重置到最左侧。
两个地面的处理是一样的。在移动过程中,两个地面会有换位置的情况,所以,是无法区分谁左谁右的。
其实也没必要。
然后就是编写移动的控制脚本了,脚本是绑定在玩家身上的,毕竟移动的触发是玩家发起的。
运行游戏,哈哈,没问题。按A是玩家向左移动,按D是玩家向右移动。
注意:我这里地面的图片是很小的,所以我为了方便显示,采用了tk2dTiledSprite,然后脚本中的m_fMinX和m_fMaxX就是单个地面的缩放系数了。
现在还不知道怎么在脚本中获取这两个地面的对象。继续学吧。
就当是学习下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就是单个地面的缩放系数了。
现在还不知道怎么在脚本中获取这两个地面的对象。继续学吧。
相关文章推荐
- Unity学习笔记3 简易2D横版RPG游戏制作(三)
- Unity学习笔记2 简易2D横版RPG游戏制作(二)
- Unity学习笔记1 简易2D横版RPG游戏制作(一)
- 【Unity 3D】学习笔记二十:基础2D游戏界面
- 移动2D游戏框架 Cocos2d-x 学习笔记
- Unity 2d游戏学习笔记(一)--FeatureGeature插件导入
- 【Unity 3D】学习笔记十九:实例:游戏人物移动
- Unity学习笔记 1st —— 物体会移动就是游戏的开始!
- Unity开发2D游戏之游戏背景的移动
- 【Unity3D】学习笔记(第2记) 2D游戏开发基本技巧之背景制作
- 【unity学习笔记】手机RPG游戏中角色移动方式实现
- unity学习笔记【使用2d背景】
- 【Unity 3D】学习笔记三十二:游戏元素——游戏光源
- Unity_2D游戏对象的移动_075
- 【Unity2D游戏实战 之 2D滚屏射击】1.背景滚动 (一)
- Unity学习笔记 [1st - 3rd] —— 小游戏制作完成
- UNITY 2D学习笔记(一):Sprite
- UNITY 2D学习笔记(二):C#脚本编写
- 【Unity 3D】学习笔记二十五:unity游戏脚本(五)
- 【Unity 3D】学习笔记二十六:unity游戏脚本(六)