오늘 학습 키워드

최종 팀 프로젝트

오늘 학습 한 내용을 나만의 언어로 정리하기

이펙트 매니저 수정

  • 원래 이펙트 매니저를 통해서 새로운 이펙트를 발생시키면 나머지 이펙트가 자동으로 다 삭제됐음.
  • 근데 그러다보니까 버프기처럼 오래 남아있어야하는 이펙트가 다른 이펙트 실행으로 인해 사라지는 상황 발생
  • 그래서 자동으로 삭제되는 부분을 지우고 다른 방법으로 관리할 예정

플레이어가 맞을 때 눈에 띄게 하기

// PlayerCondition.cs
public void TakeDamage(int damage)  
{  
    ...
    controller.Animator.DamagedFeedback(flashTime, flashSpeed);  
    ...
}
 
// PlayerAnimator.cs
public void DamagedFeedback(float flashTime, float flashSpeed)  
{  
    if (damagedFlashCoroutine != null)  
    {  
        StopCoroutine(damagedFlashCoroutine);  
        ApplyColor(originalColor);  
    }  
  
    damagedFlashCoroutine = StartCoroutine(FlashRoutine(flashTime, flashSpeed));  
}  
  
private IEnumerator FlashRoutine(float flashTime, float flashSpeed)  
{  
    float elapsed = 0f;  
  
    while (elapsed < flashTime)  
    {  
        elapsed += Time.deltaTime;  
        float t = Mathf.PingPong(elapsed * flashSpeed, 1f);  
  
        Color lerped = Color.Lerp(originalColor, Color.red, t);  
        ApplyColor(lerped);  
  
        yield return null;  
    }  
  
    ApplyColor(originalColor);  
}  
  
private void ApplyColor(Color color)  
{  
    spriteRenderer.GetPropertyBlock(mpb);  
    mpb.SetColor(mpbColorKey, color);  
    spriteRenderer.SetPropertyBlock(mpb);  
}
 
  • Mathf.PingPong 사용해서 빨간색으로 갔다가 원래 색으로 돌아오도록 설정
  • 플레이어가 무적상태가 아니고 맞았을 때만 반짝이게 할 예정

State Length를 애니메이션에 맞추기

  • 가끔 애니메이션이 분할되어 있는 경우가 있음.
  • Ex) SuperCrash, WhileSuperCrash, EndSuperCrash
  • 그러면 분할되어 있는 모든 애니메이션의 길이를 합해서 StateLength를 정해야 함
  • 지금의 코드는 일치하는 하나만 찾게 되어있음.
  • 그걸 이제 GetType().Name이 포함된 애니메이션들을 합쳐서

학습하며 겪었던 문제점 & 에러

문제 1

  • 문제&에러에 대한 정의

중단점에 조건을 걸었는데 안됐음

  • 해결 방법 “== 을 안해서 그런거였음

문제 2

  • 문제&에러에 대한 정의

오브젝트 풀에서 계속 키가 없다는 에러를 냈음

  • 내가 한 시도

중단점을 열심히 찍어봄

  • 해결 방법

오브젝트를 풀에 등록하기 전에 한 번 더 호출되어서 그런거였음

  • 새롭게 알게 된 점

비동기 순서 조심하자

문제 3

  • 문제&에러에 대한 정의

맞았을 때 플레이어 색깔 바꾸려고 MaterialPropertyBlock 받으려고 하는데 자꾸 이상한 오류가 떴음

ArgumentNullException: Value cannot be null.
Parameter name: dest
  • 해결 방법 Material Property Block을 new 로 초기화해주지 않아서 그럼. 초기화 해주고 하니까 괜찮아짐

  • 새롭게 알게 된 점 ref로 받아오려고 해도 비어있으면 안되는 경우가 있는듯.

문제 4

  • 문제&에러에 대한 정의

애니메이터 키려고 하면 자꾸 오류뜸

NullReferenceException: Object reference not set to an instance of an object UnityEditor.Graphs.AnimationStateMachine.Graph.GenerateConnectionKey
  • 해결 방법 애니메이터 창 한 번 완전히 끄고 다시 키니까 괜찮아짐.

문제 5

  • 문제&에러에 대한 정의 Target Platform을 WebGL로 바꾸니까 갑자기 타이틀 씬에서 다음으로 안넘어감. 그리고 에디터에서 봤을 때 전부 핑크색으로 보임.

  • 해결 방법 일단은.. 쉐이더가 어드레서블에 포함되지 않은게 문제로 보임. 내일 쉐이더 프리로드해볼 예정.