이전에 유니티 이벤트를 사용하기 위한 글을 작성했었다.
[Unity] 유니티의 이벤트 - Action이벤트
유니티에서 함수를 대신해서 작동하게 하는 문법이 세가지 있다. 델리게이트 : 함수 포인터Action : 리턴이 없는 값 (void 리턴)Func : 리턴이 있는값 (값 리턴) 하나하나 살펴보자. 1. delegate델리게
freeedeveloper.tistory.com
Action과 사용법은 비슷하나, 이 에셋을 사용하면 좀 더 수월하게 코드를 작성 할 수 있을것 같아서 사용중이다.
에셋의 구매링크는 아래에 있다.
Signaler | 기능 통합 | Unity Asset Store
Use the Signaler from echo17 on your next project. Find this integration tool & more on the Unity Asset Store.
assetstore.unity.com
가격은 $20 이다. 생각보다 비싸지만, 그래도 유니티 에셋은 돈값하니깐, 살만한 에셋인것 같다.
Signaler는 echo17에서 만든 에셋이다. 팀 단위의 작업에서 발생하는 충돌을 줄이기 위한 에셋이라고 생각하면 될듯하다.
사용법은 Action을 구현하는것과 거의 유사하다.
일단, Signaler에는 세가지 함수가 있다. 사실상 세가지 함수를 사용하는 방법만 알면 금방 적용해 사용할 수 있다.
0. Subscribe
이전에 설명한 Action에서도 구독이라는 개념을 설명했던것 같은데, Signaler도 마찬가지로 구독이라는 시스템을 사용한다.
일단, using선언을 사용해 Signaler를 사용할 수 있도록 설정해주자.
using echo17.Singaler.Core;
Signaler를 사용하기 위해선, 구독을 하던, 호출을 하던 모두 위의 using을 선언해야한다.
예를 들어서 아래의 구조체가 있다고 가정하자.
public struct RequestMySignal { }
이런 구조체가 있다고 가정하자. (아래 설명에서도 이 구조체를 사용할것이다.)
이전 Action에서 설명했듯, Enable되는 시점에서 이 구조체를 사용하는 함수를 구독하면된다.
Signaler에서 구독할 수 있는 함수의 구조는 다음과 같다.
public bool OnRequestMySignal (RequestMySignal signal){
//구현부
return true;
}
항상 입력값은 구조체를 입력받는 형태로 작성해야한다. 입력값에 입력된 구조체를 사용해 스크립트 간, 신호를 보내고 통신한다고 생각하면 될 듯 하다.
그리고 구독은 다음과 같이 한다.
public class Test : Monobehavior, ISubscirbe
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
//위의 함수 구현부
}
이런식으로, 구독하고싶은 클래스와, OnRequestMySignal이라는 함수를 받겠다는 의미로 구현하면 된다.
그리고, Subscribe를 사용하려면 ISubscirbe를 상속 받아야한다.
1. UnSubscirbe
Action과 마찬가지로 Disable되는 시점에는 구독 해제를 해줘야 한다.
public class Test : Monobehavior, ISubscirber
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
private void OnDisable(){
Signaler.Instance.UnSubscirbe<RequestMySignal>(this, OnRequestMySignal);
}
...
}
그럼 이런식이 된다.
2. Broadcast
이제, 신호를 호출해보자.
public class Test2 : Monobehavior, IBroadcaster
{
...
public void TestMethod(){
Signaler.Instance.Broadcast(this, new RequestMySignal(){ };
}
}
이런식으로 호출 할 수 있다.
3. 신호에 데이터를 추가하기
만약, 구조체에 데이터를 함꼐 전송하려면 어떻게 하면 될까?
public struct RequestMySignal { public int data; }
int형 data를 신호에 전달한다고 생각해보자.
일단, 위의 Broadcast에서 신호를 전달하려면 이렇게 한다.
public class Test2 : Monobehavior, IBroadcaster
{
...
public void TestMethod(){
Signaler.Instance.Broadcast(this, new RequestMySignal(){ data = 1 };
}
}
이런식으로, 구조체에 선언된 변수에 값을 대입해주면 된다.
new선언 뒤의 RequestMySignal이라는 구조체가 아니라 다른 구조체가 온다면, data라는 변수는 사용할 수 없게 된다.
즉, 구조체에 선언된 변수에만 접근 가능하다.
public class Test : Monobehavior, ISubscirber
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
private void OnDisable(){
Signaler.Instance.UnSubscirbe<RequestMySignal>(this, OnRequestMySignal);
}
public bool OnRequestMySignal (RequestMySignal signal){
Debug.Log(signal.data);
return true;
}
}
위의 코드를 전부 합쳐봤다. 지금 구독을 담당하는 Test클래스의 함수 중, OnRequestMySignal을 보면, Debug를 사용해 signal에서 넘어오는 데이터를 출력하고 있다.
즉, Broadcast를 사용해 이벤트를 호출한다면, 구독하고있는 모든 클래스에서 특정 함수에 데이터를 전달해 함수를 작동시킬 수 있게 되는것이다.
솔직히, 이벤트를 구현하는 코딩은 처음 봤을땐, 뭔소린가 싶을수도 있는데 적응되면 이만큼 편한게 없다.
더 익숙해지려면 좀 더 연습을 해 볼 필요가 있을것 같다.
'Develop > Unity' 카테고리의 다른 글
무료 에셋 정리 (2) | 2025.03.20 |
---|---|
[Unity] 외부의 사진을 앱 내부로 가져와보자 - Native Gallery (0) | 2024.11.22 |
[Unity] Hierarchy를 정리해보자 (Hierarchy Designer) (0) | 2024.11.04 |
[Unity] 유니티의 이벤트 - Action이벤트 (0) | 2024.10.24 |
[Unity] 유니티에서 라디오버튼 구현하기 (Unity RadioButton) (0) | 2024.07.22 |
이전에 유니티 이벤트를 사용하기 위한 글을 작성했었다.
[Unity] 유니티의 이벤트 - Action이벤트
유니티에서 함수를 대신해서 작동하게 하는 문법이 세가지 있다. 델리게이트 : 함수 포인터Action : 리턴이 없는 값 (void 리턴)Func : 리턴이 있는값 (값 리턴) 하나하나 살펴보자. 1. delegate델리게
freeedeveloper.tistory.com
Action과 사용법은 비슷하나, 이 에셋을 사용하면 좀 더 수월하게 코드를 작성 할 수 있을것 같아서 사용중이다.
에셋의 구매링크는 아래에 있다.
Signaler | 기능 통합 | Unity Asset Store
Use the Signaler from echo17 on your next project. Find this integration tool & more on the Unity Asset Store.
assetstore.unity.com
가격은 $20 이다. 생각보다 비싸지만, 그래도 유니티 에셋은 돈값하니깐, 살만한 에셋인것 같다.
Signaler는 echo17에서 만든 에셋이다. 팀 단위의 작업에서 발생하는 충돌을 줄이기 위한 에셋이라고 생각하면 될듯하다.
사용법은 Action을 구현하는것과 거의 유사하다.
일단, Signaler에는 세가지 함수가 있다. 사실상 세가지 함수를 사용하는 방법만 알면 금방 적용해 사용할 수 있다.
0. Subscribe
이전에 설명한 Action에서도 구독이라는 개념을 설명했던것 같은데, Signaler도 마찬가지로 구독이라는 시스템을 사용한다.
일단, using선언을 사용해 Signaler를 사용할 수 있도록 설정해주자.
using echo17.Singaler.Core;
Signaler를 사용하기 위해선, 구독을 하던, 호출을 하던 모두 위의 using을 선언해야한다.
예를 들어서 아래의 구조체가 있다고 가정하자.
public struct RequestMySignal { }
이런 구조체가 있다고 가정하자. (아래 설명에서도 이 구조체를 사용할것이다.)
이전 Action에서 설명했듯, Enable되는 시점에서 이 구조체를 사용하는 함수를 구독하면된다.
Signaler에서 구독할 수 있는 함수의 구조는 다음과 같다.
public bool OnRequestMySignal (RequestMySignal signal){
//구현부
return true;
}
항상 입력값은 구조체를 입력받는 형태로 작성해야한다. 입력값에 입력된 구조체를 사용해 스크립트 간, 신호를 보내고 통신한다고 생각하면 될 듯 하다.
그리고 구독은 다음과 같이 한다.
public class Test : Monobehavior, ISubscirbe
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
//위의 함수 구현부
}
이런식으로, 구독하고싶은 클래스와, OnRequestMySignal이라는 함수를 받겠다는 의미로 구현하면 된다.
그리고, Subscribe를 사용하려면 ISubscirbe를 상속 받아야한다.
1. UnSubscirbe
Action과 마찬가지로 Disable되는 시점에는 구독 해제를 해줘야 한다.
public class Test : Monobehavior, ISubscirber
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
private void OnDisable(){
Signaler.Instance.UnSubscirbe<RequestMySignal>(this, OnRequestMySignal);
}
...
}
그럼 이런식이 된다.
2. Broadcast
이제, 신호를 호출해보자.
public class Test2 : Monobehavior, IBroadcaster
{
...
public void TestMethod(){
Signaler.Instance.Broadcast(this, new RequestMySignal(){ };
}
}
이런식으로 호출 할 수 있다.
3. 신호에 데이터를 추가하기
만약, 구조체에 데이터를 함꼐 전송하려면 어떻게 하면 될까?
public struct RequestMySignal { public int data; }
int형 data를 신호에 전달한다고 생각해보자.
일단, 위의 Broadcast에서 신호를 전달하려면 이렇게 한다.
public class Test2 : Monobehavior, IBroadcaster
{
...
public void TestMethod(){
Signaler.Instance.Broadcast(this, new RequestMySignal(){ data = 1 };
}
}
이런식으로, 구조체에 선언된 변수에 값을 대입해주면 된다.
new선언 뒤의 RequestMySignal이라는 구조체가 아니라 다른 구조체가 온다면, data라는 변수는 사용할 수 없게 된다.
즉, 구조체에 선언된 변수에만 접근 가능하다.
public class Test : Monobehavior, ISubscirber
private void OnEnable(){
Signaler.Instance.Subscribe<RequestMySignal>(this, OnRequestMySignal);
}
private void OnDisable(){
Signaler.Instance.UnSubscirbe<RequestMySignal>(this, OnRequestMySignal);
}
public bool OnRequestMySignal (RequestMySignal signal){
Debug.Log(signal.data);
return true;
}
}
위의 코드를 전부 합쳐봤다. 지금 구독을 담당하는 Test클래스의 함수 중, OnRequestMySignal을 보면, Debug를 사용해 signal에서 넘어오는 데이터를 출력하고 있다.
즉, Broadcast를 사용해 이벤트를 호출한다면, 구독하고있는 모든 클래스에서 특정 함수에 데이터를 전달해 함수를 작동시킬 수 있게 되는것이다.
솔직히, 이벤트를 구현하는 코딩은 처음 봤을땐, 뭔소린가 싶을수도 있는데 적응되면 이만큼 편한게 없다.
더 익숙해지려면 좀 더 연습을 해 볼 필요가 있을것 같다.
'Develop > Unity' 카테고리의 다른 글
무료 에셋 정리 (2) | 2025.03.20 |
---|---|
[Unity] 외부의 사진을 앱 내부로 가져와보자 - Native Gallery (0) | 2024.11.22 |
[Unity] Hierarchy를 정리해보자 (Hierarchy Designer) (0) | 2024.11.04 |
[Unity] 유니티의 이벤트 - Action이벤트 (0) | 2024.10.24 |
[Unity] 유니티에서 라디오버튼 구현하기 (Unity RadioButton) (0) | 2024.07.22 |