반응형

추가한 캐릭터를 삭제해 보자.

 

Sprite2D 노드를 추가하고 이름을 Character로 바꾼다. Texture 속성에 이미지를 넣고 스크립트를 추가한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using Godot;
 
public partial class Character : Sprite2D
{
    // 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 async void _Process(double delta)
    {
        await ToSignal(GetTree().CreateTimer(1.0), SceneTreeTimer.SignalName.Timeout);
        QueueFree();
    }
}
 

 

 

1초 대기 후 큐에서 삭제하는 스크립트를 작성한다.

 

새로운 씬을 만들고 Node 노드를 생성해서 Main으로 이름을 바꾸고 스크립트를 추가한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using Godot;
 
public partial class Main : Node
{
    [Export]
    public PackedScene CharacterScene { get; set; }
 
    // 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("lclick"))
        {
            Character character = CharacterScene.Instantiate<Character>();
            character.Position = GetViewport().GetMousePosition();
 
            AddChild(character);
        }
    }
}
 

 

 

왼쪽 마우스 버튼을 클릭하면 캐릭터를 생성하는 스크립트를 작성한다.

 

 

Project Settings - Input Map 에 마우스 클릭 액션을 추가한다.

 

Main 씬에서 Build 버튼을 클릭한다. Inspector에 CharacterScene 속성이 생기면 Character.tscn을 추가한다.

 

Main 씬을 실행하고 왼쪽 버튼을 클릭하면 스프라이트가 표시되고 1초 후 사라진다.

 

이번엔 특정 액션(마우스 오른쪽 버튼 클릭) 발생시 모든 캐릭터를 한번에 삭제해 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using Godot;
 
public partial class Character : Sprite2D
{
    // 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 async void _Process(double delta)
    {
        //await ToSignal(GetTree().CreateTimer(1.0), SceneTreeTimer.SignalName.Timeout);
        //QueueFree();
    }
}
 

 

 

캐릭터 클래스에서 1초 대기 후 큐에서 삭제하는 코드를 삭제한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using Godot;
 
public partial class Main : Node
{
    [Export]
    public PackedScene CharacterScene { get; set; }
 
    // 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("lclick"))
        {
            Character character = CharacterScene.Instantiate<Character>();
            character.Position = GetViewport().GetMousePosition();
 
            AddChild(character);
        }
        if (Input.IsActionJustPressed("rclick"))
        {
            GetTree().CallGroup("chargroup", Node.MethodName.QueueFree);
        }
    }
}
 

 

 

메인 클래스에서 마우스 우클릭시 "chargroup"에 속한 노드의 QueueFree()를 호출하는 코드를 작성한다.

 

Character씬에서 Node 탭 - Group 탭에서 chargroup을 추가한다.

 

Godot의 group은 다른 게임엔진의 tag와 같은 역할을 한다.

 

마우스 왼쪽 버튼을 클릭하면 스프라이트가 생성되고 오른쪽 버튼을 클릭하면 모두 사라진다.

 

※ 참고

Node - void QueueFree()

Groups

 

반응형
Posted by J-sean
: