본문 바로가기
디지털노마드

[챗GPT게임개발16] ChatGPT를 활용하여 점프 패드(Jump Pad) 추가(2)

by 인텔리노마드라이프 2024. 5. 8.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

오늘은 ChatGPT를 활용하여 Unity 플랫포머 게임에서 점프 패드(jump pad) 기능을 추가(2) 해볼께요.

 

참고로 점프 패드는 2회에 걸쳐 게시해요.

제목 내용
[챗GPT게임개발15]ChatGPT를 활용하여 점프 패드(Jump Pad) 추가(1) 점프 패드 기능 구현을 위한 소스 코드 이해
[챗GPT게임개발16]ChatGPT를 활용하여 점프 패드(Jump Pad) 추가(2) 점프 패드 추가 실습

 

 ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.

점프 패드 실습 과제 내용

이번 시간에는 아래 실습 과제 내용을 점프 패드를 추가해볼거예요.

[실습과제 내용]
1. PlatformerJumpPad 용으로 2개의 스프라이트를 활용
    - 첫번째 스프라이트는 점프 패드가 활성화 되기 전에 사용
    - 두번째는 점프 패트가 활성화 된 후
2. 위 2개의 스프라이트로 플레이어가 점프에 있을 때 현실적으로 표현해줘

 

다음은 실습에 사용될 스프라이트예요. 

[점프패드 활성화에 따른 스프라이트]

 

점프 패드 실습 과제 내용을 챗GPT에게 만들어달라고 했어요.

[질문] 안녕 ChatGPT, 아래 내용을 검토해서 정리해줘 

   1. PlatformerJumpPad 용으로 2개의 스프라이트를 활용

       - 첫번째 스프라이트는 점프 패드가 활성화 되기 전에 사용
       - 두번째는 점프 패트가 활성화 된 후
   2. 위 2개의 스프라이트로 아래 코드를 플레이어가 점프에 있을 때 현실적으로 표현해줘
using UnityEngine;
using Platformer.Mechanics;

public class PlatformerJumpPad : MonoBehaviour
{
    public float verticalVelocity;

    void OnTriggerEnter2D(Collider2D other)
    {
        var rb = other.attachedRigidbody;
        if (rb == null) return;
        
        var player = rb.GetComponent<PlayerController>();
        if (player == null) return;
       
        // 플레이어 상태 출력
        Debug.Log("Player State: " + player.jumpState);

        // 플레이어가 Jumping 상태일 때만 속도 추가
        if (player.jumpState == PlayerController.JumpState.InFlight)
        {
            AddVelocity(player);
        }
    }

    void AddVelocity(PlayerController player)
    {
        player.velocity.y = verticalVelocity;
    }
}
[답변]
Unity에서 플레이어가 점프 패드를 사용할 때 그리고 그 상태에 따라 다른 스프라이트를 보여주는 기능을 구현하려면, 스크립트에 스프라이트를 변경하는 코드를 추가해야 합니다. 두 가지 스프라이트를 사용하여 점프 패드가 활성화되기 전과 후를 시각적으로 표현할 수 있습니다. 아래는 그러한 기능을 구현한 예시 코드입니다.

스크립트 수정

using UnityEngine;
using Platformer.Mechanics;

public class PlatformerJumpPad : MonoBehaviour
{
    public float verticalVelocity;
    public SpriteRenderer spriteRenderer; // SpriteRenderer 컴포넌트 참조
    public Sprite inactiveSprite; // 점프 패드 비활성화 시 사용할 스프라이트
    public Sprite activeSprite;   // 점프 패드 활성화 시 사용할 스프라이트

    void Start()
    {
        spriteRenderer.sprite = inactiveSprite; // 초기 스프라이트를 비활성화 스프라이트로 설정
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        var rb = other.attachedRigidbody;
        if (rb == null) return;
        
        var player = rb.GetComponent<PlayerController>();
        if (player == null) return;
       
        Debug.Log("Player State: " + player.jumpState);

        // 플레이어가 InFlight 상태일 때만 속도 추가 및 스프라이트 변경
        if (player.jumpState == PlayerController.JumpState.InFlight)
        {
            AddVelocity(player);
            spriteRenderer.sprite = activeSprite; // 활성화 스프라이트로 변경
        }
    }

    void AddVelocity(PlayerController player)
    {
        player.velocity.y = verticalVelocity;
    }

    void OnTriggerExit2D(Collider2D other)
    {
        // 플레이어가 점프 패드에서 벗어나면 스프라이트를 비활성화 상태로 변경
        spriteRenderer.sprite = inactiveSprite;
    }
}​

코드 설명
1. SpriteRenderer 참조: 스크립트에 SpriteRenderer 컴포넌트를 참조하여 직접 스프라이트를 변경할 수 있습니다.
2. 스프라이트 초기화: Start 메소드에서 점프 패드의 초기 스프라이트를 비활성화 상태로 설정합니다.
3. 스프라이트 변경: 플레이어가 점프 패드와 상호작용하고 InFlight 상태에 있을 때, 활성화 스프라이트로 변경합니다. 이 변경은 플레이어가 점프 패드를 사용하는 순간에만 발생합니다.
4. 스프라이트 재설정: OnTriggerExit2D 메소드를 추가하여, 플레이어가 점프 패드에서 벗어나면 스프라이트를 다시 비활성화 상태로 변경합니다.

사용 방법
- 위 코드를 Unity 에디터에서 PlatformerJumpPad 스크립트에 적용합니다.
- Unity 인스펙터에서 점프 패드 오브젝트에 SpriteRenderer 컴포넌트를 추가하고, inactiveSprite와 activeSprite 필드에 각각의 스프라이트를 할당합니다.
- 게임을 실행하여 플레이어가 점프 패드와 상호작용하는 모습을 관찰합니다. 스프라이트가 상태에 따라 변경되는지 확인하세요.

