Unity-塔防游戏之怪物波次简单算法

   塔防游戏是非常经典的游戏 它的玩法也比较简单 一波接着一波的怪物出来  怪物沿着固定的路线行走 玩家需要控制攻击塔在怪物到达终点时 将它消灭 否则 到达终点的怪物超过一定的数量 玩家就输了 


一、每一波的怪物的属性是不同的 比如说 它的移动速度 生命值、怪物数量等。 

二、需要设置一共多小波 每一波出现的时间间隔 每一波怪物间的间隔


让我们开始吧:

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;

}

}

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 我算是韩寒的粉丝了,一直以来比较喜欢他的文字风格和处世态度,看《后会无期》的时候是大三暑假在北京实习,当时和同班同...
    杰米心理阅读 468评论 0 2
  • 取悦不是讨好 是正视自己的热爱来积极的影响自己 它不一定能兑现 却能让自己养成可贵的特质 1 知乎上看见一个讨论,...
    蜜思琳的世界阅读 326评论 0 0
  • 列星相随,日月递照,四时代御,明君、昏君一代代更迭,明臣奸臣一代代转换,阴谋阳谋、大度小器、残忍狠毒,那个时代永远...
    想和小鱼一起游阅读 301评论 1 2