728x90
반응형

이벤트 9

Unity에게 MonoBehaviour란..? [Unity]

유니티에서 New Sciript로 뭐만 만들면 항상 기본적으로 상속되는 클래스 중 하나인데 뭐하는 애일까?? 알아보자 MonoBehaviour 클래스는 유니티에서 미리 만들어져서 제공되며 컴포넌트에 필요한 기본 기능을 제공한다. 줄여서 말하자면 MonoBehaviour에는 컴포넌트에 필요한 필수 기능들이 들어가있다. 다시 말하면 MonoBehaviour를 상속받아야만 컴포넌트 기능을 쓸 수 있는 것이다. **유니티의 모든 컴포넌트는 MonoBehaviour를 상속한다. 컴포넌트를 이해하기 위해 컴포넌트 패턴이 어떻게 작동하는 지를 알아보자. 컴포넌트들은 서로 관심이 없다. -> 어떤 컴포넌트는 다른 컴포넌트에 의해서 "의도하고 찾아내기"전 까지 알 수가 없다. 마찬가지로 유니티 엔진에서도 해당 컴포넌트가..

UnityEvent, UnityAction - 유니티 이벤트, 유니티 액션[Unity]

오늘 나의 무능함을 느끼고.. 공부를 다시 시작해본다. 너무 우울하다. 서론이 길었다. 알아보자 UnityEvent란 무엇인지 먼저 알아보자 ** using UnityEngine.Events 를 해야 쓸 수 있다. ** UnityEvent는 MonoBehavior를 상속받는 모든 클래스에 사용가능하다. 유니티는 수많은 콜백함수를 제공하는데 마지 옵저버 패턴과 같이 이벤트가 일어나길 기다리고 있다가 특정한 이벤트가 일어났을 때 수행하게 된다. **우리가 UI의 버튼을 만들면 onClick에 수행할 함수나 객체를 등록해서 함수를 실행시키거나 객체 활성화 등을 할 수 있는 것과 같은 이치다. ??그럼 그냥 Inspector에서나 추가하면 되는 것이지.. 뭣하러 스크립트에서 추가한대유??? 에셋과 스크립트 충돌..

C#/Unity Event - 개념

Event에서 간단하게 정리하려고 한다. 알아보자 무엇이냐??? Event는 C#이 지원하는 하나의 기능으로 특정한 일(event)이 있어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능을 한다. 즉, 외부와의 커플링, Coupling을 줄이기 위한 도구 중 하나이다. 왜쓰냐?? 위에서 말했다시피 Coupling을 줄여줌은 물론 Event가 발생했을 때만 Subscriber된 함수가 실행됨으로 Update로 항상 지켜보지 않아도 된다는 장점이 있다. -> 하지만 해당 Event를 발생시키는 것은 Update로 봐야한다는 단점도 존재한다. 결국 Event의 Event도 어차피 누군가는 감지를 해야 발행할 수 있으니까..? 어떻게 사용하는 지를 보면서 더 감을 잡도록 하자. 어떻게 쓰냐?..

Event Queue, 이벤트 큐 [디자인패턴](디커플링)