이 수정을 통해 점프 패드의 활성화와 비활성화 상태가 시각적으로 표현되며, 플레이어의 상태에 따라 동적으로 반응하는 요소를 게임에 추가할 수 있습니다.

 

추가로 사운드 효과도 넣어달라고 했어요.

[질문] 안녕 ChatGPT, 아래 내용을 검토해서 수정해줘  

public AudioClip ouch;
위 코드를 PlatformerJumpPad에 추가해주고 AddVelocity(player) 호출 전에 오디오를 플레이해줘
[답변]
PlatformerJumpPad 스크립트에 오디오 클립을 추가하고 플레이어가 점프 패드를 사용할 때 해당 오디오를 재생하는 기능을 구현하려면 몇 가지 단계를 거쳐야 합니다. 아래에는 오디오 클립을 추가하고, AddVelocity 메소드를 호출하기 전에 오디오를 재생하는 방법을 설명하는 코드 예시를 제공합니다.

스크립트 수정

using UnityEngine;
using Platformer.Mechanics;

public class PlatformerJumpPad : MonoBehaviour
{
    public float verticalVelocity;
    public SpriteRenderer spriteRenderer; // SpriteRenderer 컴포넌트 참조
    public Sprite inactiveSprite; // 점프 패드 비활성화 시 사용할 스프라이트
    public Sprite activeSprite;   // 점프 패드 활성화 시 사용할 스프라이트
    public AudioClip activationSound; // 점프 패드 활성화 시 재생할 오디오 클립
    private AudioSource audioSource; // 오디오 소스 컴포넌트 참조

    void Start()
    {
        spriteRenderer.sprite = inactiveSprite; // 초기 스프라이트를 비활성화 스프라이트로 설정
        audioSource = GetComponent<AudioSource>(); // 오디오 소스 컴포넌트를 가져오기
        if (audioSource == null)
        {
            audioSource = gameObject.AddComponent<AudioSource>(); // 없으면 오디오 소스 컴포넌트 추가
        }
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        var rb = other.attachedRigidbody;
        if (rb == null) return;

        var player = rb.GetComponent<PlayerController>();
        if (player == null) return;

        Debug.Log("Player State: " + player.jumpState);

        // 플레이어가 InFlight 상태일 때만 속도 추가, 스프라이트 및 오디오 변경
        if (player.jumpState == PlayerController.JumpState.InFlight)
        {
            AddVelocity(player);
            spriteRenderer.sprite = activeSprite; // 활성화 스프라이트로 변경
            PlayActivationSound(); // 오디오 재생
        }
    }

    void AddVelocity(PlayerController player)
    {
        player.velocity.y = verticalVelocity;
    }

    void OnTriggerExit2D(Collider2D other)
    {
        // 플레이어가 점프 패드에서 벗어나면 스프라이트를 비활성화 상태로 변경
        spriteRenderer.sprite = inactiveSprite;
    }

    // 활성화 오디오 클립 재생
    void PlayActivationSound()
    {
        if (activationSound != null)
        {
            audioSource.PlayOneShot(activationSound);
        }
    }
}

코드 설명
- 오디오 컴포넌트 설정: Start 메소드에서 AudioSource 컴포넌트를 게임 오브젝트에서 가져오거나, 없을 경우 새로 추가합니다. 이 컴포넌트는 오디오 클립을 재생하는 데 사용됩니다.
- 오디오 클립 변수: public AudioClip ouch; 선언으로 스크립트에 오디오 클립을 저장할 수 있는 공개 변수를 추가합니다. Unity 인스펙터에서 이 변수에 오디오 클립을 할당할 수 있습니다.
- 오디오 재생 로직: OnTriggerEnter2D 메소드에서, 플레이어가 InFlight 상태일 때 PlaySound 메소드를 호출하여 오디오 클립을 재생합니다. 이 메소드는 AudioSource 컴포넌트를 사용해 PlayOneShot 메소드로 오디오 클립을 재생합니다.

사용 방법
- 위의 코드를 Unity 프로젝트의 PlatformerJumpPad 스크립트로 사용합니다.
- Unity 인스펙터에서 점프 패드 오브젝트에 AudioSource 컴포넌트와 ouch 오디오 클립을 추가하고 설정합니다.
- 게임을 실행하여 플레이어가 점프 패드와 상호작용할 때 오디오가 제대로 재생되는지 확인합니다.

이 수정을 통해 점프 패드가 활성화될 때 오디오 효과를 추가함으로써 사용자 경험을 향상시킬 수 있습니다.

 

이제 ChatGPT가 알려준 대로 적용해볼께요

1. 점프 패드 오브젝트에 SpriteRenderer 컴포넌트를 추가
2. inactiveSprite와 activeSprite 필드에 각각의 스프라이트를 할당
3. AudioSource 컴포넌트와 ouch 오디오 클립을 추가하고 설정

 

[설정 화면]

 

4. 게임을 실행하여 플레이어가 점프 패드와 상호작용할 때 실행이 제대로 되는 지 확인

 

 

 

오늘은 ChatGPT를 활용하여 Unity 플랫포머 게임에서 점프 패드(jump pad) 기능을 추가했어요.

다음 시간에는 가속 패드와 트리거 하는 방법을 살펴볼께요.

 

[휴식 중인 인텔리원스튜디오 CEO. 인텔리노마드라이프와 함께 행복하세요 from IntelliOneStudio ]

 

지금까지,

언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.

감사합니다.

728x90