강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김민석님의 프로필 이미지
김민석

작성한 질문수

Godot Engine 마리오라이크 2D PC 게임 만들기

타이머가 적용이 되지않습니다.

해결된 질문

작성

·

28

1

캡처.PNG.webp

장애물 자체제작중 떨어지는 플랫폼을 구현하기위해 밟으면 1초뒤 떨어지는 장애물을 구현하려 하였는데
타이머의 코드를 짰는데도 밟은 직후 바로 떨어집니다, 어디가 문제일까요?

답변 2

1

코드쉼터님의 프로필 이미지
코드쉼터
지식공유자

안녕하세요. 용기있게 새로운 기능을 스스로 구현해보시고, 질문 남겨 주셔서 감사합니다.

 

코드 구현 자체만 보면 큰 문제는 없어 보이지만

"떨어지는플랫폼" 자체가 CharacterBody2D 노드로 되어 있어서

캐릭터가 위에서 밟으면 아래로 밀리게 되기 때문에,

밟자마자 바로 떨어지는 것처럼 느껴지실 수 있습니다. (캐릭터끼리 서로 밀어내듯이)

한번 캐릭터로 위에서 누르는 것이 아닌 옆에서 발판을 밀었을 때에도 밀리는지 확인해 보세요.

이 문제가 맞다면 인스펙터 탭에 있는 Collision 항목에서 자신을(Layer) 를 "지형" 에만 체크하시고 (강의에서는 2번에 할당했던 것으로 기억합니다)

충돌할 대상을(Mask) 전부 해제해 주시면,

캐릭터가 부딪혔을 때 플랫폼이 반응하지 않게 되어 원하시는 결과물이 나오지 않을까 생각됩니다.

추가로 발판의 velocity 는 중력을 받아 점차 빨리 떨어져야 하기 때문에(중력가속도)

velocity.y += 800 * delta

처럼 구현하시는 것이 좀 더 자연스러울 것 같습니다.

 

또한, CharacterBody2D 는 보통 캐릭터(사용자나, 다른 온라인 캐릭터)를 만들 때 사용하는 노드이기 때문에,

위처럼 발판을 만들 때는 RigidBody2D를 활용하시는 게 조금 더 자연스러울 수 있습니다.

다만, 위처럼 CharacterBody2D 를 활용하신 방법도 충분히 창의적이고 괜찮은 구현입니다.

 

또 궁금하신점 있으시다면 언제든지 질문 남겨주세요.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.
김민석 님의 문제를 해결하는 데 도움을 드릴게요.

타이머가 의도한 대로 작동하지 않는 경우, 주로 코드에서 타이머의 설정 및 사용 방법에 문제가 있을 수 있습니다.
GDScript에서 타이머를 사용하는 일반적인 과정은 다음과 같습니다:

  1. 타이머 노드 설정:

    • Scene에 Timer 노드를 추가합니다.
    • Wait Time을 1초로 설정합니다.
    • One Shottrue로 설정하여 타이머가 한 번만 실행되도록 설정합니다.
  2. 타이머 실행 및 신호 연결:

    • 특정 조건을 만족할 때 Timer 노드의 start() 메서드를 호출하여 타이머를 시작합니다.
    • 타이머 노드의 timeout 신호를 사용할 수 있도록 연결합니다.
  3. 코드 예:

    # 타이머 노드를 변수에 연결
    var timer = $Timer
    
    # 플레이어가 플랫폼 위에 있을 때
    func _on_Player_body_entered(body):
        if body.name == "Player":
            timer.start()  # 타이머 시작
    
    # 타이머 완료 후 호출되는 함수
    func _on_Timer_timeout():
        # 장애물이 떨어지는 동작을 구현
    

위 코드를 참고하여, timeout 신호에 연결된 함수에서 장애물이 실제로 떨어지는 동작을 구현하지 않았거나 타이머 설정이 맞지 않다면 수정해보세요. 더 구체적인 코드나 설정이 필요하시면 알려주세요.

추가적으로 궁금한 사항이 있으시면 언제든지 문의하기 페이지에서 질문해 주세요. 최선을 다해 도와드리겠습니다.
이미지 출처: Godot Engine Interface
출처 URL: 인프런 FAQ

김민석님의 프로필 이미지
김민석

작성한 질문수

질문하기