想必经过之前的两个教程,都已经能够成功的制作出一个具备

  1. 刷怪功能
  2. 寻路功能
  3. 建塔功能
  4. 交互界面

的塔防类游戏了。当然这样是远远不够的,今天的教程就要对之前的游戏做一个优化。

随机怪物

真正的塔防游戏中,不会像现在这样,怪物一个接一个的出来,应该是成批次,一波一波的出现,而且每一波都应该有不一样的怪物。

这里就涉及到两个问题

间隔成批复制mMonster

随机生成怪物种类

第一点,我们可以回顾一下我们现在采用的策略。

当前的游戏中,我们使用了Invoke函数来重复调用函数。我们的脚本是这样写的。

InvokeRepeating("MonsterFactory", 1, 3f);

1s执行三次MonsterFactory(复制Monster对象)的函数。

那其实照理说来我们已经实现了一批一批的出现怪物,只不过每一批都只出现一次,而且时间间隔为1/3s很容易让人有一种流水线的错觉。

为了改变这一点我们可以在MonsterFactory做一点手脚。让他做一个循环。

<span style="font-size:14px;">void MonsterFactory() {for(int i =0;i<5;i++) MonsterTemp = Instantiate(Monster, startp.transform.position, Quaternion.identity) as GameObject;
}</span>

这样的话,每一批出来的怪物就都是5个了!当然为了密集恐惧症的患者着想,我建议大家把Invoke的频率调低....

然后就有读者要扔板砖上来了!哪里有成批量的怪物啊!和以前不是一毛一样吗!

稍安勿躁,请仔细看Hierarchy栏,我们的怪物数量的的确确是变多了的,只不过他们一个不小心,重叠在了一起...

解决的办法我们之前已经在建立炮台的时候使用过了,给Instantiate的的二个参数添加一个X轴的偏移量new Vec3(i,0,0);

当然每一波都出来两个也是太过于无聊了。我们干脆用一个随机函数,让他每一次生成的数量都不一样。这里要使用到Rand随机变量,最后我们的代码如下

<span style="font-size:14px;">void MonsterFactory() {
for (int i = 0; i < Random.Range(1,5); i++)
{ MonsterTemp = Instantiate(Monster, startp.transform.position+new Vector3(i,0,0), Quaternion.identity) as GameObject; }
}</span>

每一次都能出现1-5个怪物(是不是很豪华呢!!!)

计分系统

作为一个游戏,一定要有分数的对吧。

说到分数,大家第一时间想到的肯定是上一次Roll a Ball的GUI Text.传送门点我

当然有的人就是懒得戳链接,我们这里再重复一遍步骤

首先我们需要在Hierarchy列表中增加两个GUI text,作为显示分数用的文本和用来显示失败的文本。

塔防游戏中一项计分规则是:

当敌人没有被打死,走道了尽头时,玩家的生命值就会减一。我们先来做这个生命值减少的分数。

