ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unity] #2 : 컴포넌트
    Programming/C# (Unity) 2019. 5. 14. 23:41

    1. 상속

    게임 엔진은 이미 완성된 기반 코드를 제공하고 개발자는 게임 엔진 코드를 재사용함으로써 생산성이 올라간다.

    1) 예시 : 몬스터 > 오크 > 대장 오크

    class Monster {
        인공지능 기능
        애니메이션 기능
        공격과 방어 기능
        물리 기능
        기타 필수 기능
    }
    class Orc : Monster {
        초록색 피부
        오크의 애니메이션
        오크의 스킬
        그외 오크의 고유 기능
    }
    class OrcChieftan : Orc {
        대장 코스튬
        새로운 무기와 강력한 스킬
        그외 대장 오크의 고유 기능
    }

    2) 상속의 문제점

    class Human {
        모습을 그려주는 렌더 기능
        물리 기능
        애니메이션 기능
        체력 기능
        기타 필수 기능
    }
    class Player : Human {
        조작 기능
        공격 기능
        직업 기능
    }

    Human 클래스로 Player를 만들 때는 문제가 없다.

    class NPC : Human {
        물리 기능 삭제
        체력 기능 삭제
        대화 기능 추가
        거래 기능 추가
    }

    하지만 NPC를 만들려면 물리, 체력 기능을 없애야만 한다. 이것이 한 두개이면 그대로 가져가도 되지만 수십여명의 NPC를 만들 것이라면 문제가 된다.

     

    3) 결론

    상속에 의존하면 오히려 코드를 재사용하기 힘든 경우가 생길 수 있다.

    기획자가 새로운 오브젝트를 만들려면 프로그래머에게 의존해야 한다.

    이를 해결하기 위해 컴포넌트 패턴을 사용한다.

     

    2. 컴포넌트 패턴

    1) 컴포넌트로 동물 만들기

    컴포넌트 주머니

    프로그래머는 기획자가 요청한 부품들을 구현해 부품 주머니에 넣습니다. 이 부품들이 나중에 어떻게 쓰일지는 중요치 않습니다.

    각 부품들을 컴포넌트라고 부르며 컴포넌트마다 한 가지 능력을 가진다.

    코뿔소에 컴포넌트 추가
    상어에 컴포넌트 추가
    독수리에 컴포넌트 추가

    2) 게임 오브젝트와 컴포넌트의 특징

    유연한 재사용이 가능합니다.

    기획자의 프로그래머 의존도가 낮아집니다.

    독립성 덕분에 기능 추가와 삭제가 쉽습니다.

     

    3) 컴포넌트의 독립성

    게임 오브젝트는 단순한 빈 껍데기

    컴포넌트는 스스로 동작하는 독립적인 부품

     

    3. 유니티 에디터에서의 컴포넌트

    트랜스폼: 게임 오브젝트의 위치, 크기, 회전을 지정합니다

    메시 필터: 오브젝트의 외곽선을 지정합니다.

    메시 렌더러: 메시를 따라 색을 채워 그래픽 외형을 그립니다.

    박스 콜라이더: 다른 물체가 부딪칠 수 있는 물리적인 표면을 만듭니다.

    리지드바디: 게임 오브젝트가 물리 엔진의 통제를 받게 합니다.

     

    4. 메시지와 브로드캐스팅

    1) MonoBehaviour는 무엇인가

    유니티의 모든 클래스는 MonoBehaviour를 상속합니다.

    유니티에서 미리 제공하는 클래스이며 컴포넌트에 필요한 기본 기능을 제공합니다.

    MonoBehaviour를 상속한 클래스는 게임 오브젝트에 컴포넌트로서 추가될 수 있습니다.

    따라서 MonoBehaviour를 상속해서 만든 컴포넌트는 유니티의 제어를 받게 되어 유니티의 메시지를 받을 수 있다.

     

    2) 메시지 기반 방식

    메시지를 보내는 쪽은 누가 받게 될지 신경 쓰지 않습니다.

    메시지를 받은 쪽은 누가 보냈는지 신경 쓰지 않습니다.

    메시지를 받았을 때 메시지에 명시된 기능을 가지고 있다면 실행합니다. 관련이 없다면 무시합니다.

     

    3) 브로드캐스팅

    Dance를 브로드캐스팅

    게임 상에 존재하는 모든 게임 오브젝트와 컴포넌트가 Dance라는 메시지를 듣게 됩니다.

    Dance가 없다면 무시할 것이고 있다면 실행합니다.

    단 한 번의 브로드캐스팅으로 Dance()를 가진 모든 컴포넌트가 Dance()를 실행하게 합니다.

     

    4) 유니티 이벤트 메서드

    Start(), Update(), OrTriggerEnter()

    'Programming > C# (Unity)' 카테고리의 다른 글

    [Unity] #3 : 첫 스크립트 작성하기  (0) 2019.05.16
    [C#] #2 : 함수(메서드)  (0) 2019.05.15
    [C#] #1 : 변수  (0) 2019.05.14
    [Unity] #1 : Unity Interface  (0) 2019.05.14

    댓글

Designed by Tistory.