版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/osuckseed/article/details/85160878
涉及到的游戏概念以及一些基础知识:
游戏中的Start
游戏中的Update
基础类型:bool,int ,string
内存队列类型:List
自定义类型:class
Time.frameCount
Time.deltaTime
using PathologicalGames;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class FinityWarDataMgr:DataInst<FinityWarDataMgr>
{
//是否是无尽模式
public bool IsFinity=false;
//已经配置好的队列随机调用(预制)
List<string> EnemyGroupList = new List<string>();
//单独取出boss的配置
List<string> EnemyGroupBossList = new List<string>();
//点击无限模式按钮调用
public void FinityWarInit()
{
//进入无限模式初始化数据
FinityWarDataMgr.inst.FinityDuringTime = 1;
IsFinity = true;
}
/// <summary>
/// 无限模式update
/// </summary>
public void FinityWarExecute()
{
FinityWarUpdate();
}
//退出无限模式
public void FinityWarExit()
{
}
private float finityDuringTime = 1;
//无限模式持续时间
public float FinityDuringTime
{
get
{
return finityDuringTime;
}
set
{
finityDuringTime = value;
}
}
int frameLv = 120;
//刷怪频率 90帧/1波怪
public int FrameLv
{
get
{
return frameLv;
}
set
{
frameLv = value;
}
}
public int LevelDiffcute
{
get
{
return (FinityDuringTime / 25).ToInt();
}
}
//最大出怪数量
public int MaxEnemyNum = 1;
/// <summary>
///
/// </summary>
/// <param name="_index"></param>
/// <param name="_arry"></param>
/// <param name="_type">0普通怪物 1精英 2炮台 3Boss</param>
public void CreateEnumy(string _name,Vector2 _pos, int _type = 0, int _limitCount = 10)
{
ThreeToOneManager.Inst.AddGameObjectPool(UserInfo.Inst.myPoolManager, _name, "AICars/{0}".TTOFormat(_name), _limitCount);
var ts = UserInfo.Inst.myPoolManager.Spawn(_name);
var enemy = ts.GetComponent<AICar>();
if (enemy != null)
{
if (_type == 0)
{
enemy.speed = enemy.speed + LevelDiffcute *0.01f;
//enemy.blood = 1 + 10 * LevelDiffcute;
}
//else if (_type == 2)
//{
// enemy.enemySpeed = 5;
// enemy.blood = 500 + 100 * LevelDiffcute;
//}
//else if (_type == 1)
//{
// enemy.enemySpeed = 10 + LevelDiffcute / 10;
// enemy.blood = 1000 + 100 * LevelDiffcute;
//}
//else if (_type == 3)
//{
// enemy.blood = 5000 + 1000 * LevelDiffcute;
//}
//else
//{
// enemy.enemySpeed = 12 + LevelDiffcute / 10;
//}
}
ts.position = _pos;
}
public void FinityWarUpdate()
{
FinityDuringTime += Time.deltaTime;
if (Time.frameCount % 250 == 0)
{
FinityWarDataMgr.Inst.FrameLv -= 1;
Debug.Log("frame is {0}".TTOFormat(FinityWarDataMgr.Inst.FrameLv));
MaxEnemyNum = Random.Range(1,5);
}
if (FinityWarDataMgr.Inst.FrameLv < 30)
{
FinityWarDataMgr.Inst.FrameLv = 30;
}
//特色boss enemyGroup
if (Time.frameCount % FinityWarDataMgr.Inst.FrameLv == 0)
{
if (EnemyGroupList.Count <= 0)
{
EnemyGroupList = ThreeToOneManager.Inst.GetEnemyGroup("/Resources/AICars/");
}
var maxCount = EnemyGroupList.Count;
var curIndex = (LevelDiffcute + 1) * 10;
var randStart = LevelDiffcute*5;
if (curIndex >= maxCount)
{
curIndex = maxCount - 1;
}
//if (randStart >= maxCount - 20)
//{
// randStart = maxCount - 20;
//}
if (randStart > maxCount-20)
{
randStart = maxCount - 20;
}
var gIndex = UnityEngine.Random.Range(randStart, curIndex);
var curPrefabName = EnemyGroupList[gIndex].Replace('\\', '/').Replace("/Resources/", "");
var pName = curPrefabName.Substring(curPrefabName.LastIndexOf('/') + 1, curPrefabName.Length - curPrefabName.LastIndexOf('/') - 1);
//if ("EnemyBorn/" + pName == curPrefabName)
//{
// return;
//}
if (pName.Contains("Hero"))
{
return;
}
if (pName.Contains("Obstacle"))
{
return;
}
if (pName.Contains("truck"))
{
return;
}
for (int i = 0; i < MaxEnemyNum; i++)
{
var posX = RandomTo4(0);
var posY = RandomTo7(0);
CreateEnumy(pName, new Vector2(posX, posY));
}
}
}
//int[] randSeeds = new int[] { -3,0,7,9};
int RandomTo4(int _pos)
{
_pos= UnityEngine.Random.Range(-9, 10);
if (_pos % 4 != 0)
{
_pos = RandomTo4(_pos);
//Debug.Log("");
}
return _pos;
}
int RandomTo7(int _pos)
{
_pos = UnityEngine.Random.Range(27, 50);
if(_pos % 7 !=0)
{
_pos = RandomTo7(_pos);
}
return _pos;
}
}