유니 티 3 차원에서 사용자 정의 이벤트 시스템을 구축 할 수 있습니다

아크쉐이 아로라
100000000000

2020 년 5 월 3 일·5 분 읽기

이벤트 시스템이란 무엇이며 그것을 만드는 방법에 뛰어 들기 전에 먼저 이벤트 시스템을 갖는 것이 왜 유용한지에 대해 논의 해 보겠습니다.

유니티에서는 아래 나열된 두 가지 중 하나를 사용하여 다른 클래스에서 데이터 또는 종속성을 가져옵니다.

공용 또는 직렬화 된 속성을 단일 동작으로 묶어서 검사기에서 할당하여 참조를 가져올 수 있습니다.

또는

코드에서 싱글톤 패턴을 사용하여 필요한 데이터를 가져옵니다.

싱글톤 디자인 패턴을 아직 알지 못하는 경우 클래스의 인스턴스화를 하나의 단일 인스턴스로 제한하는 소프트웨어 디자인 패턴입니다. 이 기능은 시스템 전체의 동작을 조정하는 데 정확히 하나의 개체가 필요한 경우에 유용합니다.

코드의 다른 객체가 해당 객체의 데이터를 필요로하는 경우,우리는 그것을 참조하는 싱글 톤 인스턴스를 호출합니다. 싱글 톤은 하나의 인스턴스 만 필요하다는 것을 알고있는 클래스를 참조하는 데 매우 유용합니다.

종속성을 얻기 위해 어떤 접근 방식을 사용하든,특히 매우 큰 프로젝트에서 작업하는 경우 작은 것을 조정하거나 코드를 리팩토링 할 때 문제가 발생합니다.

종속성을 완화합시다!

이벤트 시스템은 서로에 대해 직접 모르는 클래스 간에 메시지를 보내 코드를 모듈화 하는 데 도움이 됩니다. 그들은 일이 지속적으로 업데이트 루프에서 모니터링하지 않고 상태의 변화에 응답 할 수 있습니다. 그것은 관찰자 패턴의 한 형태이다 개체,제목이라고,그 부양 가족의 목록을 유지,관찰자라는,일반적으로 자신의 방법을 호출하여,어떤 상태 변경 사항을 자동으로 통지.

잡지 구독의 예를 통해 이것을 이해합시다.

  • 잡지 출판사(주제)가 사업에 종사하고 잡지(데이터)를 출판합니다.
  • 당신(데이터/관찰자의 사용자)당신이 구독 잡지에 관심이 있다면(등록),새로운 버전이 게시되면 그것은 당신에게 배달됩니다.
  • 구독을 취소(등록 취소)하면 새 버전을 받지 않습니다.
  • 발행인은 당신이 구독자(느슨한 커플 링)이기 때문에 당신이 잡지를 사용하는 방법,그것은 단지 당신에게 그것을 제공,당신이 누구인지 알 수 없습니다.

이벤트 시스템을 설계하는 방법?

제 3 인 컨트롤러 플레이어(예:미스터 엑스),미로 및 일부 문이있는 장면이 있습니다. 이제,씨 가정 해 봅시다. 엑스 미로의 출구에 도달하고 싶어하지만,즉시 씨로 열 수있는 사이에 몇 가지 문이있다.

문에는 이 충돌과 관련된 다른 충돌기를 트리거하는 트리거 박스 충돌기가 있습니다.

이벤트 시스템을 사용하여 구현해 보겠습니다.

씬에 게임 오브젝트를 추가하고 이벤트 매니저라는 새로운 스크립트를 추가하는 것으로 시작하겠습니다.연사

첫 번째 이벤트는 플레이어가 문 트리거 영역에 들어오거나 나갈 때 발사되는 이벤트입니다.

이벤트 관리자에서.또한 각 이벤트 작업을 호출할 수 있는 메서드를 만듭니다. 또한 클래스에 대한 정적 싱글 톤 참조를 만듭니다.

이제 우리는 이러한 이벤트를 발생시키고 구독 할 수있는 개체가 필요합니다. 이를 위해 문,도어 컨트롤러에 대한 두 개의 클래스를 만듭니다.고사 및 도어의 트리거 영역 용 도어 트리거.고사.

도어 컨트롤러에서.두 가지 방법을 만들 수 있습니다. 정적 인스턴스를 사용하여 이벤트 관리자 클래스에서 이벤트에 액세스하고 해당 메서드를 구독합니다.

이제 이벤트가 준비되었으며 구독자는 이러한 이벤트를 듣고 있습니다. 그래서,도어트리거 클래스에서,우리는 단지 온트리거 입력 방법에서 그 사건들을 발사할 필요가 있습니다.

좋아. 따라서 도어 컨트롤러와 도어 트리거 스크립트를 각 도어 및 트리거 영역에 각각 부착하고 장면을 재생합시다.

어! 한 가지 문제가 있습니다…

이벤트 관리자는 싱글 톤 클래스이며 모든 도어 트리거가 이벤트를 호출하고 모든 도어 컨트롤러가 동일한 이벤트를 듣고 응답합니다. 이벤트를 호출하는 동안 고유 한 아이디를 전달하여 동일한 아이디를 가진 문만 해당 이벤트를 수신 할 수 있도록해야합니다.
우리의 특별한 경우,트리거와 도어의 부모 객체는 동일합니다. 그래서,우리는 부모의 게임 오브젝트의 인스턴스 아이디를 전달할 수 있습니다.

의 장면을 재생할 수 있습니다..

예. 그것은 지금 예상대로 작동하고 있습니다.

원치 않는 오류로 이어질 수 있으므로 이러한 이벤트를 구독 취소해야 합니다. 예를 들어,런타임 등에 문을 파괴하는 경우

그래서,우리는 우리의 간단한 이벤트 시스템을 만들 수있는 방법입니다.

그게 지금 사람들을위한 전부입니다… 행복한 코딩! 🙂

You might also like

답글 남기기

이메일 주소는 공개되지 않습니다.