【Unity 3D】学习笔记二十:基础2D游戏界面

来源:互联网 发布:mac 文件怎么归类 编辑:程序博客网 时间:2024/03/02 14:40

接着前面学习笔记十九,这次进一步,添加碰撞监测。而且之前都是使用GUI来实现2D动画的播放,而实际上开发2D游戏最好不要用GUI来实现。因为GUI渲染效率比较低,并且无法使用Unity的独有特色功能。如物理引擎,粒子系统和特效。那如何实现2D游戏咧?其实很简单,3D的游戏中加入了Z轴。那如果不去旋转摄像机直接照射X,Y轴。便和2D游戏一样了。


首先在游戏界面汇总创建一个面对象,作为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[] ;privatevar nowAnim: Object[] ;privatevar 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即可。

最后的实现效果是:


0 0
原创粉丝点击