コード例 #1
0
    public void Die()//смерть персонажа
    {
        die  = true;
        XPos = gameObject.transform.position.x;
        //smoke = Instantiate(Smoke, new Vector3(XPos, transform.position.y + 0.5F), gameObject.transform.rotation);//создание дымки после смерти
        GameObject smoke = PoolManager.GetObject(Smoke.name, new Vector3(XPos, transform.position.y + 0.5F), transform.rotation);
        int        k     = 0;

        while (k < PlusFireColb)//генерирование огоньков в зависимости от указанаого в префабе значения
        {
            FireSphere firesphere = PoolManager.GetObject(FireSpherePrefab.name, new Vector2(XPos, transform.position.y + 0.5F), FireSpherePrefab.transform.rotation).GetComponent <FireSphere>();
            firesphere.CheckPlayer = true;//чтобы как только огоньки упадут с моба, сразу летели к игроку
            XPos += 0.2F;
            k++;
        }
        speed = 0;
        StartCoroutine(ForDie());
    }
コード例 #2
0
    void Update()
    {
        if (forgen == null)
        {
            if (GameObject.Find("Player"))
            {
                forgen = GameObject.Find("Player").GetComponent <Character>().transform.Find("Generator").GetComponent <ForGen>();
            }
            else if (GameObject.Find("Player2(Clone)"))
            {
                forgen = GameObject.Find("Player2(Clone)").GetComponent <Character>().transform.Find("Generator").GetComponent <ForGen>();
            }
            else if (GameObject.Find("Player3(Clone)"))
            {
                forgen = GameObject.Find("Player3(Clone)").GetComponent <Character>().transform.Find("Generator").GetComponent <ForGen>();
            }
            else
            {
                Debug.Log("error!");
            }
        }

        switch (lvl)
        {
        case 1:
        {
            if (forgen.transform.position.x - zaderzka > LastPos + 0.5)
            {
                if (RndCol < 1)
                {
                    RndY = rnd.Next(7);  //7 вида высоты
                    switch (RndY)        //выбор высоты генерации
                    {
                    case 0: YPos = 0F; break;

                    case 1: YPos = 2F; break;

                    case 2: YPos = 4F; break;

                    case 3: YPos = 6F; break;

                    case 4: YPos = -1F; break;                             //будет пусто

                    case 5: YPos = -1F; break;                             //будет пусто

                    case 6: YPos = -1F; break;                             //будет пусто
                    }
                    YPos   = YPos + (float)(rnd.NextDouble()) / 2 + 0.25F; //от 0,25 до 0,75
                    RndCol = rnd.Next(4) + 2;                              //максимально на 1 высоте
                }
                RndCol--;

                XPos = forgen.transform.position.x - zaderzka;
                //круг вокруг нижней линии персонажа. если в него попадают колайдеры то массив заполняется ими
                Collider2D[] colliders   = Physics2D.OverlapCircleAll(new Vector2(XPos, YPos - 0.5F), 0.2F);
                Collider2D[] nocolliders = Physics2D.OverlapCircleAll(new Vector2(XPos, YPos), 0.2F);        //чтобы на месте создания не было коллайдеров

                if ((colliders.Length > 0) && (nocolliders.Length == 0) && (YPos > minY) && (YPos < maxY))   //проверка на близость других коллайдеров и существование высоты
                {
                    FireSphere firesphere = PoolManager.GetObject(FireSpherePrefab.name, new Vector2(XPos, YPos), FireSpherePrefab.transform.rotation).GetComponent <FireSphere>();
                }
                LastPos = forgen.transform.position.x - zaderzka;
            }
            break;
        }

        case 2:
        {
            if (forgen.transform.position.x - zaderzka > LastPos + 0.5)
            {
                if (RndCol < 1)
                {
                    RndY = rnd.Next(7);  //7 вида высоты
                    switch (RndY)        //выбор высоты генерации
                    {
                    case 0: YPos = 12F; break;

                    case 1: YPos = 14F; break;

                    case 2: YPos = 16F; break;

                    case 3: YPos = 18F; break;

                    case 4: YPos = -1F; break;                             //будет пусто
                    }
                    YPos   = YPos + (float)(rnd.NextDouble()) / 2 + 0.25F; //от 0,25 до 0,75
                    RndCol = rnd.Next(4) + 2;                              //максимально на 1 высоте
                }
                RndCol--;
                XPos = forgen.transform.position.x - zaderzka;

                Collider2D[] nocolliders = Physics2D.OverlapCircleAll(new Vector2(XPos, YPos), 0.4F);

                if ((nocolliders.Length == 0) && (YPos > minY) && (YPos < maxY))        //проверка на близость других коллайдеров и существование высоты
                {
                    FireSphere firesphere = PoolManager.GetObject(FireSpherePrefab.name, new Vector2(XPos, YPos), FireSpherePrefab.transform.rotation).GetComponent <FireSphere>();
                }
                LastPos = forgen.transform.position.x - zaderzka;
            }
            break;
        }

        case 3:
        {
            if (forgen.transform.position.x - zaderzka > LastPos + 0.5)
            {
                if (RndCol < 1)
                {
                    RndY = rnd.Next(7);  //7 вида высоты
                    switch (RndY)        //выбор высоты генерации
                    {
                    case 0: YPos = 22F; break;

                    case 1: YPos = 24F; break;

                    case 2: YPos = 26F; break;

                    case 3: YPos = 28F; break;

                    case 4: YPos = -1F; break;                             //будет пусто

                    case 5: YPos = -1F; break;                             //будет пусто

                    case 6: YPos = -1F; break;                             //будет пусто

                    case 7: YPos = -1F; break;                             //будет пусто

                    case 8: YPos = -1F; break;                             //будет пусто

                    case 9: YPos = -1F; break;                             //будет пусто
                    }
                    YPos   = YPos + (float)(rnd.NextDouble()) / 2 + 0.25F; //от 0,25 до 0,75
                    RndCol = rnd.Next(4) + 1;                              //максимально на 1 высоте
                }
                RndCol--;
                XPos = forgen.transform.position.x - zaderzka;


                if ((YPos > minY) && (YPos < maxY))        //проверка на близость других коллайдеров и существование высоты
                {
                    FireSphere firesphere = PoolManager.GetObject(FireSpherePrefab.name, new Vector2(XPos, YPos), FireSpherePrefab.transform.rotation).GetComponent <FireSphere>();
                }
                LastPos = forgen.transform.position.x - zaderzka;
            }
            break;
        }
        }
    }