안녕하세요. 인텔리원스튜디오(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)를 일정한 주파수와 진폭으로 "질금거리게" 하거나 변화시키는 기능을 수행합니다. 이러한 효과는 게임 내에서 다양한 시각적 동작을 만들어내는데 사용될 수 있으며, 객체에 생동감을 부여하거나 시각적 흥미를 증가시키는 효과를 줍니다. 각 요소에 대해 자세히 설명하겠습니다:
스크립트 구성 요소
- 변수 선언:
- 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;: 크기 진동의 주파수를 설정합니다.
- 시작 시 초기화:
- void Start(): 게임 오브젝트가 활성화될 때, 위치, 회전, 크기의 초기 값을 저장합니다.
- 업데이트 루프:
- 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 를 추가해봤어요.
지금까지,
언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.
감사합니다.
'디지털노마드' 카테고리의 다른 글
[챗GPT게임개발21] ChatGPT를 활용하여 적 공격 처리 추가하기(1) (71) | 2024.05.11 |
---|---|
[챗GPT게임개발20] ChatGPT를 활용하여 공격 애니메이션 추가하기 (68) | 2024.05.10 |
[챗GPT게임개발18] ChatGPT를 활용하여 트리거와 이벤트 시스템을 활용 (60) | 2024.05.09 |
[챗GPT게임개발17] ChatGPT를 활용하여 벽 타기 로직 추가하기 (58) | 2024.05.08 |
[챗GPT게임개발16] ChatGPT를 활용하여 점프 패드(Jump Pad) 추가(2) (56) | 2024.05.08 |