Показать сообщение отдельно
Старый 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)