해결된 질문
작성
·
28
1
장애물 자체제작중 떨어지는 플랫폼을 구현하기위해 밟으면 1초뒤 떨어지는 장애물을 구현하려 하였는데
타이머의 코드를 짰는데도 밟은 직후 바로 떨어집니다, 어디가 문제일까요?
답변 2
1
안녕하세요. 용기있게 새로운 기능을 스스로 구현해보시고, 질문 남겨 주셔서 감사합니다.
코드 구현 자체만 보면 큰 문제는 없어 보이지만
"떨어지는플랫폼" 자체가 CharacterBody2D 노드로 되어 있어서
캐릭터가 위에서 밟으면 아래로 밀리게 되기 때문에,
밟자마자 바로 떨어지는 것처럼 느껴지실 수 있습니다. (캐릭터끼리 서로 밀어내듯이)
한번 캐릭터로 위에서 누르는 것이 아닌 옆에서 발판을 밀었을 때에도 밀리는지 확인해 보세요.
이 문제가 맞다면 인스펙터 탭에 있는 Collision 항목에서 자신을(Layer) 를 "지형" 에만 체크하시고 (강의에서는 2번에 할당했던 것으로 기억합니다)
충돌할 대상을(Mask) 전부 해제해 주시면,
캐릭터가 부딪혔을 때 플랫폼이 반응하지 않게 되어 원하시는 결과물이 나오지 않을까 생각됩니다.
추가로 발판의 velocity 는 중력을 받아 점차 빨리 떨어져야 하기 때문에(중력가속도)
velocity.y += 800 * delta
처럼 구현하시는 것이 좀 더 자연스러울 것 같습니다.
또한, CharacterBody2D 는 보통 캐릭터(사용자나, 다른 온라인 캐릭터)를 만들 때 사용하는 노드이기 때문에,
위처럼 발판을 만들 때는 RigidBody2D를 활용하시는 게 조금 더 자연스러울 수 있습니다.
다만, 위처럼 CharacterBody2D 를 활용하신 방법도 충분히 창의적이고 괜찮은 구현입니다.
또 궁금하신점 있으시다면 언제든지 질문 남겨주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김민석 님의 문제를 해결하는 데 도움을 드릴게요.
타이머가 의도한 대로 작동하지 않는 경우, 주로 코드에서 타이머의 설정 및 사용 방법에 문제가 있을 수 있습니다.
GDScript에서 타이머를 사용하는 일반적인 과정은 다음과 같습니다:
타이머 노드 설정:
Timer
노드를 추가합니다.Wait Time
을 1초로 설정합니다.One Shot
을 true
로 설정하여 타이머가 한 번만 실행되도록 설정합니다.타이머 실행 및 신호 연결:
Timer
노드의 start()
메서드를 호출하여 타이머를 시작합니다.timeout
신호를 사용할 수 있도록 연결합니다.코드 예:
# 타이머 노드를 변수에 연결
var timer = $Timer
# 플레이어가 플랫폼 위에 있을 때
func _on_Player_body_entered(body):
if body.name == "Player":
timer.start() # 타이머 시작
# 타이머 완료 후 호출되는 함수
func _on_Timer_timeout():
# 장애물이 떨어지는 동작을 구현
위 코드를 참고하여, timeout
신호에 연결된 함수에서 장애물이 실제로 떨어지는 동작을 구현하지 않았거나 타이머 설정이 맞지 않다면 수정해보세요. 더 구체적인 코드나 설정이 필요하시면 알려주세요.
추가적으로 궁금한 사항이 있으시면 언제든지 문의하기 페이지에서 질문해 주세요. 최선을 다해 도와드리겠습니다.
이미지 출처:
출처 URL: 인프런 FAQ