본문 바로가기

Programming/Godot

고도엔진 2D 슈팅게임 - 3 Enemy생성1

반응형

2 타입의 Enemy 생성

Area2D 노드를 추가하여 enemy로 변경

- colisionShape2D 추가 > RectangleShape2D > Extents (16,16) 설정

- enemy 스크립트 추가

- y 속도 100으로 설정

- 화면을 넘어가면 삭제되도록 수정

 

- 첫번째 enemy: enemy_kamikaze

- sprite에 enemy_kamikaze 이미지를 불러옴

- CollisionShape2D에서 Make Unique를 설정하고, 사이즈를 12,16으로 변경

- 속도를 350으로 설정

- enemy spawn

- 자주 사용하는 함수를 utils.gd로 묶어서 스크립트 수정

# script: utils

extends Node

var main_node setget , _get_main_node
var view_size setget , _get_view_size
var mouse_pos setget , _get_mouse_pos

func _ready():
	pass

func create_timer(wait_time):
	var timer = Timer.new()
	timer.set_wait_time(wait_time)
	timer.set_one_shot(true)
	timer.connect("timeout", timer, "queue_free")
	add_child(timer)
	timer.start()
	return timer
	pass

func choose(choises):
	randomize()
	var rand_index = randi() % choises.size()
	return choises[rand_index]
	pass

func find_node(node):
	return self.main_node.find_node(node)
	pass

func attach(src_node, src_signal, trg_node, trg_func):
	if typeof(src_node) == TYPE_STRING:
		src_node = find_node(src_node)
	
	if typeof(trg_node) == TYPE_STRING:
		trg_node = find_node(trg_node)
	
	if src_node != null and trg_node != null:
		src_node.connect(src_signal, trg_node, trg_func)
	pass

func remote_call(src_node, method, arg0 = null, arg1 = null):
	src_node = find_node(src_node)
	
	if src_node and src_node.has_method(method):
		if arg0 and arg1:
			return src_node.call(method, arg0, arg1)
		if arg0:
			return src_node.call(method, arg0)
		
		return src_node.call(method)
	pass

func _get_mouse_pos():
	return get_viewport().get_mouse_pos()
	pass

func _get_main_node():
	var root = get_tree().get_root()
	return root.get_child( root.get_child_count()-1 )
	pass

func _get_view_size():
	return get_tree().get_root().get_visible_rect().size
	pass

- Project Settings > Autoload에 utils.gd 추가

- 수정된 함수 (계속 랜덤시기에 생성하는 부분 추가 while, yield)

- world씬에 추가

반응형