Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > 2D/GUI

2D/GUI Вопросы на тему 2D графики и интерфейсов

Ответ
 
Опции темы
Старый 28.09.2020, 05:51   #31
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от pax Посмотреть сообщение
Челендж я принял, но это первый и последний черелндж) Видео с готовым хелсбаром в аттаче. Управляется тем же скриптом, что я приводил выше. Вероятнее всего кодом данная штука будет работать чуть быстрее, но не уверен, но настройка цвета кодом конечно удобнее. Можно заморочиться и написать скрипт, применяющий к спрайту цвет на основе двух параметров и анимировать эти два параметра вместо цвета и прозрачности, тогда можно будет задавать цвет снаружи. А сейчас цвет баров зашит в анимациях.

В результате получилось 4 анимации (анимация движения линии вверх-вниз, анимация прозрачности, анимация для перемещения квадратиков и собственно анимация состояния хэлсбара). Анимация прозрачности используется как на линиях, так и на квадратиках. Пришлось для каждой линии сделать копию контроллера анимации и настроить немного по разному скорости воспроизведения анимаций, чтобы получилось так же как у тебя. Тоже самое сделал для квадратиков. Анимация состояния хэлсбара управляет цветом линий и квадратиков (без прозрачности), а так же их масштабом. Плюс она двигает спрайты "скобок".
Моё почтение! Довольно близко к оригиналу, потратить на это ещё
столько же времени, и думаю будет один в один. Челлендж выполнен
быстрее, чем я расчитывал! Лично мне ты всё доказал с анимациями.
Только я думал анимаций меньше будет использоваться )
Немного шлифануть, чуть докодить, и это сэкономило бы
мне много строк кода.

А теперь внимание, барабанная дробь, и на экране
появляются магические числа без комментариев:


public class KrestAnimation : MonoBehaviour
{
    public Transform Krest;
    public Transform RKrest;
    public Transform LKrest;

    public Transform HPLine1;
    public Transform HPLine2;
    public Transform HPLine3;
    public Transform HPLine4;
    public Transform HPLine5;
    public Transform Begunok1;
    public Transform Begunok2;
    public Transform B2ML;
    public Transform B2MR;
    public Transform B1ML;
    public Transform B1MR;

    public Vector3 V100HPLine1 = new Vector3(2f, 0.03f, 1f);
    public Vector3 V100HPLine2 = new Vector3(2f, 0.01f, 1f);
    public Vector3 V100HPLine3 = new Vector3(2f, 0.05f, 1f);
    public Vector3 V100HPLine4 = new Vector3(2f, 0.005f, 1f);
    public Vector3 V100HPLine5 = new Vector3(2f, 0.02f, 1f);

    public Color Ucolor;

    public float Timer = 0.1f;

    private int L1Sost = 0;
    private float L1Stady = 0;
    private float L1Dist;

    private int L2Sost = 0;
    private float L2Stady = 0;
    private float L2Dist;

    private int L3Sost = 0;
    private float L3Stady = 0;
    private float L3Dist;

    private int L4Sost = 0;
    private float L4Stady = 0;
    private float L4Dist;

    private int L5Sost = 0;
    private float L5Stady = 0;
    private float L5Dist;

    public int B1Sost = 0;
    public float B1Stady = 0f;
    public int B2Sost = 0;
    public float B2Stady = 0f;


    public float MAXHP = 1000f;
    public float HP = 1000f;
    public float HPlast = 1000f;
    public float HPProcent = 0f;

    public int KrestAktivator = 0;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Timer = Timer - 0.1f * Time.time;

