public void MovePlayer(float delta)
{
이전에 작성했던 _Process 함수의 내용을
여기에 붙여넣기
}
충돌 감지를 설정하기 전에
이전에 작성했던 _Process 함수 내부의
내용들이 지저분해서 따로 함수로 만들어서 사용한다.
using Godot;
using System;
public class Player : Area2D
{
[Export]
public int Speed = 400;
public Vector2 ScreenSize;
public override void _Ready()
{
ScreenSize = GetViewportRect().Size;
}
public override void _Process(float delta)
{
MovePlayer(delta);
}
public void MovePlayer(float delta)... //생략
}
그러면 최종적으로 위와 같이 정리가 된다.
[Signal]
public delegate void Hit();
Player Class 안에 [Signal] 키워드를 사용하여
Hit()라는 사용자 정의 시그널 함수를 정의한다.
Player 노드 선택 후 오른쪽 상단에
노드를 선택하여 시그널 목록을 보면
Hit() 함수가 추가가 된 것을 볼 수가 있다.
이 함수는 나중에 만들 몬스터 노드와 충돌 시
신호를 보내기 위한 함수이다.
시그널 목록에서 Area2D 밑에 있는
body_entered(body: Node)를 클릭하면
시그널을 메서드에 연결하는 창이 뜨고
받는 메서드의 이름을 OnPlayerBodyEntered로
바꾸어주고 연결을 해준다.
연결을 해주면 연결이 됐다고
초록색으로 바뀐다.
public void OnPlayerBodyEntered(PhysicsBody2D body)
{
Hide();
EmitSignal(nameof(Hit));
GetNode<CollisionShape2D>("CollisionShape2D").SetDeferred("disabled", true);
}
이제 다시 스크립트로 돌아와서 위의 함수를 추가해준다.
여기서 주의할 점은 함수의 이름은
위에서 시그널을 연결할 때 설정했던
이름으로 만들어줘야 한다.
이 함수는 몬스터와 충돌을 하면
Hide() 메서드를 사용해 Player가 사라지게 하고
EmitSignal() 메서드를 사용해 시그널 이름이
Hit인 시그널의 신호를 보낸다.
그리고 몬스터가 Player와 충돌이 날 때마다
신호를 계속 보내기 때문에
이 신호를 한 번만 보내게 하기 위해서
CollisionShape2D 노드를 가져온 뒤
SetDeferred() 메서드를 사용하여
Player의 충돌을 비활성화시킨다.
public override void _Ready()
{
ScreenSize = GetViewportRect().Size;
Hide();
}
그리고 게임을 시작하기 전에 플레어를
숨기기 위해서 _Ready() 함수에
Hide() 메서드를 추가를 한다.
public void Start(Vector2 pos)
{
Position = pos;
Show();
GetNode<CollisionShape2D>("CollisionShape2D").Disabled = false;
}
게임 시작을 위한 Start 함수를 하나 만든다.
이 함수는 Player의 Position을
파라미터의 pos로 설정하고 Show() 메서드를 사용해
숨긴 플레이어의 모습을 나타나게 하고
CollisionShape2D 노드를 가져와서
비활성화가 되어 있다면 Disabled를
false로 설정하여 활성화시킨다.
밑에는 전체적인 코드이다.
using Godot;
using System;
public class Player : Area2D
{
[Export]
public int Speed = 400;
[Signal]
public delegate void Hit();
public Vector2 ScreenSize;
public override void _Ready()
{
ScreenSize = GetViewportRect().Size;
Hide();
}
public override void _Process(float delta)
{
MovePlayer(delta);
}
public void OnPlayerBodyEntered(PhysicsBody2D body)
{
Hide();
EmitSignal(nameof(Hit));
GetNode<CollisionShape2D>("CollisionShape2D").SetDeferred("disabled", true);
}
public void Start(Vector2 pos)
{
Position = pos;
Show();
GetNode<CollisionShape2D>("CollisionShape2D").Disabled = false;
}
public void MovePlayer(float delta)... //생략
'게임 엔진 > Godot Engine' 카테고리의 다른 글
Godot Engine - 몬스터(Mob) 만들기 (0) | 2022.11.15 |
---|---|
Godot Engine - 이동 구현 (0) | 2022.11.13 |
Godot Engine - Visual Studio Code 연결 (0) | 2022.11.12 |
Godot Engine - Steam 설치시 C# 사용 (0) | 2022.11.12 |
Godot Engine - 애니메이션 추가 (0) | 2022.11.12 |