无限游戏模式简单实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }
}

猜你喜欢

转载自blog.csdn.net/osuckseed/article/details/85160878
今日推荐