내일배움캠프(Unity)

TIL - 팀프로젝트

빵어 2023. 12. 5. 23:34

오늘은 팀프로젝트를 했다.

 

오늘 구현한 Enemy Move

Sin함수가 굉장히 편리한 거였다..

    IEnumerator Move()
    {
        while(State != CreatureState.DEAD)
        {
            System.Random random = new System.Random();
            int randomNumber = random.Next(0, 3);

            Vector3 originalPosition = transform.position;

            switch (randomNumber)
            {
                case 0:
                    yield return StartCoroutine(UpDown());
                    break;

                case 1:
                    yield return StartCoroutine(LeftRight());
                    break;

                case 2:
                    yield return StartCoroutine(Diagonal());
                    break;
                default:
                    break;
            }
            yield return StartCoroutine(MoveToOriginalPosition(originalPosition, 0.15f));

        }
        yield break;
    }

    IEnumerator UpDown()
    {
        float elapsedTime = 0f;
        Vector3 originalPosition = transform.position;

        while (elapsedTime < moveTime)
        {
            float newY = originalPosition.y + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
            transform.position = new Vector3(originalPosition.x, newY, originalPosition.z);

            elapsedTime += Time.deltaTime;
            yield return null;
        }
    }

    IEnumerator LeftRight()
    {
        float elapsedTime = 0f;
        Vector3 originalPosition = transform.position;

        while (elapsedTime < moveTime)
        {
            float newX = originalPosition.x + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
            transform.position = new Vector3(newX, originalPosition.y, originalPosition.z);

            elapsedTime += Time.deltaTime;
            yield return null;
        }
    }

    IEnumerator Diagonal()
    {
        float elapsedTime = 0f;
        Vector3 originalPosition = transform.position;

        while (elapsedTime < moveTime)
        {
            float newX = originalPosition.x + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
            float newY = originalPosition.y + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
            transform.position = new Vector3(newX, newY, originalPosition.z);

            elapsedTime += Time.deltaTime;
            yield return null;
        }
        yield return StartCoroutine(MoveToOriginalPosition(originalPosition, 0.2f));
    }

    IEnumerator MoveToOriginalPosition(Vector3 originalPosition, float duration)
    {
        float elapsedTime = 0f;
        Vector3 startPosition = transform.position;

        while (elapsedTime < duration)
        {
            transform.position = Vector3.Lerp(startPosition, originalPosition, elapsedTime / duration);
            elapsedTime += Time.deltaTime;
            yield return null;
        }
        transform.position = originalPosition;
    }