개발을 마저 이어해보자.
오늘 이어서 구현할 기능은 아래와 같다.
자세한 개발 내용은 하단의 개발 로그를 참고하자.
(5) : https://velog.io/@suhan0304/Unity-Knife-Hit-5
델리게이트를 Invoke 시킬때 물음표(?) 넣는걸 습관화하자.
sample?.Invoke();
이런 식으로해야 sample 안에 함수 참조가 있는지를 확인한 후에 Invoke가 된다. 함수 참조가 없으면 실행하지 않는다. 만약 물음표로 확인하지 않고 그냥 Invoke를 시키면 함수 참조가 안 된 델리게이트도 실행시켜버리고 오류가 발생한다.
DOTween에서 KillAll로 모든 오브젝트의 DOTween을 중지시킬 수 있다. 오브젝트를 파괴하기 전에 DOTween을 중지시키고 삭제하는게 안전하기 때문에, DOTween.KillAll을 사용했는데 이게 단점이 다른 오브젝트의 DOTween도 중지시키는 문제가 발생했었다.
DOTween.Kill(gameObject)로 그 문제를 해결할 수 있었는데, gameObject 내부의 DOTween만 모두 중지시키는 아주 황금같은 메서드였다.
DOTween.Kill(gameObject);
항상 Destroy 하기 전에 DOTween을 중지시키는 것을 잊지 말자.
버튼 역할을 하는 UI 위에 다른 이미지를 얹으면 해당 버튼을 클릭할 수 없는 문제 발생한다. UI 위에 얹힌 이미지를 단순히 이미지 출력 용도이고 버튼의 역할을 그대로 수행하고 싶다면 위에 얹혀져 있는 이미지 오브젝트의 Image 컴포넌트의 Raycast Target을 비활성화 해주면 된다.

이벤트 처리에 관한 유니티의 공식 문서.
참고로 이미지 뿐만 아니라 Text에도 적용 가능하다. 만약 버튼이 작동하지 않으면 버튼 위에 뭔가 있는게 아닌지를 확인하고 있다면 Raycast Target이 활성화된 상태인지를 확인해봐야 한다.