1. 创建地图

  

  如上图所示,白色方块为可以放置塔楼的区域,粉红色区域为敌人的行走区域,绿色方块处为起始点,黄色方块点为终止点。

2. 控制游戏的视野

 public class ViewScript : MonoBehaviour {
public int speed = ; // 方位键灵敏度
public int mouseSpeed = ; // 鼠标中键灵敏度 // Update is called once per frame
// W,A,S,D控制画面左右移动,鼠标中轴控制画面缩放
void Update () {
float h = Input.GetAxis("Horizontal"); // 获取左右键输入
float v = Input.GetAxis("Vertical"); // 获取上下键输入
float mouse = Input.GetAxis("Mouse ScrollWheel"); // 获取鼠标中轴输入
// 摄像头移动
transform.Translate(new Vector3(h * speed, mouse * mouseSpeed, v * speed) * Time.deltaTime, Space.World);
}
}

3. 敌人路径管理

   在地图上每个转折点设置标记,用以表示敌人的运动路径。并设置 WayPoints 类存储路径结点。

 public class WayPoints : MonoBehaviour {
// 存储路径结点方位
public static Transform[] positions; void Awake()
{
positions = new Transform[transform.childCount]; // 初始化路径数组
for (int i = ; i < positions.Length; ++i)
{
positions[i] = transform.GetChild(i); // 存储所有路径结点方位
}
}
}

4. 创建敌人,控制敌人移动

 public class Enemy : MonoBehaviour {
private Transform[] points; // 存储敌人路径
private int index = ; // 存储当前目的地结点序号
public int speed = ; // 敌人速度 // Use this for initialization
void Start () {
points = WayPoints.positions; // 获取路径
} // Update is called once per frame
void Update () {
Move(); // 控制敌人移动
} void Move()
{
// 敌人移动
transform.Translate((points[index].position - transform.position).normalized * Time.deltaTime * speed);
// 若到达目的地,则更新目的地
if (Vector3.Distance(points[index].position, transform.position) < 0.2f)
{
if (index < points.Length - )
{
index++;
}
else
{
reachDis(); // 到达终点
}
}
} void reachDis()
{
// 到达终点后销毁敌人
GameObject.Destroy(this.gameObject);
} void OnDestroy()
{
EnemySpawner.countEnemyAlive--; // 存活敌人个数-1
}
}

5. 创建敌人孵化器管理敌人的生成

 // 自定义每波敌人的参数
[System.Serializable] // 序列化
public class Wave
{
public GameObject enemyPrefab; // 敌人模型
public int count; // 敌人数量
public float rate; // 敌人生成间隔
}
 public class EnemySpawner : MonoBehaviour {
public Wave[] waves; // 定义每波敌人参数
public Transform start; // 敌人出生点
public int waveRate = ; // 每波敌人生成间隔
public static int countEnemyAlive = ; // 生存敌人个数 // Use this for initialization
void Start () {
StartCoroutine(SpawnEnemy()); // 启动线程
} IEnumerator SpawnEnemy()
{
foreach(Wave wave in waves) // 遍历每一波敌人
{
for (int i = ; i < wave.count; ++i) // 生成每个敌人
{
// 生成敌人
GameObject.Instantiate(wave.enemyPrefab, start.position, Quaternion.identity);
countEnemyAlive++; // 生存敌人个数+1
if (i != wave.count - ) // 敌人生成间隔
yield return new WaitForSeconds(wave.rate);
}
while (countEnemyAlive > ) // 上一波敌人全部死亡后,才能生成下一波敌人
{
yield return ;
}
yield return new WaitForSeconds(waveRate); // 等待生成下一波敌人
}
}
}

塔防游戏 Day1的更多相关文章

  1. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l  说说游戏中各种角色的动作.属性以及重构思路 l  进行代码重构让色狼大叔和 ...

  2. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l  说说关于cocos2dx手机分辨率适配 l  对前一篇完成的塔防游戏原型进 ...

  3. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)

    一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l  说说关于塔防游戏的想法和思路 l  实现一个简单的塔防游戏 ...

  4. 三国塔防游戏android源码

    三国塔防游戏源码,这个游戏源码比较完整的,因为上传有20M限制,把代码工程包分开了,主文件是TFGame,其他res大家按照安卓包加进去就行,欢迎下载并交流 ,大家可以参考一下吧.<ignore ...

  5. HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box

    h3{ font-size:20px; } HTML5塔防游戏--<三国塔防> 游戏介绍: <三国塔防>是一款基于HTML5和Javascript的2D塔防游戏.游戏中除了塔防 ...

  6. HTML5另类塔防游戏 -《三国战线》公布

    关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...

  7. [译]终极塔防——运用HTML5从头创建一个塔防游戏

    翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...

  8. 使用Unity创建塔防游戏(Part2)

    How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...

  9. 使用Unity创建塔防游戏(Part1)

    How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...

随机推荐

  1. 每天一个linux命令:【转载】ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  2. 51nod 1244 莫比乌斯函数之和 【杜教筛】

    51nod 1244 莫比乌斯函数之和 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含 ...

  3. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

      此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...

  4. REST服务开发实战【转】

    原文:http://kb.cnblogs.com/page/91827/ REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(htt ...

  5. server 2012系统更改电脑密码

    在server2012系统中将鼠标指针移至任务栏右侧,在弹出的操作栏中单击“设置”选项.   在打开的设置操作界面中,鼠标单击“控制面板”选项.     在打开的控制面板选项窗口中,单击“管理工具”选 ...

  6. PHP RSA加签的实现过程

    一.得到私钥文件mycert.key 2.从pfx提取密钥信息,并转换为key格式(pfx使用pkcs12模式补足) (1)提取密钥对 openssl pkcs12 -in 1.pfx -nocert ...

  7. bzoj1588[HNOI2002]营业额统计——双向链表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1588 简单Splay.但用双向链表做.很好的思路. 1.(离线)按值排序,记下pre和nxt ...

  8. 解决ueditor中没法动态配置imageurlprefix的方法

    [建议使用右边文章中的方法,本篇文章没有真正的解决问题](新)解决php版本ueditor中动态配置图片URL前缀(imageurlprefix)的方法 修改背景,由于后台图片是上传到挂载的静态资源磁 ...

  9. clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案

    clientHeight , scrollHeight , offsetHeight相信每个人都用过,可是每次用都要查一下到底哪个是文档大小哪个是视口大小,还有头疼的兼容问题. 先来官方的了解一下这三 ...

  10. java代码--------实现随机输出100个随机数,10行,0--到9的数字

    总结:妹纸不是那么会表述,如有不妥之处,请提出来 package com.sads; //杰伦的世界 //实现在0-100个数中,随机输出数每行10个数,也就是10行10列,这些数在0---到9之间 ...