        if (Timer <= 0f)
        {
                // Управление размерами и цветом HPLine
                if (HP != HPlast)
            {

                if (HP < 1f && KrestAktivator == 0)
                {
                    RKrest.gameObject.SetActive(false);
                    LKrest.gameObject.SetActive(false);
                    Krest.gameObject.SetActive(true);

                    KrestAktivator = 1;
                }

                if (HP > 0f && KrestAktivator == 1)
                {
                    Krest.gameObject.SetActive(false);
                    RKrest.gameObject.SetActive(true);
                    LKrest.gameObject.SetActive(true);


                    KrestAktivator = 0;
                }


                if (HP < HPlast || HP > HPlast)
                {
                    HPProcent = HP * 100f / MAXHP;
                    HPProcent = HPProcent / 100f;
                    HPLine1.transform.localScale = new Vector3(2f * HPProcent, 0.03f, 1f);
                    HPLine2.transform.localScale = new Vector3(2f * HPProcent, 0.01f, 1f);
                    HPLine3.transform.localScale = new Vector3(2f * HPProcent, 0.05f, 1f);
                    HPLine4.transform.localScale = new Vector3(2f * HPProcent, 0.005f, 1f);
                    HPLine5.transform.localScale = new Vector3(2f * HPProcent, 0.02f, 1f);

                    RKrest.transform.localPosition = new Vector3(-1f * HPProcent, 0f, 0f);
                    LKrest.transform.localPosition = new Vector3(1f * HPProcent, 0f, 0f);


                    if (((HP * 100f) / MAXHP > 79f) && ((HP * 100f) / MAXHP) < 101f)
                    {
                        Ucolor = (HPLine4.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;

                        HPProcent = 20f - (100f - ((HP * 100f) / MAXHP));
                        Debug.Log("Процент Линии 4: " + HPProcent);
                        Ucolor = (HPLine4.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (HPProcent * 0.05f);
                        Ucolor.b = (HPProcent * 0.05f);
                        (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) < 80f)
                    {
                        Ucolor = (HPLine4.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (0f);
                        Ucolor.b = (0f);
                        (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;
                    }



                    if (((HP * 100f) / MAXHP > 59f) && ((HP * 100f) / MAXHP) < 80f)
                    {
                        Ucolor = (HPLine2.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;

                        HPProcent = 20f - (80f - ((HP * 100f) / MAXHP));

                        Debug.Log("Процент Линии 2: " + HPProcent);
                        Ucolor = HPLine2.GetComponent<Renderer>().material.color;
                        Ucolor.r = 1f;
                        Ucolor.g = (HPProcent * 0.05f);
                        Ucolor.b = (HPProcent * 0.05f);
                        HPLine2.GetComponent<Renderer>().material.color = Ucolor;
                    }

                    if (((HP * 100f) / MAXHP) < 60f)
                    {
                        Ucolor = (HPLine2.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (0f);
                        Ucolor.b = (0f);
                        (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) > 80f)
                    {
                        Ucolor = (HPLine2.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;
                    }





                    if (((HP * 100f) / MAXHP > 39f) && ((HP * 100f) / MAXHP) < 60f)
                    {
                        Ucolor = (HPLine5.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;

                        HPProcent = 20f - (60f - ((HP * 100f) / MAXHP));

                        Ucolor = (HPLine5.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (HPProcent * 0.05f);
                        Ucolor.b = (HPProcent * 0.05f);
                        (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) < 40f)
                    {
                        Ucolor = (HPLine5.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (0f);
                        Ucolor.b = (0f);
                        (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) > 60f)
                    {
                        Ucolor = (HPLine5.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;
                    }


                    if (((HP * 100f) / MAXHP > 19f) && ((HP * 100f) / MAXHP) < 40f)
                    {
                        Ucolor = (HPLine1.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;

                        HPProcent = 20f - (40f - ((HP * 100f) / MAXHP));

                        Ucolor = (HPLine1.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (HPProcent * 0.05f);
                        Ucolor.b = (HPProcent * 0.05f);
                        (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) < 20f)
                    {
                        Ucolor = (HPLine1.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (0f);
                        Ucolor.b = (0f);
                        (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) > 40f)
                    {
                        Ucolor = (HPLine1.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;
                    }





                    if (((HP * 100f) / MAXHP >= 0f) && ((HP * 100f) / MAXHP) < 20f)
                    {
                        Ucolor = (HPLine3.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;

                        HPProcent = 20f - (20f - ((HP * 100f) / MAXHP)); ;

                        Ucolor = (HPLine3.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (HPProcent * 0.05f);
                        Ucolor.b = (HPProcent * 0.05f);
                        (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) == 0f)
                    {
                        Ucolor = (HPLine3.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = (0f);
                        Ucolor.b = (0f);
                        (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;
                    }
                    if (((HP * 100f) / MAXHP) > 20f)
                    {
                        Ucolor = (HPLine3.GetComponent<Renderer>().material.color);
                        Ucolor.r = 1f;
                        Ucolor.g = 1f;
                        Ucolor.b = 1f;
                        (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;
                    }




                    HPProcent = 0f;
                    HPlast = HP;
                }


                if (HP >= MAXHP)
                {
                    HPLine1.transform.localScale = V100HPLine1;
                    HPLine2.transform.localScale = V100HPLine2;
                    HPLine3.transform.localScale = V100HPLine3;
                    HPLine4.transform.localScale = V100HPLine4;
                    HPLine5.transform.localScale = V100HPLine5;

                    RKrest.transform.localPosition = new Vector3(-1f, 0f, 0f);
                    LKrest.transform.localPosition = new Vector3(1f, 0f, 0f);

                    HP = MAXHP;
                    HPlast = MAXHP;
                }

                if (HP < 0)
                {
                    HPLine1.transform.localScale = new Vector3(0f * HPProcent, 0.03f, 1f);
                    HPLine2.transform.localScale = new Vector3(0f * HPProcent, 0.01f, 1f);
                    HPLine3.transform.localScale = new Vector3(0f * HPProcent, 0.05f, 1f);
                    HPLine4.transform.localScale = new Vector3(0f * HPProcent, 0.005f, 1f);
                    HPLine5.transform.localScale = new Vector3(0f * HPProcent, 0.02f, 1f);

                    RKrest.transform.localPosition = new Vector3(0f, 0f, 0f);
                    LKrest.transform.localPosition = new Vector3(0f, 0f, 0f);

                    HP = 0;
                    HPlast = 0;
                }



            }

            // Конец управления размерами и цветом HPLine.

            // Управление HPLine1


            Ucolor = (HPLine1.GetComponent<Renderer>().material.color);

            if (L1Sost == 1)
            {
                if (Ucolor.a > 0.99f)
                {
                    L1Sost = 0;
                    Ucolor.a = 1f;
                    (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L1Sost == 0)
            {
                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.005f;
                    (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L1Sost == 1)
            {

                if (Ucolor.a < 10f)
                {
                    Ucolor.a = Ucolor.a + 0.005f;
                    (HPLine1.GetComponent<Renderer>().material.color) = Ucolor;

                }
            }

            if (Ucolor.a <= 0f && L1Sost == 0)
            {
                L1Sost = 1;
            }

            L1Dist = Vector3.Distance(HPLine1.transform.position, Krest.transform.position);

            if (L1Dist > 0f && L1Stady == 2)
            {
                HPLine1.transform.Translate(Vector3.down * 0.001f);

                L1Dist = Vector3.Distance(HPLine1.transform.position, Krest.transform.position);

                if (L1Dist >= 0.18f)
                {
                    L1Stady = 1;
                }
            }

            if (L1Dist > 0f && L1Stady == 1)
            {
                HPLine1.transform.Translate(Vector3.up * 0.001f);

                L1Dist = Vector3.Distance(HPLine1.transform.position, Krest.transform.position);

                if (L1Dist >= 0.18f)
                {
                    L1Stady = 2;
                }
            }


            if (L1Dist < 0.18f && L1Stady == 0)
            {
                HPLine1.transform.Translate(Vector3.down * 0.001f);

                L1Dist = Vector3.Distance(HPLine1.transform.position, Krest.transform.position);

                if (L1Dist >= 0.18f)
                {
                    L1Stady = 1;
                }
            }

            // Конец управления HPLine1.

            // Управление HPLine2

            Ucolor = (HPLine2.GetComponent<Renderer>().material.color);

            if (L2Sost == 1)
            {
                if (Ucolor.a > 0.99f)
                {
                    L2Sost = 0;
                    Ucolor.a = 1f;
                    (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L2Sost == 0)
            {
                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.01f;
                    (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L2Sost == 1)
            {

                if (Ucolor.a < 10f)
                {
                    Ucolor.a = Ucolor.a + 0.01f;
                    (HPLine2.GetComponent<Renderer>().material.color) = Ucolor;

                }
            }

            if (Ucolor.a <= 0f && L2Sost == 0)
            {
                L2Sost = 1;
            }

            L2Dist = Vector3.Distance(HPLine2.transform.position, Krest.transform.position);

            if (L2Dist > 0f && L2Stady == 2)
            {
                HPLine2.transform.Translate(Vector3.down * 0.002f);

                L2Dist = Vector3.Distance(HPLine2.transform.position, Krest.transform.position);

                if (L2Dist >= 0.18f)
                {
                    L2Stady = 1;
                }
            }

            if (L2Dist > 0f && L2Stady == 1)
            {
                HPLine2.transform.Translate(Vector3.up * 0.002f);

                L2Dist = Vector3.Distance(HPLine2.transform.position, Krest.transform.position);

                if (L2Dist >= 0.18f)
                {
                    L2Stady = 2;
                }
            }


            if (L2Dist < 0.18f && L2Stady == 0)
            {
                HPLine2.transform.Translate(Vector3.down * 0.002f);

                L2Dist = Vector3.Distance(HPLine2.transform.position, Krest.transform.position);

                if (L2Dist >= 0.18f)
                {
                    L2Stady = 1;
                }
            }

            // Конец управления HPLine2.

            // Управление HPLine3

            Ucolor = (HPLine3.GetComponent<Renderer>().material.color);

            if (L3Sost == 1)
            {
                if (Ucolor.a > 0.99f)
                {
                    L3Sost = 0;
                    Ucolor.a = 1f;
                    (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L3Sost == 0)
            {
                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.01f;
                    (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L3Sost == 1)
            {

                if (Ucolor.a < 10f)
                {
                    Ucolor.a = Ucolor.a + 0.01f;
                    (HPLine3.GetComponent<Renderer>().material.color) = Ucolor;

                }
            }

            if (Ucolor.a <= 0f && L3Sost == 0)
            {
                L3Sost = 1;
            }

            L3Dist = Vector3.Distance(HPLine3.transform.position, Krest.transform.position);

            if (L3Dist > 0f && L3Stady == 2)
            {
                HPLine3.transform.Translate(Vector3.down * 0.0005f);

                L3Dist = Vector3.Distance(HPLine3.transform.position, Krest.transform.position);

                if (L3Dist >= 0.17f)
                {
                    L3Stady = 1;
                }
            }

            if (L3Dist > 0f && L3Stady == 1)
            {
                HPLine3.transform.Translate(Vector3.up * 0.0005f);

                L3Dist = Vector3.Distance(HPLine3.transform.position, Krest.transform.position);

                if (L3Dist >= 0.17f)
                {
                    L3Stady = 2;
                }
            }


            if (L3Dist < 0.17f && L3Stady == 0)
            {
                HPLine3.transform.Translate(Vector3.down * 0.0005f);

                L3Dist = Vector3.Distance(HPLine3.transform.position, Krest.transform.position);

                if (L3Dist >= 0.17f)
                {
                    L3Stady = 1;
                }
            }

            // Конец управления HPLine3.

            // Управление HPLine4

            Ucolor = (HPLine4.GetComponent<Renderer>().material.color);

            if (L4Sost == 1)
            {
                if (Ucolor.a > 0.99f)
                {
                    L4Sost = 0;
                    Ucolor.a = 1f;
                    (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L4Sost == 0)
            {
                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.025f;
                    (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L4Sost == 1)
            {

                if (Ucolor.a < 10f)
                {
                    Ucolor.a = Ucolor.a + 0.025f;
                    (HPLine4.GetComponent<Renderer>().material.color) = Ucolor;

                }
            }

            if (Ucolor.a <= 0f && L4Sost == 0)
            {
                L4Sost = 1;
            }

            L4Dist = Vector3.Distance(HPLine4.transform.position, Krest.transform.position);

            if (L4Dist > 0f && L4Stady == 2)
            {
                HPLine4.transform.Translate(Vector3.down * 0.003f);

                L4Dist = Vector3.Distance(HPLine4.transform.position, Krest.transform.position);

                if (L4Dist >= 0.18f)
                {
                    L4Stady = 1;
                }
            }

            if (L4Dist > 0f && L4Stady == 1)
            {
                HPLine4.transform.Translate(Vector3.up * 0.003f);

                L4Dist = Vector3.Distance(HPLine4.transform.position, Krest.transform.position);

                if (L4Dist >= 0.18f)
                {
                    L4Stady = 2;
                }
            }


            if (L4Dist < 0.18f && L4Stady == 0)
            {
                HPLine4.transform.Translate(Vector3.down * 0.003f);

                L4Dist = Vector3.Distance(HPLine4.transform.position, Krest.transform.position);

                if (L4Dist >= 0.18f)
                {
                    L4Stady = 1;
                }
            }

            // Конец управления HPLine4.

            // Управление HPLine5

            Ucolor = (HPLine5.GetComponent<Renderer>().material.color);

            if (L5Sost == 1)
            {
                if (Ucolor.a > 0.99f)
                {
                    L5Sost = 0;
                    Ucolor.a = 1f;
                    (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L5Sost == 0)
            {
                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.002f;
                    (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (L5Sost == 1)
            {

                if (Ucolor.a < 10f)
                {
                    Ucolor.a = Ucolor.a + 0.002f;
                    (HPLine5.GetComponent<Renderer>().material.color) = Ucolor;

                }
            }

            if (Ucolor.a <= 0f && L5Sost == 0)
            {
                L5Sost = 1;
            }

            L5Dist = Vector3.Distance(HPLine5.transform.position, Krest.transform.position);

            if (L5Dist > 0f && L5Stady == 2)
            {
                HPLine5.transform.Translate(Vector3.down * 0.003f);

                L5Dist = Vector3.Distance(HPLine5.transform.position, Krest.transform.position);

                if (L5Dist >= 0.18f)
                {
                    L5Stady = 1;
                }
            }

            if (L5Dist > 0f && L5Stady == 1)
            {
                HPLine5.transform.Translate(Vector3.up * 0.003f);

                L5Dist = Vector3.Distance(HPLine5.transform.position, Krest.transform.position);

                if (L5Dist >= 0.18f)
                {
                    L5Stady = 2;
                }
            }


            if (L5Dist < 0.18f && L5Stady == 0)
            {
                HPLine5.transform.Translate(Vector3.down * 0.003f);

                L5Dist = Vector3.Distance(HPLine5.transform.position, Krest.transform.position);

                if (L5Dist >= 0.18f)
                {
                    L5Stady = 1;
                }
            }

            // Конец управления HPLine5.

            // Управление Begunok1.

            if (B1Stady == 2)
            {
                if (Vector3.Distance(Begunok1.transform.position, B1ML.transform.position) > 0f && Vector3.Distance(Begunok1.transform.position, B1MR.transform.position) < ((((0.495f) * ((HP * 100f) / MAXHP)) / 100f) * 4f))
                {
                    Begunok1.transform.Translate(Vector3.right * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }
                Ucolor = (Begunok1.GetComponent<Renderer>().material.color);

                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.003f;
                    (Begunok1.GetComponent<Renderer>().material.color) = Ucolor;
                }

                if (Vector3.Distance(Begunok1.transform.position, B1ML.transform.position) <= 0.005f && B1Stady == 2)
                {
                    
                    B1Stady = 1;
                    Ucolor = (Begunok1.GetComponent<Renderer>().material.color);
                    Ucolor.a = 0f;
                    (Begunok1.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }


            if (B1Stady == 1)
            {
                
                if (Vector3.Distance(Begunok1.transform.position, B1MR.transform.position) > 0f)
                {
                    Begunok1.transform.Translate(Vector3.left * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }

                if (Vector3.Distance(Begunok1.transform.position, B1MR.transform.position) <= 0.005f && B1Stady == 1)
                {
                    B1Stady = 2;
                    Ucolor = (Begunok1.GetComponent<Renderer>().material.color);
                    Ucolor.a = 1f;
                    (Begunok1.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (B1Stady == 0)
            {
                if (Vector3.Distance(Begunok1.transform.position, B1ML.transform.position) > 0f && Vector3.Distance(Begunok1.transform.position, B1MR.transform.position) < ((((0.495f) * ((HP * 100f) / MAXHP)) / 100f) * 4f))
                {
                  
                    Begunok1.transform.Translate(Vector3.right * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }
                Ucolor = (Begunok1.GetComponent<Renderer>().material.color);

                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.003f;
                    (Begunok1.GetComponent<Renderer>().material.color) = Ucolor;
                }

                if (Vector3.Distance(Begunok1.transform.position, B1ML.transform.position) <= 0.005f && B1Stady == 0)
                {
                    B1Stady = 1;
                    Ucolor = (Begunok1.GetComponent<Renderer>().material.color);
                    Ucolor.a = 0f;
                    (Begunok1.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            // Конец управления Begunok1.

            // Управление Begunok2.

            if (B2Stady == 2)
            {
                
               if (Vector3.Distance(Begunok2.transform.position, B2MR.transform.position) > 0f && Vector3.Distance(Begunok2.transform.position, B2ML.transform.position) < ((((0.4900002f) * ((HP * 100f) / MAXHP)) / 100f) * 4f))   
                {
                    Begunok2.transform.Translate(Vector3.left * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }
                Ucolor = (Begunok2.GetComponent<Renderer>().material.color);

                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.003f;
                    (Begunok2.GetComponent<Renderer>().material.color) = Ucolor;
                }

                if (Vector3.Distance(Begunok2.transform.position, B2MR.transform.position) <= 0.005f && B2Stady == 2)
                {
                    B2Stady = 1;
                    Ucolor = (Begunok2.GetComponent<Renderer>().material.color);
                    Ucolor.a = 0f;
                    (Begunok2.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }


            if (B2Stady == 1)
            {
                if (Vector3.Distance(Begunok2.transform.position, B2ML.transform.position) > 0f)
                {
                    Begunok2.transform.Translate(Vector3.right * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }

                if (Vector3.Distance(Begunok2.transform.position, B2ML.transform.position) <= 0.005f && B2Stady == 1)
                {
                    B2Stady = 2;
                    Ucolor = (Begunok2.GetComponent<Renderer>().material.color);
                    Ucolor.a = 1f;
                    (Begunok2.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            if (B2Stady == 0)
            {
                if (Vector3.Distance(Begunok2.transform.position, B2MR.transform.position) > 0f && Vector3.Distance(Begunok2.transform.position, B2ML.transform.position) < ((((0.4900002f) * ((HP * 100f) / MAXHP)) / 100f) * 4f))
                {
                    Begunok2.transform.Translate(Vector3.left * (((0.005f) * ((HP * 100f) / MAXHP)) / 100f));

                }
                Ucolor = (Begunok2.GetComponent<Renderer>().material.color);

                if (Ucolor.a > 0f)
                {
                    Ucolor.a = Ucolor.a - 0.003f;
                    (Begunok2.GetComponent<Renderer>().material.color) = Ucolor;
                }

                if (Vector3.Distance(Begunok2.transform.position, B2MR.transform.position) <= 0.005f && B2Stady == 0)
                {
                    B2Stady = 1;
                    Ucolor = (Begunok2.GetComponent<Renderer>().material.color);
                    Ucolor.a = 0f;
                    (Begunok2.GetComponent<Renderer>().material.color) = Ucolor;
                }
            }

            // Конец управления Begunok2.

            Timer = 0.1f;
        }

    }
}


Много самокопипасты внутри кода, т.к. линиями управляет одинаковый
код, но с другими значениями. Оптимизировать размер можно,
не стал заморачиваться, смысла не имеет. На счёт скорости работы
кодом, не уверен, что она выше, т.к. я например постоянно мерю расстояния.
Первый вариант у меня был на таймерах, но я пришёл к выводу, что таймеры здесь неуместны.
Ну и вместо констант магические числа, для меня они те же константы )

Сообщение от ABTOMAT Посмотреть сообщение
Но зачем и чтобы что, если кодом проще?
Его вариант в реализации в разы быстрее, и кода в разы меньше.
Отличный вариант для дизайнера ) Ну, когда игры чисто на нодах пишут во всяких UE )
В общем данный способ имеет место быть, и нужно это как-то на ус мотать,
реально вижу экономит время.
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (28.09.2020)
Старый 28.09.2020, 06:35   #32
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Добавил. Я сейчас подумал, и уже не уверен, что на анимациях разрабокта быстрее.
Я всё-таки больше возился с расчётом цвета, никто не написал в этих
ваших хэлпах, что цвет задаётся от 0 до 1, а не от 0 до 255 как
в интерфейсе юньки, и другие подводные камни, об которые я споткнулся.
Управление движением же было накодено моментально.

Тут надо как-то в общем скорость работы сравнивать,
чтобы понять, зачем и чтобы что )
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (28.09.2020)
Старый 28.09.2020, 07:40   #33
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от Crystal Посмотреть сообщение
Я всё-таки больше возился с расчётом цвета, никто не написал в этих
ваших хэлпах, что цвет задаётся от 0 до 1, а не от 0 до 255 как
в интерфейсе юньки
Есть два класса Color и Color32, компоненты второго как раз измеряются в диапазоне 0..255

Сообщение от Crystal Посмотреть сообщение
Тут надо как-то в общем скорость работы сравнивать,
чтобы понять, зачем и чтобы что )
Т.к. я с анимациями работаю редко, я потратил на реализацию где-то час. С учетом того, что пришлось подумать как сделать анимацию так, чтобы она не была похожа на зацикленную. Отсюда много контроллеров для линий. Можно было бы сделать одну анимацию для всех линий, но длинную. Мне лень было заморачиваться. Но одну вещь я еще сделаю - напишу данный хэлсбар скриптом, чтобы показать тебе плюсы массивов и ООП.
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 28.09.2020 в 09:05.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crystal (28.09.2020)
Старый 28.09.2020, 10:17   #34
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от pax Посмотреть сообщение
Есть два класса Color и Color32, компоненты второго как раз измеряются в диапазоне 0..255


Т.к. я с анимациями работаю редко, я потратил на реализацию где-то час. С учетом того, что пришлось подумать как сделать анимацию так, чтобы она не была похожа на зацикленную. Отсюда много контроллеров для линий. Можно было бы сделать одну анимацию для всех линий, но длинную. Мне лень было заморачиваться. Но одну вещь я еще сделаю - напишу данный хэлсбар скриптом, чтобы показать тебе плюсы массивов и ООП.
Не стоит пакс, я с массивами работаю где мне это удобно,
массив не является для меня чем-то новым и непонятным )
Просто я использую массивы только для хранения огромных объёмов информации.
В текущем проекте например в массивах хранятся карты проходимости по клеткам уровня,
хранятся координаты ячеек при конструировании мешей.
Когда дойду до загрузки-сохранения игрового процесса, тоже всё будет в массивах.
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 10:30   #35
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от Crystal Посмотреть сообщение
Не стоит пакс, я с массивами работаю где мне это удобно,
массив не является для меня чем-то новым и непонятным )
Тем не менее я уже сделал. В аттаче видео результата и проект (Unity 2019.4.10). Собственно код получился вот такой:

using UnityEngine;

public class 
HealthBarAnimated MonoBehaviour
{
    public 
int health;
    public 
int maxHealth;

    public 
Color32 normalColor;
    public 
Color32 dangerColor;

    [
System.Serializable]
    public class 
AnimatedElement
    
{
        public 
SpriteRenderer sprite// анимируемый спрайт
        
public Vector3 startPosition// начальная позиция анимации
        
public Vector3 endPosition;   // конечная позиция анимации
        
public float positionAnimationSpeed 1;  // скорость анимации позиции
        
public bool animatePositionAsHealthPercent false// анимировать позицию на основе процента жизней
        
private float positionAnimationTime// текущее время анимации позиции

        
public bool animateColor true// анимировать цвет
        
public AnimationCurve alphaAnimationCurve// кривая анимации альфы (можно конечно было использовать Mathf.SmoothStep, но решил показать еще один способ анимации)
        
public float alphaAnimationSpeed 1// скорость анимации альфы
        
private float alphaAnimationTime// время анимации альфы

        
public bool animateHealthPercentScale false// анимировать скейл на основе процента жизней
        
public AnimationCurve healthPercentScaleAnimationCurve// кривая интерполяции анимации масштаба
        
public Vector3 healthPercentStartScale// начальный масштаб
        
public Vector3 healthPercentEndScale// конечный масштаб

        
public float healthColorTransitionStart// начало зоны перехода из нормального цвета в цвет опасности
        
public float healthColorTransitionEnd// конец зоны перехода из нормального цвета в цвет опасности



        
public void Init()
        {
            
// рандомизация начальных позиций анимаций
            
positionAnimationTime Random.value;
            
alphaAnimationTime Random.value;
        }

        
// обновление состояния спрайта
        
public void Update(float healthPercentColor32 normalColorColor32 dangerColorfloat deltaTime)
        {
            if (
animatePositionAsHealthPercent)
            {
                
sprite.transform.localPosition Vector3.Lerp(startPositionendPositionhealthPercent);
            }
            else
            {
                
positionAnimationTime += deltaTime positionAnimationSpeed;
                
sprite.transform.localPosition Vector3.Lerp(startPositionendPositionMathf.PingPong(positionAnimationTime1));
            }

            if (
animateHealthPercentScale)
            {
                
sprite.transform.localScale Vector3.Lerp(healthPercentStartScalehealthPercentEndScalehealthPercent);
            }


            if (
animateColor)
            {
                var 
healthPercentClamped Mathf.Clamp(healthPercenthealthColorTransitionStarthealthColorTransitionEnd);
                var 
healthColorT = (healthPercentClamped healthColorTransitionStart) / (healthColorTransitionEnd healthColorTransitionStart);
                var 
color Color.Lerp(dangerColornormalColorhealthColorT);
                
alphaAnimationTime += deltaTime alphaAnimationSpeed;
                
color.alphaAnimationCurve.Evaluate(Mathf.PingPong(alphaAnimationTime1));
                
sprite.color color;
            }
        }
    }

    
// массив анимируемых объектов
    
public AnimatedElement[] animatedElements;

    
void Start()
    {
        
// инициализация элементов
        
for (int i 0animatedElements.Lengthi++)
        {
            
animatedElements[i].Init();
        }
    }

    
void Update()
    {
        if (
health 0health 0;
        if (
health maxHealthhealth maxHealth;

        var 
healthPercent health / (float)maxHealth;


        
// обновление анимации элементов
        
for (int i 0animatedElements.Lengthi++)
        {
            
animatedElements[i].Update(healthPercentnormalColordangerColorTime.deltaTime);
        }
    }

По времени заняло пол часа кода, пол часа настройки.
Вложения
Тип файла: mp4 bandicam 2020-09-28 09-24-46-998.mp4 (14.03 Мб, 486 просмотров)
Тип файла: zip Tests1.zip (47.8 Кб, 474 просмотров)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
ant0N (28.09.2020), Arton (28.09.2020), Crystal (28.09.2020)
Старый 28.09.2020, 12:17   #36
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от pax Посмотреть сообщение
Тем не менее я уже сделал. В аттаче видео результата и проект (Unity 2019.4.10). Собственно код получился вот такой:
Твою бы активность да в собственный проект )
Это уже оффтоп, но я всегда допускаю оффтопство в своих темах.
Даже хелсбар оффтоп на самом деле ))

Что там после покойного стимкрафта?
Есть попытки ворваться в стим с новым проектом?
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 12:19   #37
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от Crystal Посмотреть сообщение
Твою бы активность да в собственный проект )
Это уже оффтоп, но я всегда допускаю оффтопство в своих темах.
Даже хелсбар оффтоп на самом деле ))

Что там после покойного стимкрафта?
Есть попытки ворваться в стим с новым проектом?
Собственных проектов сейчас нет. Не могу придумать ничего интересного.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 28.09.2020, 12:28   #38
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от pax Посмотреть сообщение
Собственных проектов сейчас нет. Не могу придумать ничего интересного.
ММО идея тухлая, сам уже наверно понял. Нужен сингл, он не минусанёт счёт.
Если нужно придумывать, обращайся, геймдиз вартича к твоим услугам ))
У меня куча вообще нереализованных игр, или заброшенных вначале.
Даже уже могу предложить кое что, где не придётся моделить и анимировать человеков,
эта идея улетела в ящик уже 13 лет как.
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (28.09.2020)
Старый 28.09.2020, 12:43   #39
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от Crystal Посмотреть сообщение
ММО идея тухлая, сам уже наверно понял. Нужен сингл, он не минусанёт счёт.
Если нужно придумывать, обращайся, геймдиз вартича к твоим услугам ))
У меня куча вообще нереализованных игр, или заброшенных вначале.
Даже могу предложить кое что, где не придётся моделить и анимировать человеков.
Спасибо за предложение, но я пока не готов браться за что-то. Можно считать что я на отдыхе
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com