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

[챗GPT게임개발19] ChatGPT를 활용하여 가속 패드와 Jiggler 추가하기

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

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

오늘은 ChatGPT를 활용하여 Unity 플랫포머 게임에서 가속 패드와 Jiggler 를 추가해볼께요.

[오늘의 목표]
1. 가속 패드와 Jiggler 소스 코드를 살펴보기
2. 가속 패드와 Jiggler 소스 코드를 활용하는 방법을 알아보기 
3. 스크립트 적용을 통해 가속 패드와 Jiggler 설정
4. 실습하기

 

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

PlatformerSpeedPad 스크립트 살펴보기 

Platfomer Microgame에서 제공하는 PlatformerSpeedPad 코드를 보면 다음과 같아요. 

using System.Collections;
using UnityEngine;
using Platformer.Mechanics;

public class PlatformerSpeedPad : MonoBehaviour
{
    public float maxSpeed;

    [Range (0, 5)]
    public float duration = 1f;

    void OnTriggerEnter2D(Collider2D other){
        var rb = other.attachedRigidbody;
        if (rb == null) return;
        var player = rb.GetComponent<PlayerController>();
        if (player == null) return;
        player.StartCoroutine(PlayerModifier(player, duration));
    }

    IEnumerator PlayerModifier(PlayerController player, float lifetime){
        var initialSpeed = player.maxSpeed;
        player.maxSpeed = maxSpeed;
        yield return new WaitForSeconds(lifetime);
        player.maxSpeed = initialSpeed;
    }

}

[소스 설명]

이 PlatformerSpeedPad 스크립트는 유니티에서 2D 플랫포머 게임용으로 사용되며, 플레이어가 이 스피드 패드를 밟았을 때 일정 시간 동안 플레이어의 최대 이동 속도를 변경하는 기능을 제공합니다. 구체적으로 스크립트의 동작을 설명하면 다음과 같습니다:

변수 설명

  • public float maxSpeed; : 플레이어의 최대 속도를 임시로 설정할 값입니다. 스피드 패드에 의해 플레이어의 속도가 이 값으로 변경됩니다.
  • [Range(0, 5)] public float duration = 1f; : 속도 변경이 지속될 시간(초)을 정의합니다. 이 값은 인스펙터에서 0에서 5초 사이로 조절할 수 있습니다.

메서드 설명

  • void OnTriggerEnter2D(Collider2D other): 이 메서드는 다른 콜라이더가 이 객체의 트리거 존에 들어왔을 때 자동으로 호출됩니다. 이 함수는 플레이어 캐릭터가 스피드 패드에 접촉했는지를 검사하고, 조건이 충족되면 플레이어의 속도를 변경하는 코루틴을 시작합니다.
    • var rb = other.attachedRigidbody;: 충돌한 객체에 연결된 리지드바디를 가져옵니다.
    • var player = rb.GetComponent<PlayerController>();: 리지드바디가 연결된 게임 오브젝트에서 PlayerController 컴포넌트를 추출합니다.
    • player.StartCoroutine(PlayerModifier(player, duration));: PlayerModifier 코루틴을 시작하여, 플레이어의 속도를 일시적으로 변경합니다.
  • IEnumerator PlayerModifier(PlayerController player, float lifetime): 이 코루틴은 플레이어의 최대 속도를 일정 시간 동안 변경한 후, 원래 속도로 복구합니다.
    • var initialSpeed = player.maxSpeed;: 플레이어의 현재 최대 속도를 저장합니다.
    • player.maxSpeed = maxSpeed;: 플레이어의 최대 속도를 maxSpeed로 변경합니다.
    • yield return new WaitForSeconds(lifetime);: 지정된 시간(lifetime)만큼 대기합니다.
    • player.maxSpeed = initialSpeed;: 대기 시간이 끝나면 플레이어의 최대 속도를 원래대로 복구합니다.

사용 방법

  • 이 스크립트를 스피드 패드로 사용할 게임 오브젝트에 부착합니다.
  • 인스펙터에서 maxSpeed와 duration을 원하는 값으로 설정합니다. 이렇게 하면 플레이어가 스피드 패드를 밟을 때 설정된 시간 동안 설정된 속도로 이동할 수 있습니다.
  • 이 스크립트는 플레이어가 빠르게 이동해야 하는 레벨 섹션에서 유용하게 사용될 수 있습니다.

이 스크립트는 게임에서 다양한 동적 인터랙션을 제공하며, 플레이어의 체험을 향상시킬 수 있는 간단하면서도 효과적인 방법입니다.

 

가속 패드는 쉽게 사용할 수 있어요.

아래 영상에서와 같이 챗GPT가 알려준 사용 방법과 같이 적용했어요.

 

실행은 정상적으로 잘되네요.

 

다음은 Jiggler 코드를 살펴볼께요.

Jiggler 스크립트 살펴보기 

