[SCC] TIL (12)

suhan0304·2024년 9월 2일

SCC - TIL

목록 보기
12/17
post-thumbnail

Date : 2024.09.02


KnifeHit

  • Boss Time Limit 구현
  • Continue 구현

자세한 개발 내용은 하단의 개발 로그를 참고하자.

(8) : https://velog.io/@suhan0304/Unity-Knife-Hit-8


NIL (New I Learned)

abstract와 virtual의 차이

둘의 제일 근본적인 차이는 abstract구현체(body)가 없지만 virtual은 구현체가 있다.

abstract 메소드는 구현체가 없기 때문에 abstract 클래스 안에서만 사용 가능하다. 또한 해당 메소드를 호출하기 위해서는 자식 클래스에서 반드시 해당 메소드를 구현해줘야 한다. 하지만 virtual 메소드는 아무 동작도 하지 않아도 구현체가 있다. 어떤 클래스에서든 사용 가능하고 자식 클래스에서 구현하지 않더라도 해당 메소드 및 클래스를 사용하는데 지ㅏ장이 없다.

따라서, 해당 클래스는 기본 기능을 모두 갖춘 완성품인데 추가 기능을 제공하기 위해서는 'virtual` 키워드가 적합하다. 더 나아가 자식 클래스가 해당 메소드를 반드시 구현하도록 제약을 주고 싶은 아키텍쳐나 디파인 목적이라면 abstract 키워드를 사용해야 한다.

override?

결과적으로 다형성 측면에서 자식 클래스의 인스턴스를 부모 클래스로 캐스팅해서 사용할 경우 차이가 발생한다. virtual 키워드는 override 키워드와 함께 사용시 부모 클랫스로 자식 클래스의 인스턴스를 캐스팅해서 사용할 지라도 부모의 메서드가 아닌 실제로 가장 마지막에 생성된, 즉 override된 메소드를 호출하도록 지시한다.

참고 자료로는 Microsoft 공식 문서, 블로그를 많이 참고했다.

UI > Canvas Object Position To In-Game Object

UI의 캔버스 상의 오브젝트를 게임 오브젝트의 월드 좌표 상으로 옮기는 작업은 아래와 같다.

// obj의 월드 좌표를 화면 좌표로 변환
Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, obj.transform.position);
        
// 화면 좌표를 Canvas 좌표로 변환
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, screenPoint, canvas.worldCamera, out Vector2 localPoint);
        
// movingObj의 위치를 업데이트
movingObj.anchoredPosition = localPoint + screenPoint;
profile
Be Honest, Be Harder, Be Stronger

0개의 댓글