/// <summary> /// 根据类型,生成一组怪物 /// </summary> /// <param name="type"></param> private void SpawnBotGroup(BotGroup.Type type) { float speed = spawnNextSpeed; Vector3 spawnPos; spawnPos = character.transform.position; spawnPos.z += spawnPosOffect; switch (spawnGroupTypeCurrent) { case BotGroup.Type.Slow: { speed = 1.0f; } break; case BotGroup.Type.Normal: { speed = spawnNextSpeed; } break; } BotGroup botGroup = GameObject.Instantiate <BotGroup>(botGroupPrefab); //怪物组生成的Y轴位置处于自身碰撞盒范围的一半 var extents = botGroup.GetComponent <Collider>().bounds.extents; spawnPos.y = extents.y / 2; botGroup.transform.position = spawnPos; //怪物组生成内部怪物 botGroup.SpawnBot(spawnBotNum); botGroup.runSpeed = speed; }
public void UpdateNextGroupType() { //还有要生成的正常怪物时,先生成正常怪物 if (spawnNormalCount > 0) { float rate; //用于计算10个以内的怪物加速 rate = (float)botGroupCount / 10.0f; rate = Mathf.Clamp01(rate); //砍杀的怪物越多,下一批怪物的速度也越快, //通过rate,来在最大和最小速度间插值,使得下一波的速度,与当前击杀怪物数量成正比 spawnNextSpeed = Mathf.Lerp(spawnNextSpeedMin, spawnNextSpeedMax, rate); //砍杀的怪物越多,下一批怪物的来的也会越快, //通过rate,来在最大和最小位置偏移中插值,使得下一波怪物到来的偏移位置,与当前击杀怪物数量成反比 spawnLineNextOffect = Mathf.Lerp(spawnLineNextOffectMax, spawnLineNextOffectMin, rate); spawnNormalCount--; if (spawnNormalCount <= 0) { //当普通型怪物都生成完后,随机一种增强型怪物 spawnGroupTypeNext = (BotGroup.Type)Random.Range(1, 1); spawnIncreaseCount = 1; } return; } }
public void GameLoop() { //准备生成一波怪物组 if (!canSpawnNewGroup) { canSpawnNewGroup = true; if (canSpawnNewGroup) { // 通过玩家的当前位置计算玩家触发生成怪物组的触发位置 if (spawnGroupTypeNext == BotGroup.Type.Normal) { spawnLine = character.transform.position.z + spawnLineNextOffect; } else if (spawnGroupTypeNext == BotGroup.Type.Slow) { spawnLine = character.transform.position.z + 50.0f; } } } //////////////////////////////////////////////////////////////// // 当玩家没有到达触发位置时,不生成任何怪物组 if (character.transform.position.z <= spawnLine) { return; } //实际开始生成怪物组 spawnGroupTypeCurrent = spawnGroupTypeNext; SpawnBotGroup(spawnGroupTypeCurrent); // 更新下次出现分组时的怪物数量 spawnBotNum++; spawnBotNum = Mathf.Min(spawnBotNum, spawnBotNumMax); botGroupCount++; canSpawnNewGroup = false; //刷新下波怪物组的类型 UpdateNextGroupType(); }