본문 바로가기

프로그래밍/게임개발

Godot Engine 사용기 2

1. 물리엔진

Area2D : 충돌 판정 확인

StaticBody2D : 충돌, 이동불가

CharacterBody2D : 충돌, 이동가능 (code)

RigidBody2D : 충돌, 이동가능 (physics)

collision shape가 있어야 사용가능

 

유니티에서의 rigidbody/collision 와 비슷한 개념인 것 같다.

move_and_slide() : velocity 기반으로 이동 구현함

 

2. Instatiate

extends Node2D

var coin_scene: PackedScene = load("res://tscn/coin.tscn")

func _on_timer_timeout() -> void:
	var coin = coin_scene.instantiate()
	$Coins.add_child(coin)

 

Timer Node를 이용한 Instantiate

coin_scene에 해당하는 값을 불러와서 특정 시간에 한번씩 instantiate한다.

 

3. Signal

# player.gd
signal laser

func _process(delta: float) -> void:
	if Input.is_action_just_pressed("shoot") :
		laser.emit()
              
#############################
# level.gd
func _on_player_laser() -> void:
	print("shoot")

코드에서와 같이 서로다른 scene에 존재하는 함수에 접근을 하고 싶을때 사용하는 변수

해당 예시에서는 player코드에서 signal을 만들었고 level코드에서 _on_player_laser함수를 player가 주체로 실행함.

player가 shoot을 눌렀을 때, 외부에 있는 level 함수를 실행. 

 

4. Global Position과 Position

if Input.is_action_just_pressed("shoot") :
	laser.emit($Marker2D.global_position)

해당 코드에서 Marker2D node의 위치에서 생성되게 만드는 부분인데 position으로 설정할경우 player의 marker의 상대위치로만 계산하고 global_position으로 설정해야 절대 좌표기준으로 생성한다. 사용해 유의