반응형

사용자 시그널을 받아 보자.

 

Node2D를 생성하고 스크립트(Receiver.cs)를 붙여준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using Godot;
 
public partial class Receiver : Node2D
{
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
        Sender sender = GetNode<Sender>("Sprite2D");
        // "Sprite2D" is the name of the Node in the scene.
        sender.Accept += OnAccept;
    }
 
    private void OnAccept()
    {
        GD.Print("Accept!!");
    }
 
    // Called every frame. 'delta' is the elapsed time since the previous frame.
    public override void _Process(double delta)
    {
    }
}
 

 

 

Accept 시그널(엔터키)을 받는 스크립트를 작성한다.

여기서는 Receiver에서 Sender의 Accept 시그널을 OnAccept()에 연결했다.

Sender 스크립트가 포함된 노드(Sprite2D)의 에디터 - Signal - Accept - 우클릭 - Connect.. 로 연결해도 된다.

 

Sprite2D를 생성하고 스크립트(Sender.cs)를 붙여준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using Godot;
 
public partial class Sender : Sprite2D
{
    [Signal]
    public delegate void AcceptEventHandler();    
 
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
    }
 
    // Called every frame. 'delta' is the elapsed time since the previous frame.
    public override void _Process(double delta)
    {
        if (Input.IsActionJustPressed("ui_accept"))
        {
            EmitSignal(SignalName.Accept);
        }
    }
}
 

 

 

Accept 시그널(엔터키)을 보내는 스크립트를 작성한다.

시그널 delegate 이름은 [시그널 이름 + EventHandler] 형식으로 작성한다. 위 코드의 경우 시그널 이름이 Accept이고 delegate 이름은 AcceptEventHandler이다.

 

※ 참고

위에서 Sender 스크립트가 포함된 노드의 에디터에서 시그널을 연결해도 된다고 했지만 그냥 Receiver 스크립트에서 연결했다.

Sender 스크립트에서 아래와 같이 Signal을 연결할 수도 있다.


// Accept 시그널을 Receiver 노드의 OnAccept 메서드에 연결한다. _Ready()에 작성하면 된다.
Connect("Accept", new Callable(GetNode<Receiver>("/root/ Receiver "), " OnAccept "));
//Connect("Accept", new Callable(GetNode< Receiver >("../../ Receiver "), " OnAccept ")); // 이렇게 해도 OK
//Accept += GetNode< Receiver >("../../ Receiver ").OnAccept; // 이렇게 해도 OK

 

 

씬을 저장하고 게임을 실행하면 엔터키가 눌릴 때마다 Output 창에 Accept!! 메세지가 출력된다.

 

※ 참고

Using signals

C# signals

 

반응형
Posted by J-sean
: