塔防游戏是非常经典的游戏 它的玩法也比较简单 一波接着一波的怪物出来 怪物沿着固定的路线行走 玩家需要控制攻击塔在怪物到达终点时 将它消灭 否则 到达终点的怪物超过一定的数量 玩家就输了
一、每一波的怪物的属性是不同的 比如说 它的移动速度 生命值、怪物数量等。
二、需要设置一共多小波 每一波出现的时间间隔 每一波怪物间的间隔
让我们开始吧:
1. 先确定好两个位置 一个是怪物出现的位置 一个是怪物行走的终点位置
2. 创建怪物预设体 给怪物加上控制脚本 代码如下:
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
usingUnityEngine.AI;
// 波次结构体
public struct Wave
{
//波次间隔
public float waveInterval;
//怪物间隔
public float monsterInterval;
//怪物个数
public int monsterCount;
//怪物移动速度
public float monsterSpeed;
//怪物血量
public float monsterHealth;
}
public class MonsterInit:MonoBehaviour{
//怪物出生点
publicTransformbegin;
//怪物预设体
public GameObject monsterPrefab;
//波次
public int waveCount=10;
//波次数组
public Wave[] waves;
//可以初始化
private bool canInit=true;
//计数器、计时器
private float waveTimer=0;
private float monsterTimer=0;
private int waveIndex=0;
private int monsterIndex=0;
void Awake()
{
// 初始化数组
waves=new Wave[waveCount];
}
思路如下:每一波的怪物会越来越强 那么我我就以第一波为为基础 然后在循环设置接下来的每一波 每一波在每一波的基础上去增强属性。
voidStart()
{
//设置第一波怪的信息
waves[0].waveInterval=5f;
waves[0].monsterInterval=1.5f;
waves[0].monsterCount=5;
waves[0].monsterSpeed=0.3f;
waves[0].monsterHealth=100;
for(inti=1;i<waves.Length;i++)
{
waves[i].waveInterval=waves[0].waveInterval-i*0.1f;
waves[i].monsterInterval=waves[0].monsterInterval-i*0.1f;
waves[i].monsterCount=waves[0].monsterCount+i;
waves[i].monsterSpeed=waves[0].monsterSpeed+i*0.2f;
waves[i].monsterHealth=waves[0].monsterHealth+i*10f;
}
}
//Updateiscalledonceperframe
voidUpdate(){
if(!canInit)
return;
waveTimer+=Time.deltaTime;
if(waveTimer>=waves[waveIndex].waveInterval)
{
//如果当期波次的怪物没有生成完毕
if(monsterIndex<waves[waveIndex].waveInterval)
//怪物计时器计时
monsterTimer+=Time.deltaTime;
if(monsterTimer>=waves[waveIndex].monsterInterval){
GameObjectcurrentMonster=Instantiate(monsterPrefab,begin.position,Quaternion.identity);
//设置怪物导航速度
currentMonster.GetComponent().speed=waves[waveIndex].monsterSpeed;
//怪物计数器++
monsterIndex++;
//怪物计时器归零
monsterTimer=0;
//Debug.Log("初位置"+begin.position);
}
}
else
{
//波次++
waveIndex++;
//怪物计数器归零
monsterIndex=0;
//波次计时器归零
waveTimer=0;
//怪物计时器归零
monsterTimer=0;
if(waveIndex>=waveCount){
canInit=false;
}
}
}
}
}