打开CreateTower脚本(因为在这里我们有了GUI所以就把计分系统也扔到这里来。

新建两个Public变量,用来挂载GUItxt组件。我们分别叫做scoreTxt和loseTxt。

由于scoreTxt是用来显示剩余生命值的,所以我们还需要一个float 型的score来实时更新。

代码如下

<span style="font-size:14px;"> public GUIText loseTxt;public GUIText scoreTxt;public float score;// Use this for initializationvoid Start () {score = 10;loseTxt.enabled = false;}</span>

将score初始化为0,并且让Lose默认不可见

然后呢,score的减少应该在monster经过终点,被销毁的时候调用,找到那段代码。

这里有一个问题,我们的score是当前脚本的变量,如何在另一个脚本中调用呢。我们这里采取的方案如下

if (Vector3.Distance(wayPoint.GetChild(1).position, transform.position) < 1.0f){Destroy(gameObject);GameObject.Find("Main Camera").GetComponent<CreateTower>().score--;}

因为Unity中,脚本也被视为组件,所以你可以通过查询组件来获得脚本的public变量。

当然你也可以将变量声明为static型,就可以在别的脚本中调用了

score被更新之后,我们需要一个函数来实时把score传入scoreTxt中,这个函数写在CreateTower脚本中

 void UpdateScore(){scoreTxt.text = "Left life:"+score.ToString();if (score < 0){scoreTxt.enabled = false;loseTxt.enabled = true;}}

(在分数低于0之后让scoretxt不可见,让loseTxt可见)

这样我们就得到了一个比较完整的计分系统。(=====好吧我又在骗人了.....)

完整的积分系统应该包括另一个东西,那就是击杀后得分。

但是由于笔者要出门游玩,所以击杀后得分这一块下周回来给大家补全~~

U3D DotH教程3相关推荐

  1. U3D DotH教程2

    <a target=_blank href="http://weibo.com/DoubleIris">微博@卷毛的呈秀波</a> 上回我们已经建立了游戏中 ...

  2. U3d官方教程——2D UFO

    原教程地址https://unity3d.com/cn/learn/tutorials/s/2d-ufo-tutorial 这篇教程将会带你制作一个简单的2DUFO游戏,从而使你了解到许多关于unit ...

  3. UNITY3D 动作游戏开发教程《怪物猎人》

    这期我们开发动作游戏,参考作品是<怪物猎人> 目前更新中,大家可以催更,以便加快进度 视频版:点击进入 Unity3D 动作游戏开发教程<怪物猎人 崛起> 需要一组动作素材导入 ...

  4. U3D如何添加IOS内购,自制内购小插件

    参考资料:http://www.cocoachina.com/bbs/read.php?tid-69165-fpage-2.html 网上很多IAP的教程,但是较少有结合U3D的教程.所以我在此进行简 ...

  5. railgun项目的不足和将来会逐步新增的模块

    问答: Q:这个框架适合做什么类型的游戏? A:适合棋牌类.卡牌类(炉石传说).回合制(梦幻西游).半回合制(阴阳师).暂时不适合即时类游戏(星际争霸.DOTA.LOL.CS) 不足: 1.数据库操作 ...

  6. 2014-Unity3d基础入门到高级全套全系列视频教程

    加入QQ群302040480或加QQ2521238762,免费索取教程 2014-Unity3d基础入门到高级全套全系列视频教程下载: 1.Unity游戏大鬼战斗制作视频教程 2.游戏蛮牛 第二季 U ...

  7. 大屏数据可视化 B端UI设计后台PC网页UI设计U3D+可视化落地教程

    近年来,数据可视化是一个热度比较高的词,数据可视化大屏投放的需求也越来越多. 数据可视化是指将数据以视觉形式来呈现,如图表或地图,以帮助人们了解这些数据的意义. 数据可视化大屏是当前可视化领域的一项热 ...

  8. 逆向教程-游戏中的U3D付费模式分析

    转载请把我博客地址带上:http://blog.csdn.net/sarkozy2014.么么哒 今天xx游戏的时候发现一款在U3D中的支付验证 原软件地址:http://www.yxdown.com ...

  9. u3d 动态 随机 地图_我的世界1.12.2模组教程:VoxelMap小地图新老玩家辅助神器

    大家好,我是小茶,这篇教程给大家带来的是VoxelMap小地图模组的介绍,玩过我的世界的朋友都会觉得有一些不方便的地方,比如: 如何在我的世界里面辨别方向? 如何知道我所处的地形附近有什么建筑? 如何 ...

  10. 不错的U3D第一人称射击类游戏教程

    https://blog.csdn.net/qq_26621551/article/details/52092635

最新文章

  1. ASP.NET MVC 控制器激活(二)
  2. print_r php encode,详细介绍PHP在调试时echo print() print_r() var_dump()的区别分享
  3. JAVA统计字母、数字个数
  4. linux环境内核调试软件,Linux内核调试环境的搭建(使用qemu)
  5. jvm内存溢出分析实践案例:javax.crypto.JceSecurity大量BouncyCastleProvider实例无法被回收
  6. mstsc局域网远程 要预先做的设置
  7. 使用Win Server 2012 R2的IIS创建FTP
  8. 【转载】理解矩阵(一)
  9. 主从同步redis和mysql的区别_mysql主从复制、redis基础、持久化和主从复制
  10. 福禄克OTDR测试为什么要加补偿光纤?
  11. 信号量机制(P,V操作)
  12. python文字游戏攻防_一个简单的孙悟空斗牛魔王的文字游戏
  13. android studio 更换darcula主题中的字体颜色以及常用主题
  14. GBK-unicode对照
  15. 关于单精度浮点型精确位数7~8以及双精度浮点型精确位数15~16的解释
  16. 三层架构与MVC架构
  17. 想转行当程序员,该怎么做?|猿代码科技
  18. iOS 按锁屏后重新打开APP直接退到后台问题
  19. 华远地产:在稳健中穿越周期 | 一点财经
  20. HTML <bdi> 标签

热门文章

  1. matlab如何把cell转int_MATLAB数据类型及相互转换(一)
  2. 使用augpush实现微信内跳转浏览器下载APP(包括apk和ios)的解决方案
  3. 基于GoLang的MMO游戏服务器(四)
  4. HTML与CSS学习
  5. Flutter 桌面应用调研
  6. 创业起步 中小型网吧的组建解决方案(转)
  7. LuoguP2123 皇后游戏
  8. 【面经】五面阿里巴巴达摩院
  9. 义乌中学集训(没打的题慢慢补)
  10. VMware下安装Raspbian树莓派系统