【Unity 3D】学习笔记二十:基础2D游戏界面
2014-06-27 11:06
1301 查看
接着前面学习笔记十九,这次进一步,添加碰撞监测。而且之前都是使用GUI来实现2D动画的播放,而实际上开发2D游戏最好不要用GUI来实现。因为GUI渲染效率比较低,并且无法使用Unity的独有特色功能。如物理引擎,粒子系统和特效。那如何实现2D游戏咧?其实很简单,3D的游戏中加入了Z轴。那如果不去旋转摄像机直接照射X,Y轴。便和2D游戏一样了。
首先在游戏界面汇总创建一个面对象,作为2D游戏的背景图,并让摄像机直接对着它。
接着在背景图上绘制图层如主角,敌人,道具等。然后动态更新每个对象身上的材质贴图就可以实现动的效果。ok,上代码。
例1:
在这运行时,会遇见默认的材质会将贴图中透明的部分渲染成白色,如图:
更改的方法是:在project视图中选择主角的材质资源,然后在右侧inspector视图中找到shader下拉列表选择transparent----->diffuse
为了实现碰撞效果,需给主角绑定一个刚体组件,方法是:在hierarchy视图中选中主角对象,接着在component---->physics----->rigidbody即可。
最后的实现效果是:
首先在游戏界面汇总创建一个面对象,作为2D游戏的背景图,并让摄像机直接对着它。
接着在背景图上绘制图层如主角,敌人,道具等。然后动态更新每个对象身上的材质贴图就可以实现动的效果。ok,上代码。
例1:
//主角对象 private var hero : GameObject; //按键是否被按下 private var keyUp : boolean; private var keyDown : boolean; private var keyLeft : boolean; private var keyRight : boolean; //记录当前时间 private var time : float; //限制一秒多少帧 private var fps : float = 4; //帧序列 private var nowFram : int; //动画数组 private var animUp: Object[] ; private var animDown: Object[] ; private var animLeft: Object[] ; private var animRight: Object[] ; private var nowAnim: Object[] ; private var backAnim: Object[] ; function Start() { //得到主角对象 hero = GameObject.Find("hero"); //得到上下左右四组动画 animUp = Resources.LoadAll("up"); animDown = Resources.LoadAll("down"); animLeft = Resources.LoadAll("left"); animRight = Resources.LoadAll("right"); nowAnim = animDown; backAnim = animDown; } function OnGUI() { //控制主角移动的按钮 keyUp = GUILayout.RepeatButton("向上"); keyDown = GUILayout.RepeatButton("向下"); keyLeft = GUILayout.RepeatButton("向左"); keyRight = GUILayout.RepeatButton("向右"); } function FixedUpdate() { if(keyUp) { //向上移动 SetAnimation(animUp); hero.transform.Translate(-Vector3.forward * 0.002f); } if(keyDown) { //向下移动 SetAnimation(animDown); hero.transform.Translate(Vector3.forward * 0.002f); } if(keyLeft) { //向左移动 SetAnimation(animLeft); hero.transform.Translate(Vector3.right * 0.002f); } if(keyRight) { //向右移动 SetAnimation(animRight); hero.transform.Translate(-Vector3.right * 0.002f); } //播放动画 DrawAnimation(nowAnim) ; } function DrawAnimation(tex : Object[]) { //计算限制帧的时间 time += Time.deltaTime; //超过限制帧切换贴图 if(time >= 1.0 / fps){ //帧序列切换 nowFram++; //限制帧清空 time = 0; //超过帧动画总数从第0帧开始 if(nowFram >= tex.Length) { nowFram = 0; } } //将对应的贴图赋予主角对象 hero.renderer.material.mainTexture = tex[nowFram]; } function SetAnimation(tex : Object[]) { //设置播放动画 nowAnim = tex; if(!backAnim.Equals(nowAnim)) { nowFram = 0; backAnim = nowAnim; } }
在这运行时,会遇见默认的材质会将贴图中透明的部分渲染成白色,如图:
更改的方法是:在project视图中选择主角的材质资源,然后在右侧inspector视图中找到shader下拉列表选择transparent----->diffuse
为了实现碰撞效果,需给主角绑定一个刚体组件,方法是:在hierarchy视图中选中主角对象,接着在component---->physics----->rigidbody即可。
最后的实现效果是:
相关文章推荐
- 【Unity 3D】学习笔记十二:GUILayout(界面布局)
- 【Unity 3D】学习笔记十八:游戏贴图与帧动画
- 【Unity 3D】学习笔记二十五:unity游戏脚本(五)
- 【Unity 3D】学习笔记二十四:unity游戏脚本(四)
- 【Unity 3D】学习笔记四十五:游戏实例——击垮围墙
- 学习手机游戏开发的两个方向 Cocos2d-x 和 Unity 3D/2D,哪个前景更好?
- 【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作
- 【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件
- 【Unity 3D】学习笔记三十:游戏元素——游戏地形
- 【Unity 3D】学习笔记三十二:游戏元素——游戏光源
- Unity学习笔记-2D横版游戏中的背景移动
- Unity学习笔记5:多人游戏基础
- 【Unity 3D】学习笔记十九:实例:游戏人物移动
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
- Unity学习笔记2 简易2D横版RPG游戏制作(二)
- Android 3D 游戏学习笔记(1)-openGL基础
- 【Unity 3D】学习笔记二十一:unity游戏脚本(一)
- 【Unity 3D】学习笔记十七:自定义游戏中字体
- 【Unity 3D】学习笔记三十三:游戏元素——天空盒子
- Unity学习系类笔记5:多人游戏基础