查看: 2669|回复: 1
打印 上一主题 下一主题

Android Unity3D游戏开发之躲避方块

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-5-3 14:43:54 |只看该作者 |倒序浏览
开发环境
Window 7
unity3d 3.4
MB525 defy  Android 2.1-update1


本次学习:
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 = ***e;  

var explosionPrefab : Transform;  

// Destroy everything that enters the trigger   

function OnTriggerEnter (other : Collider) {  

if(other.gameObject.tag == "layer")  

{  

  Destroy(other.gameObject);  

  Destroy(gameObject);  

  Instantiate(explosionPrefab, transform.position,Quaternion.identity);  

  Begin.hasOne = ***e;  

  Begin.life --;  

  GameObject.Find("Life") .guiText.text = Begin.life + "";  

}  

}  这个脚本是让火球或者雷球相互触发的时候不会自己爆炸,因为速度是越来越快,所以总会有碰到的时候。
         最后给大家看看Begin这个脚本,因为这个脚本是所有的核心,里面可以学习下寻找gameObject,和产生预设的方法,预设的作用十分广泛,相当于一个强大的脚本集合器,而且生成与销毁都能用脚本控制。复制内容到剪贴板代码:

var prefab : Transform;  

static var hasOne = ***e;  

static var life = 3;  

static var GameOver = false;  

  

function Awake()  

{  

    hasOne = ***e;  

    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 = ***e;  

        GameObject.Find("GameOver").renderer.enabled = ***e;  

        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
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

markq    

511

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
15839
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-5-4 23:22:49 |只看该作者
  谢谢分享



爱生活 爱3D 爱纳金网



www.narkii.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-2-6 04:46 , Processed in 0.085309 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部