开发环境
Window 7
Unity3D 3.4
MB525 defy Android 2.1-update1
羽化的第四篇博客,这次给大家送上自己初学Unity时写的一个小游戏Demo,我叫它“躲避方块”,其实这个游戏可以无限扩展,可以做成联机游戏,加入更多游戏元素等,我是心有余而力不足,公司想做个类似《火炬之光》的游戏,自己要好好努力才行,这也许是自己开发的第一个完全作品。就在上个星期,Unity升级到了3.4,功能有了质的飞跃,不仅游戏大小缩小一圈(我这游戏看不出来- -),开发也更加开放,移动端能用的功能更多,新的3.4Demo就是我的目标,手机游戏就是要这样的画面效果-0- 话说最近打了一款叫《爱丽丝疯狂回归》的游戏,EA再次让我感觉到了无所不能,游戏做得十分精致,虽然血型十足,但绚丽的画面下形成强烈的对比,就是游戏性可能略显单薄,但是款难得一见的佳作,推荐给大家,每个人心中都有个仙境,至少我们的仙境曾经美丽过~ ~
本次学习:
1.开发准备
2.制作简介
3.小技巧
1.开发准备
这个游戏代码其实很简单,羽化也没想到要写成个游戏,在看Unity脚本文档的时候练习那些脚本,慢慢的就写成了这个小游戏,大家若有什么不懂的脚本可以看看脚本文档,上面写得很详细,还有就是升级成Unity3.4以后.NET一定要到3.5,要不让脚步编辑器Monodevelop打不开。还有就是游戏是两个Scene组成,在自己做的时候一定要在Buid Settings里面排序,详细可以看我的游戏代码。Unity的强大之处在于对游戏的优化,Occlusion Culling技术使我们场景可以很更大,减少了游戏的大小,大家可以研究下这些开发技巧~ ~
2.制作简介
还是和原来一样,主要是介绍一下重要的几个脚本,每个人开发习惯不一样,所以这里就不详细写到底怎么做的了,代码全部送上,写几个对开发重要的脚本,希望对大家有帮助。
首先是触摸脚本怎么写,因为触摸是目前手机唯一的操作方式,这个很重要,就那自己写的几个脚本介绍下,看看这个脚本Menu_New,这是一个实现新的游戏的脚本详细代码如下:
function Update() { for (var touch : Touch in Input.touches) { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(0).phase == TouchPhase.Began) { if(touch.position.x>90 && touch.position.x<540 && touch.position.y>250 && touch.position.y<400) { renderer.material.color = Color.red; } else { renderer.material.color = Color.white; } } else if (touch.phase == TouchPhase.Ended ) { if(touch.position.x>90 && touch.position.x<540 && touch.position.y>250 && touch.position.y<400) { renderer.material.color = Color.red; Application.LoadLevel(1); } } else { if(touch.position.x>90 && touch.position.x<540 && touch.position.y>250 && touch.position.y<400) { renderer.material.color = Color.red; } else { renderer.material.color = Color.white; } } } }
这里可以看到Input是获取触摸的接口,从Input中可以获取触摸个数,触摸状态,包括很多感应器,甚至还能确定第几个点的触摸,羽化自我认为这个很方便,原来开发Android游戏的时候,做个多点触摸判断都很麻烦,Unity使这一下子简单不少,详细使用方法可以看脚本手册里面介绍,还有就是Scene的跳转用Application,退出也是一样,Application也是很使用的接口。 大家看到羽化把坐标写死其实是不对的,应该写成相对坐标,这里不要忘了,羽化也是为了方便-0-
下一个我们看看触发器的脚本,很多人都搞不清楚触发器和碰撞器到底有什么区别,羽化可以这么解释,触发器是个虚的东西,被勾成触发器的物体实质上就相当于没了实体,而碰撞器肯定是实的东西,用脚本里面的理解来说,无论是触发器还是碰撞器,都是由刚体引起的,所以必须两个物体中必须有一个是刚体。看看这个脚本Trigger:
collider.isTrigger = true; var explosionPrefab : Transform; // Destroy everything that enters the trigger function OnTriggerEnter (other : Collider) { if(other.gameObject.tag == "Player") { Destroy(other.gameObject); Destroy(gameObject); Instantiate(explosionPrefab, transform.position,Quaternion.identity); Begin.hasOne = true; Begin.life --; GameObject.Find("Life") .guiText.text = Begin.life + ""; } }
这个脚本是让火球或者雷球相互触发的时候不会自己爆炸,因为速度是越来越快,所以总会有碰到的时候。
最后给大家看看Begin这个脚本,因为这个脚本是所有的核心,里面可以学习下寻找gameObject,和产生预设的方法,预设的作用十分广泛,相当于一个强大的脚本集合器,而且生成与销毁都能用脚本控制。
var prefab : Transform; static var hasOne = true; static var life = 3; static var GameOver = false; function Awake() { hasOne = true; life = 3; GameOver = false; GameObject.Find("Life") .guiText.text = life + ""; GameObject.Find("GameOver").renderer.enabled = false; } function Update () { for (var i = 0; i < Input.touchCount; ++i) { if (Input.GetTouch(i).phase == TouchPhase.Began && hasOne && !Return.isReturn) { Instantiate(prefab, transform.position, transform.rotation); } } if(life ==0) { hasOne = false; GameOver = true; GameObject.Find("GameOver").renderer.enabled = true; Relay(); } } function Relay() { yield WaitForSeconds (3); GameObject.Find("Replay").guiText.text = "Touch To Replay!"; GameObject.Find("Replay").guiText.fontSize = 40; }
游戏中爆炸特效和跟随路径都是自带的,这里羽化只是修改了下样式,话说这路径回来的时候一闪像激光一样,烘托点氛围吧。
3.小技巧
Unity开发中有个东西叫做Unity Remote,可能很多人都不知道,其实是个很强大的软件,下载地址是https://market.android.com/details?id=com.unity3d,大家可以下载下来看看这东西到底给我们开发带来多大方便~ ~
还有最近才发现更换开始图标的方法在Player Settings的Splash Image里面-0- 原来找半天没找到。。。
可能有些人不知道Unity生成Android的那些项目到底在哪,其实当你生成一次APK后这些东西自动生成在Project目录下的Temp文件夹里面,有兴趣可以研究下~ ~
最后告诉大家一个秘密,其实获取键盘按键的“Enter”对应的键值是“Return” - - 估计很多人会搞错。。。
一下子就想到这些,写的比较简单,有什么不懂的可以跟羽化留言,也可以这Unity圣典的QQ2群里面问,羽化会的一定会回答。这个星期Stray为自己的誓言要开始冲85的征程了,真想再见你一面。
代码下载地址:
http://download.csdn.net/source/3486987
下集预告:
Unity如何使用Java类