Unity keeps crashing and I dont know why

So I’m fairly new to using Unity so I don’t know everything about it. The problem is that Unity keeps crashing for no reason and I wanted to ask if some of u can get behind my promblem.
This is the part of my Code thats causing the Problem (I think…) Its very long and probably really bad but like I said I can’t really pinpoint the reason unity keeps crashing. (The Code is for an Enemy in a Turn Based Combat (kinda like DnD) and it normally keeps chrashing on the Turn right brfore the Enemy gets close enough to the player to Attack)

void Update()
{
if (Leben <= 0)
Die();

    if (Turn == true)
    {
        if (CheckPlayerProx() == 1)
            closeProx= true;
        else
            closeProx= false;

        if CheckClose() == 1)
            close= true;
        else
            close= false;

    }
}

void CheckMove()
{
    rechts = 0;
    links = 0;
    oben = 0;
    unten = 0;

    while (Movement > 0 && closeVal== false)
    {
        if (XGegen - 1 > XWert)
        {
            Movement--;
            XWert++;
            rechts++;
        }

        if (XGegen + 1 < XWert)
        {
            Movement--;
            XWert--;
            links++;
        }

        if (YGegen - 1 > YWert)
        {
            Movement--;
            YWert++;
            oben++;
        }

        if (YGegen + 1 < YWert)
        {
            Movement--;
            YWert--;
            unten++;
        }

        if (XWert == XGegen + 1 && YWert == YGegen - 1)
        {
            int ur = Mathf.RoundToInt(Random.Range(1f, 2f));
            if (ur == 1)
            {
                Movement--;
                YWert++;
                oben++;
            }
            else
            {
                Movement--;
                XWert--;
                links++;
            }
        }
        else
        {
            if (XWert == XGegen - 1 && YWert == YGegen - 1)
            {
                int ul = Mathf.RoundToInt(Random.Range(1f, 2f));
                if (ul == 1)
                {
                    Movement--;
                    YWert++;
                    oben++;
                }
                else
                {
                    Movement--;
                    XWert++;
                    rechts++;
                }
            }
            else
            {
                if (XWert == XGegen + 1 && YWert == YGegen + 1)
                {
                    int or = Mathf.RoundToInt(Random.Range(1f, 2f));
                    if (or == 1)
                    {
                        Movement--;
                        YWert--;
                        unten++;
                    }
                    else
                    {
                        Movement--;
                        XWert--;
                        links++;
                    }
                }
                else
                {
                    if (XWert == XGegen - 1 && YWert == YGegen + 1)
                    {
                        int ol = Mathf.RoundToInt(Random.Range(1f, 2f));
                        if (ol == 1)
                        {
                            Movement--;
                            YWert--;
                            unten++;
                        }
                        else
                        {
                            Movement--;
                            XWert++;
                            rechts++;
                        }
                    }
                }
            }
        }
    }

    Moving();
}

void Moving()
{
    if (rechts > 0)
        StartCoroutine(MoveRight());
    else
        if (links > 0)
            StartCoroutine(MoveLeft());
        else
            if (oben > 0)
                StartCoroutine(MoveUp());
            else
                if (unten > 0)
                    StartCoroutine(MoveDown());
                else
                    Moving();
}
IEnumerator MoveRight()
{
    rechts--;
    Geh--;
    yield return new WaitForSeconds(0.3f);
    transform.Translate(50f, 0f, 0f);
    X++;
    if (Geh > 0 && close== false)
        Moving();
    else
        CheckAngriff();
}

IEnumerator MoveLeft()
{
    links--;
    Geh--;
    yield return new WaitForSeconds(0.3f);
    transform.Translate(-50f, 0f, 0f);
    X--;
    if (Geh > 0 && close== false)
        Moving();
    else
        CheckAngriff();
}

IEnumerator MoveUp()
{
    oben--;
    Geh--;
    yield return new WaitForSeconds(0.3f);
    transform.Translate(0f, 50f, 0f);
    Y++;
    if (Geh > 0 && close== false)
        Moving();
    else
       CheckAngriff();
}

IEnumerator MoveDown()
{
    unten--;
    Geh--;
    yield return new WaitForSeconds(0.3f);
    transform.Translate(0f, -50f, 0f);
    Y--;
    if (Geh > 0 && close== false)
        Moving();
    else
        CheckAngriff();
}

I suspect that the while loop inside your Update method causes an infinite loop, which then crashes Unity. Check your conditions, e.g. print out the variables used in the condition statement.