나는 C++ 프로그래머라서 그런지 C#의 문법적인건 가끔 까먹는 경우가 많다.


C++의 경우에는 부모 클래스의 생성자를 자식 클래스의 생성자에서 호출할때는 이니셜라이저에 부모 클래스 이름으로 호출해주면 됐었다.


C++의 경우

class Parent;
{
private:
    int i;
public:
    Parent(int i) : i(i) {  }
}

class Child : public Parent
{
private:
    int j;
public:
    Child(int i, int j) : Parent(i), j(j) {  }    // 부모의 이름으로 부모의 생성자를 호출할 수 있다.
}


하지만 C#의 경우는 약간 달라서 부모 클래스의 이름으로는 부모 클래스의 생성자를 호출할 수 없고 base 키워드를 사용해야 한다.


C#의 경우

public class Parent;
{
    private int i;

    public Parent(int i)
    {
        this.i = i;
    }
}

public class Child : Parent
{
    private int j;

    public Child(int i, int j) : base(i)    // 부모 클래스의 생성자를 호출하려면 base 키워드를 사용해야 한다.
    { 
        this.j = j;
    }
}


C# 프로그래밍 책을 한 번 훑어보면서 봤던 내용인데 C#코딩을 자주하는 편은 아니라 정확한 방법을 까먹어서 다시 찾아보게 되었다.

반응형

마우스나 터치 같은 화면으로 입력하는 처리를 해야하는 경우가 많은데 유니티에서는 EventTrigger라는 것을 지원한다. 일반적인 방법인 Input.mousePosition나 Input.GetTouch()를 이용해서 직접 처리하는 대신에 화면 전체나 혹은 원하는 부분을 덮는  Panel Object에 EventTrigger Component를 추가해서 각종 화면 입력을 처리할 수 있게 된다.

 

간단한 예시 (Pointer Enter : 포인터가 Panel 위에 올라왔을때, Drag : 드래그 중일때, Move : 포인터가 Panel 위에서 움직이는 중일때)

 

당연하게도 이 모든 것들이 스크립트에서도 처리가 가능한데 그 방법은 panel에 들어갈 스크립트의 클래스에 원하는 EventTrigger 인터페이스를 상속하고 필요로 하는 함수를 구현해주면 된다.

 

이번에 발생한 문제는 나는 마우스 클릭 후 놓을때, 혹은 터치 후 손을 뗄 때 반응하기를 원했기 때문에 클래스에 IPointerUpHandler를 상속시키고 구현해야하는 함수 public void OnPointerUp(PointerEventData eventData)를 구현했다.

 

하지만 기능은 원하는대로 동작하지 않았다. 무슨 문제인지 살펴보니 IPointerUpHandler와 IPointerDownHandler는 항상 짝지어서 사용해야 하는 것 같다. 실제로 해당 클래스에 두 인터페이스를 모두 상속시킨 이후에는 기능이 원하는대로 작동한다.


반응형

+ Recent posts