728x90
본 게시글은 고도엔진 공식문서에 작성된 Your first 2D game를 정리하였습니다.
GDScript
res://Mob.tscn
을 선택한다.- Scene 도크에서 Mob 노드를 선택한다.
- Attach Script 아이콘을 클릭한다.
- Attach Node Script 팝업창이 열리면 Path에서 파일명을
res://mob.gd
라고 입력한다. - GDScript는 파이썬과 유사한 코딩 스타일을 권장한다.(GDScript style guide)
- Create 버튼을 클릭하여 스크립트를 생성한다.
res://mob.gd
파일을 연다._ready()
함수 안에 아래의 코드를 추가한다._process(delta: float)
함수는 지운다.
func _ready():
var mob_types = $AnimatedSprite2D.sprite_frames.get_animation_names()
$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])
$AnimatedSprite2D.sprite_frames.get_animation_names()
함수를 사용하면 [GodotDocs][Your First 2D Game] 4. 적(Mob) 제작에서 추가했던 fly, swim, walk 애니메이션의 이름을 문자열 배열로 반환한다.randi() % n
을 사용할 경우, 0~(n-1) 사이의 값을 렌덤하게 반환한다.$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])
를 사용할 경우, fly, swim, walk 애니메이션 중 1개를 렌덤하게 재생하게 된다.
- Scene 도크에서 VisibleOnScreenNotifier2D 노드를 선택한다.
- Node 도크를 선택한 후 screen_exited() 시그널을 더블 클릭한다.
- Connect a Signal to a Method 팝업창이 열리면 Connect 버튼을 클릭하여 screen_exited() 시그널과 연결된
_on_visible_on_screen_notifier_2d_screen_exited()
함수를 추가한다.
_on_visible_on_screen_notifier_2d_screen_exited()
함수 안에queue_free()
함수를 추가한다.
func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
queue_free()
_on_visible_on_screen_notifier_2d_screen_exited()
함수는 Mob 노드가 화면 밖으로 나가면 자동 호출된다.queue_free()
함수는 노드를 게임에서 제거한다.- Mob 노드가 화면 밖으로 나가면 자동으로 게임에서 제거된다.
완성된 스크립트(GDScript)
extends RigidBody2D
func _ready() -> void:
var mob_types = $AnimatedSprite2D.sprite_frames.get_animation_names()
$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])
func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
queue_free()
C#
res://Mob.tscn
을 선택한다.- Scene 도크에서 Mob 노드를 선택한다.
- Attach Script 아이콘을 클릭한다.
- Attach Node Script 팝업창이 열리면 Language를 C# 으로 선택한다.
- C#을 선택하면 Path는 자동으로
res://Mob.cs
로 변경된다. - Create 버튼을 클릭하여 스크립트를 생성한다.
res://Mob.cs
파일을 연다._Ready()
메소드를 안에 아래의 코드를 추가한다._Process(double delta)
메소드는 지운다.
public override void _Ready()
{
var animatedSprite2D = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
var mobTypes = animatedSprite2D.SpriteFrames.GetAnimationNames();
animatedSprite2D.Play(mobTypes[GD.Randi() % mobTypes.Length]);
}
animatedSprite2D.SpriteFrames.GetAnimationNames()
메소드를 사용하면 [GodotDocs][Your First 2D Game] 4. 적(Mob) 제작에서 추가했던 fly, swim, walk 애니메이션의 이름을 문자열 배열로 반환한다.GD.Randi() % n
을 사용할 경우, 0~(n-1) 사이의 값을 렌덤하게 반환한다.animatedSprite2D.Play(mobTypes[GD.Randi() % mobTypes.Length])
를 사용할 경우, fly, swim, walk 애니메이션 중 1개를 렌덤하게 재생하게 된다.
- Scene 도크에서 VisibleOnScreenNotifier2D 노드를 선택한다.
- Node 도크를 선택한 후 screen_exited() 시그널을 더블 클릭한다.
- Connect a Signal to a Method 팝업창이 열리면 Receiver Method: 에 적힌 메소드의 이름을 OnVisibleOnScreenNotifier2DScreenExited 로 수정한 후, Connect 버튼을 클릭한다.
res://Mob.cs
파일을 열어void OnVisibleOnScreenNotifier2DScreenExited()
메소드를 추가한다.
OnVisibleOnScreenNotifier2DScreenExited()
메소 안에QueueFree()
함수를 추가한다.
public void OnVisibleOnScreenNotifier2DScreenExited()
{
QueueFree();
}
OnVisibleOnScreenNotifier2DScreenExited()
함수는 Mob 노드가 화면 밖으로 나가면 자동 호출된다.QueueFree()
함수는 노드를 게임에서 제거한다.- Mob 노드가 화면 밖으로 나가면 자동으로 게임에서 제거된다.
완성된 스크립트(C#)
using Godot;
using System;
public partial class Mob : RigidBody2D
{
public override void _Ready()
{
var animatedSprite2D = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
var mobTypes = animatedSprite2D.SpriteFrames.GetAnimationNames();
animatedSprite2D.Play(mobTypes[GD.Randi() % mobTypes.Length]);
}
public void OnVisibleOnScreenNotifier2DScreenExited()
{
QueueFree();
}
}
'Godot' 카테고리의 다른 글
[GodotDocs][Your First 2D Game] 7. 게임 씬 코딩(GDScript) (0) | 2024.03.03 |
---|---|
[GodotDocs][Your First 2D Game] 6. 게임 씬 제작 (2) | 2024.02.29 |
[GodotDocs][Your First 2D Game] 4. 적(Mob) 제작 (0) | 2024.02.16 |
[GodotDocs][Your First 2D Game] 3. 플레이어 코딩(C#) (2) | 2024.02.11 |
[GodotDocs][Your First 2D Game] 3. 플레이어 코딩(GDScript) (2) | 2024.02.06 |