Unity 최종 프로젝트 - 13

이준호·2024년 1월 31일
0
post-thumbnail

📌 Unity 최종 프로젝트



📌 추가사항

➔ Title Scene

  • Back Ground

  • Progress Bar (현재는 FakeLoding)

  • Touch The Screen (Alpha Value, Fade In Out)

Loding Progress Bar 는 현재 중간 발표의 스코프에 맞추기 위해 일단, Fake Loding으로 진행하였다.

public class FakeLoading : MonoBehaviour
{
    [SerializeField]
    private GameObject _touchScreen;
    
    private Image _progressBar;

    private void Awake()
    {
        _progressBar = transform.GetChild(0).GetComponent<Image>();
    }

    private void Start()
    {
        StartCoroutine(FakeLoadingBar());
    }

    private IEnumerator FakeLoadingBar()
    {
        float timer = 0f;

        while (timer < 1.0f)
        {
            yield return null;
            timer += Time.deltaTime;
            if (_progressBar.fillAmount < 0.9f)
            {
                _progressBar.fillAmount = Mathf.Lerp(_progressBar.fillAmount, 0.9f, timer);
                if (_progressBar.fillAmount >= 0.9f)
                {
                    timer = 0f;
                }
            }
            else
            {
                _progressBar.fillAmount = Mathf.Lerp(_progressBar.fillAmount, 1f, timer);
            }
        }
        
        _touchScreen.SetActive(true);
        gameObject.SetActive(false);
    }

    private void OnDisable()
    {
        StopAllCoroutines();
    }
}
  • Time.deltaTime에 따라 로딩바가 채워지고, 90% 이상에선 한번 타이머를 비우고 다시 채워 실제 Fake Loding이 아닐 때 처럼 느낌을 비슷하게 내봤다.



Touch The Screen 이 알파값을 0 - 1 이 왔다갔다 하며 깜빡이는 효과를 주었다.

public class FadeInOut : MonoBehaviour
{
    [SerializeField]
    private TextMeshProUGUI _touchScreenText;
    
    private readonly float _fadeTime = 2f;

    private void Awake()
    {
        _touchScreenText = transform.GetComponent<TextMeshProUGUI>();
    }

    private void OnEnable()
    {
        StartCoroutine(FadeOut());
    }

    private IEnumerator FadeOut()
    {
        Color tempColor = _touchScreenText.color;
        tempColor.a = 0f;
        while (tempColor.a < 1f)
        {
            tempColor.a += Time.deltaTime / _fadeTime;
            _touchScreenText.color = tempColor;

            if (tempColor.a >= 1f)
            {
                tempColor.a = 1f;
            }
            yield return null;
        }

        StartCoroutine(FadeIn());
    }

    private IEnumerator FadeIn()
    {
        Color tempColor = _touchScreenText.color;
        while (tempColor.a > 0f)
        {
            tempColor.a -= Time.deltaTime / _fadeTime;
            _touchScreenText.color = tempColor;

            if (tempColor.a <= 0f)
            {
                tempColor.a = 0f;
            }

            yield return null;
        }

        StartCoroutine(FadeOut());
    }

    private void OnDisable()
    {
        StopAllCoroutines();
    }
}
  • FadeOut 과 FadeIn 이라는 IEnumerator을 사용하여, 시작하면 FadeOut, 알파값을 0으로 만들고 1로 채워진 다음 다 채워지면 Fade In으로 가서 다시 알파값을 줄이고 0이 된다면 다시 FadeOut을 불러주는 방식으로 깜빡임을 구현하였다.

  • 씬이 넘어가서 해당 오브젝트가 꺼지면 코루틴을 다 꺼두게 하였다.












📌 추가예정 (1차 스코프 급한 목록)

  • Level Generator

    • 올바르게 레벨이 생성되고 'Bake'가 되는지 확인
    • 레벨이 생성 된 이후에 스폰을 해야한다.
    • 맵 밖(즉, 탈출 Location)같은 것이 필요.
    • 밖으로 나갔다고 판단되면, 로딩 후 로비로 전환
  • Spawn System

    • Player 및 Enemy, 상호작용 가능 물품 및 Entity Spanwer
    • 맵에 따라서 스폰 포인트를 만들거나 해서 전리품이 생성되도록 설정 해야할 듯하다.
  • Hit Interface 정립












📌 남은목록 (1차 스코프 이후 진행할 목록)

  • Action Node 모듈화
    현재 EnemyBasicBT.cs 안에 액션노드들이 모두 구현되어 작동중이다. (Func를 사용해서)
    코드가 길어지다 보니 시인성이 좋지 않기도 하고, 확인이 힘들어져 튜터님의 피드백대로 각 액션노드들을 SO와 클래스로 모듈화 할 예정이다.
  • Sound Detect
    현재 좀비가 시야각 안에서만 감지가 가능한데 그러면 가까이 와서 총을 쏘거나 뛰어다녀도 인식을 하지 못할것이다.
    그것은 매우 부자연스럽다. 그래서 사운드감지 범위를 만들고 그 범위 안에서 소리가 나는 행동을 이벤트로 받아서 감지하도록 할 예정이다.
profile
No Easy Day

0개의 댓글