塔防游戏 Day1
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的更多相关文章
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l 说说游戏中各种角色的动作.属性以及重构思路 l 进行代码重构让色狼大叔和 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l 说说关于cocos2dx手机分辨率适配 l 对前一篇完成的塔防游戏原型进 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)
一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l 说说关于塔防游戏的想法和思路 l 实现一个简单的塔防游戏 ...
- 三国塔防游戏android源码
三国塔防游戏源码,这个游戏源码比较完整的,因为上传有20M限制,把代码工程包分开了,主文件是TFGame,其他res大家按照安卓包加进去就行,欢迎下载并交流 ,大家可以参考一下吧.<ignore ...
- HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box
h3{ font-size:20px; } HTML5塔防游戏--<三国塔防> 游戏介绍: <三国塔防>是一款基于HTML5和Javascript的2D塔防游戏.游戏中除了塔防 ...
- HTML5另类塔防游戏 -《三国战线》公布
关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...
- [译]终极塔防——运用HTML5从头创建一个塔防游戏
翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...
- 使用Unity创建塔防游戏(Part2)
How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
随机推荐
- 10day2
最多因子数 搜索 [问题描述] 数学家们喜欢各种类型的有奇怪特性的数.例如,他们认为 945 是一个有趣的数,因为它是第一个所有约数之和大于本身的奇数. 为了帮助他们寻找有趣的数,你将写一个程序扫描一 ...
- HDU - 5324:Boring Class (CDQ分治&树状数组&最小字典序)
题意:给定N个组合,每个组合有a和b,现在求最长序列,满足a不升,b不降. 思路:三位偏序,CDQ分治. 但是没想到怎么输出最小字典序,我好菜啊. 最小字典序: 我们倒序CDQ分治,ans[i]表 ...
- hiho1613 墨水滴
对不起,太弱了.................想了一下午
- ios 视图切换翻页效果
本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...
- UVA11538 Chess Queen
题意 给一个\(n \times m\)的棋盘,输出有多少种方法放置两个互相攻击的皇后. \(n,m \leq 10^6\) 分析 参照刘汝佳的题解. 横.竖.斜三种情况互不相干,加法原理统计. 横竖 ...
- Cache应用中的服务过载案例研究
https://tech.meituan.com/avalanche-study.html
- ballerina 学习十一 Packages
ballerina 的包还是比较简单的,实际上就是对于源码文件集合的管理,同时我们可以添加别名,同时可以进行 其他包的引用 import 简单例子 代码 import ballerina/math; ...
- lapis 基本开发
1. 生成项目代码 // 支持lua 以及 moonscript, 默认是moonscript 通过--lua 可以生成lua 的代码 lapis new --lua ├── app.lua ├── ...
- servlet运作机制
最近研究zipkin,在研究客户端brave的时候,才算开始理解servlet了. servlet只是tomcat被实例化一次: 之后每次访问其实都是对同一个servlet示例操作:所以, ...
- awk&sed 小实例
1.打印文件奇数行sed -n 'p;n'sed 'n;d' sed -n '$!N;P'sed -n '1~2p'awk 'i=!i'awk 'NR%2'2.打印文件偶数行sed -n 'n;p's ...