Platfomer Microgame에서 제공하는 Jiggler 코드를 보면 다음과 같아요. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jiggler : MonoBehaviour
{
    [Range(0, 1)]
    public float power = .1f;

    [Header("Position Jiggler")]
    public bool jigPosition = true;
    public Vector3 positionJigAmount;
    [Range(0, 120)]
    public float positionFrequency = 10;
    float positionTime;

    [Header("Rotation Jiggler")]
    public bool jigRotation = true;
    public Vector3 rotationJigAmount;
    [Range(0, 120)]
    public float rotationFrequency = 10;
    float rotationTime;

    [Header("Scale Jiggler")]
    public bool jigScale = true;
    public Vector3 scaleJigAmount = new Vector3(.1f, -.1f, .1f);
    [Range(0, 120)]
    public float scaleFrequency = 10;
    float scaleTime;

    Vector3 basePosition;
    Quaternion baseRotation;
    Vector3 baseScale;

    void Start(){
        basePosition = transform.localPosition;
        baseRotation = transform.localRotation;
        baseScale = transform.localScale;
    }

    // Update is called once per frame
    void Update()
    {
        var dt = Time.deltaTime;
        positionTime += dt * positionFrequency;
        rotationTime += dt * rotationFrequency;
        scaleTime += dt * scaleFrequency;

        if (jigPosition)
        transform.localPosition = basePosition + positionJigAmount * Mathf.Sin(positionTime) * power;

        if (jigRotation)
        transform.localRotation = baseRotation * Quaternion.Euler(rotationJigAmount * Mathf.Sin(positionTime) * power);

        if (jigScale)
        transform.localScale = baseScale + scaleJigAmount * Mathf.Sin(scaleTime) * power;
    }
}

[소스 설명]

Jiggler라는 이름의 이 Unity 스크립트는 게임 오브젝트의 위치(position), 회전(rotation), 그리고 크기(scale)를 일정한 주파수와 진폭으로 "질금거리게" 하거나 변화시키는 기능을 수행합니다. 이러한 효과는 게임 내에서 다양한 시각적 동작을 만들어내는데 사용될 수 있으며, 객체에 생동감을 부여하거나 시각적 흥미를 증가시키는 효과를 줍니다. 각 요소에 대해 자세히 설명하겠습니다:

스크립트 구성 요소

  1. 변수 선언:
    • public float power = .1f;: 진동의 강도를 조절합니다. 이 값에 따라 진동의 크기가 달라집니다.
    • public bool jigPosition = true;: 위치 진동 기능을 켜거나 끌 수 있습니다.
    • public Vector3 positionJigAmount;: 위치 변화량을 벡터로 지정합니다.
    • public float positionFrequency = 10;: 위치 진동의 주파수를 설정합니다.
    • public bool jigRotation = true;: 회전 진동 기능을 켜거나 끌 수 있습니다.
    • public Vector3 rotationJigAmount;: 회전 변화량을 벡터로 지정합니다.
    • public float rotationFrequency = 10;: 회전 진동의 주파수를 설정합니다.
    • public bool jigScale = true;: 크기 진동 기능을 켜거나 끌 수 있습니다.
    • public Vector3 scaleJigAmount = new Vector3(.1f, -.1f, .1f);: 크기 변화량을 벡터로 지정합니다.
    • public float scaleFrequency = 10;: 크기 진동의 주파수를 설정합니다.
  2. 시작 시 초기화:
    • void Start(): 게임 오브젝트가 활성화될 때, 위치, 회전, 크기의 초기 값을 저장합니다.
  3. 업데이트 루프:
    • void Update(): 매 프레임마다 호출되며, 다음과 같은 작업을 수행합니다:
      • dt: 경과 시간을 계산합니다.
      • positionTime, rotationTime, scaleTime: 각각 위치, 회전, 크기 진동에 사용될 시간 값을 업데이트합니다.
      • Mathf.Sin(): 삼각함수의 사인 값을 사용하여 진동을 생성합니다. 이 함수는 -1과 1 사이의 값을 반환하기 때문에 부드러운 진동 효과를 생성합니다.
      • 위치, 회전, 크기 값에 진동을 적용합니다.

사용 방법

  • 이 스크립트를 Unity 에디터에서 게임 오브젝트에 붙여서 사용할 수 있습니다.
  • 인스펙터 창에서 power, positionJigAmount, positionFrequency, rotationJigAmount, rotationFrequency, scaleJigAmount, scaleFrequency 등의 값을 조정하여 다양한 진동 효과를 만들 수 있습니다.
  • 특정 상황에서 진동 효과를 조절하거나 활성화/비활성화하려면, 스크립트 내의 boolean 변수(jigPosition, jigRotation, jigScale)를 코드를 통해 변경하면 됩니다.

Jiggler 스크립트는 특히 애니메이션, 파티클 시스템과 결합하여 환경이나 오브젝트에 생동감을 부여하는 데 유용하게 사용될 수 있습니다.

 

Jiggler도 가속 패드와 같이 쉽게 사용할 수 있었어요.

아래 영상에서와 같이 챗GPT가 알려준 사용 방법과 같이 적용했어요.

 

그리고 설정 조정을 통해 어떤 효과가 나오는 지 살펴봤어요.

챗GPT가 알려준대로 오브젝트에 생동감을 부여하는데 유용하게 사용될 것 같아요. 

 

또한 파티클 시스템과도 나중에 같이 사용하는 방법을 알아보고 싶어요.

 

오늘은 ChatGPT를 활용하여 Unity 플랫포머 게임에서 가속 패드와 Jiggler 를 추가해봤어요.

 

[점심 먹으러 가는 인텔리원스튜디오 개발자. 인텔리노마드라이프와 함께 행복하세요 from IntelliOneStudio ]

 

지금까지,

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

감사합니다.

728x90