이 패턴의 의도는 메시지와 이벤트를 보내는 시점과 처리하는 시점을 다르게 하기 위함이다. 큐라는 이름대로 실제로 큐를 이용한다. 이벤트와 큐는 각각 들어봤는데 이벤트 큐는 뭘까? 싶지만 그냥 이벤트가 들어있는 큐다. 걱정말자. 예를 들어 UI 프로그래밍을 해봤다면 이벤트에 대해서 조금이라도 더 알텐데 버튼 같은 것을 User가 누르면 이벤트가 발생하고 프로그램에서 해당 이벤트를 이용해 작동하는 형식이다. 다시 말해서 버튼 클릭이든 뭐든 프로그램과 상호작용을 위해 OS가 이벤트를 발생시켜서 프로그램으로 전달하는 것이다. 프로그램에서는 이벤트를 받아서 행위를 처리하도록 이벤트 핸들러, Event Handler에게 전달한다. 예를 들어 아래처럼 이벤트 루프가 있는 것이다. while (running) { Ev..

UI, 유저인터페이스 기본 - 3 Event trigger and Navigation [Unity]

텍스트, 이미지는 했는데 뭔가 UI에 동작이 없으면 안되잖아? 독서 어플리케이션도 아니고 그냥 보여주고 끝날건 아니잖아ㅎㅎ 그래서 알아보기로 했다. 이벤트 트리거들을 ㅎ 이벤트하면 무슨 버튼을 누르면 작동해야지?라는 생각이 먼저 든다. 그래서 버튼 알아보려고 한다. 사실 Interaction을 하기 위한 것이 UI라면 버튼이 차라리 대표적일 것 같은 느낌을 준다. 나만 그럴 수도 있고 아무튼 UI에서 버튼을 만들어보자 이렇게 항상 text가 child로 같이 딸려온다. text가 버튼의 이름이 되겠다. 버튼에는 또 Inspector창을 보면 옵션이 참 많다. Highlighted 는 마우스를 가져다 댔을 때 Pressed는 눌렀을 때 Normal은 그냥 냅뒀을 때 색도 이렇게 경우에 따라서 바꿀 수 있다..

Handling Event, 이벤트 활용하기 - 3, 옵저버패턴, Observer Pattern [Unity]

우리가 왜 이벤트를 활용해보았을까. 바로 옵저버 패턴이란 것을 익혀보기 위함이었다. 옵저버 패턴은 어떤 때에 쓰일까?? 다수의 클래스가 하나의 이벤트에 대해 무엇인가 해야할 때 쓰인다. 이전 글에서 플레이어가 죽거나, 적이 죽을 때처럼 많은 곳에서 참조할 때?? 그정도? 알아보자 옵저버 패턴은 이런 식으로 진행된다. 하지만 모든 Observer마다 Notify를 하긴 귀찮기에 인터페이스를 이용하기도 한다. 이번에는 목숨이 다 소모되어서 게임이 끝났을 때를 가정해보자 게임 상에 남은 Enemy와 아이템은 없어지고 점수는 0으로 초기화되고 GAME OVER 문구가 떠야한다. 여기서 옵저버 패턴을 한 번 써보자. 그럼 인터페이스 만들어보자 이제는 Subject에 Private으로 Observer 리스트 만들고..

Handling Event, 이벤트 활용하기 - 2 [Unity]

이어서 이벤트를 활용해보자 이전 글과 이어진다. 이번에는 Enemy가 죽으면 해당하는 점수를 인터페이스 보여주려고 한다. 여기선 HUD, Head Up Display로 나타난다. 총알을 맞으면 어떻게 되는지 보자 private void OnCollisionEnter2D(Collision2D collision) { Destroy(collision.gameObject); GameObject xPlosion = Instantiate(explosion, transform.position, Quaternion.identity); xPlosion.transform.localScale = new Vector2(2, 2); Destroy(gameObject); } 이번에도 이벤트를 이용하고 싶다. 이번엔 이런 식으로 ..

Handling Event, 이벤트 활용하기 [Unity]

이벤트를 배워놓고 어디다 써먹는지 몰랐다. 이제 왜 이벤트를 써야하는지 알아 볼 차례다. 알아보자 문제 상황 플레이어가 총을 쏘는데 총알이 스크린을 벗어나거나 적에게 맞지 않는다면 총알을 쏠 수 없게 만들고 싶다. 즉, 총알을 쏘는 속도를 제어하고 싶다는 말이다. 그래서 생각해낸 생각이 아래와 같다. 플레이어 스크립트에서 Disable, 과 Enable로 총을 쏠 수 있게 하고 총알 자체에서 스크린 밖으로 벗어난 것을 감지하면 그것을 플레이어에게 알려줌으로 Scene에 활성화 된 총알을 하나만 만들려고 한다. 여기 플레이어의 스크립트가 있다. 그렇게 구현하고자 한다면 #region Projectile Management public void EnableProjectile() { projectileEnab..

이벤트, Events [Unity]

이벤트하면 뭐 경험치 2배, 선물 주는 것 생각이 나는 여기선 그건 아니고 정말 이벤트다. 사건이라고... 해석하기보다 그냥 Event로 받아들이자. 알아보자 정의해보자 어떤 이벤트가 일어났으면 설정해놓은 메서드를 불러와서 실행시킨다. delegate에 메서드를 담아서 실행시키는 것과 비슷한 원리다. 다만 Event는 static으로 선언되어 객체없이도 어디서나 접근할 수 있게해놓는 것이다. 그렇게 이용한다고 한다. public delegate void ClickAction(); public static event ClickAction OnClicked; 이런 식으로 선언한다. delegate으로 먼저 선언해준다. 그 후 event 키워드를 사용하여 메서드를 써준다. ** static으로 설정하지 않아도..

728x90
반응형