您的位置:首页 > 移动开发 > Unity3D

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

2014-06-27 11:06 1301 查看
接着前面学习笔记十九,这次进一步,添加碰撞监测。而且之前都是使用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[] ;
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即可。

最后的实现效果是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: