안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.
오늘은 GPT-4, GPT-4o 활용해서 플레이어의 총알 발사 애니메이션 적용 중 총알을 발사할때 필요한 플레이어의 동작 애니메이션을 추가해볼께요.
[오늘의 목표] GPT-4, GPT-4o 활용해서 플레이어의 총알 발사 애니메이션 적용(1)
1. 플레이어 총알 발사 애니메이션 클립 만들기
2.플레이어 총알 발사 이벤트 스크립트 만들기
3.실행하고 확인하기
※ ChatGPT 답변 내용 중 제가 별도로 표시한 파란색 내용을 기준으로 읽으시면 좀 더 이해가 쉽게 될거예요.
플레이어 총알 발사 애니메이션 클립을 만들어요
먼저 플레이어가 총알을 발사하는 애니메이션 클립을 만들어볼께요.
만드는 방법은 아래 글을 참고해요.
이제 아래와 같이 PlayerShooting 애니메이션 클립을 완성했어요.
플레이어가 총알을 발사할 때 사용할 이벤트 스크립트를 만들어요
아래 스크립트를 만들기 전에 애니메이터에 2가지 변수를 만들어야해요.
[PlayerShooting 스크립트]
using static Platformer.Core.Simulation;
using Platformer.Core;
using Platformer.Mechanics;
using UnityEngine;
namespace Platformer.Gameplay
{
/// <summary>
/// Fired when the player initiates a shooting attack.
/// </summary>
public class PlayerShooting : Simulation.Event<PlayerShooting>
{
public PlayerController player;
public override void Execute()
{
if (player.jumpState == PlayerController.JumpState.InFlight ||
player.jumpState == PlayerController.JumpState.Jumping ||
player.jumpState == PlayerController.JumpState.WallJumping)
{
// 점프 중인 경우
player.animator.SetTrigger("jumpShoot");
}
else
{
// 점프 중이 아닌 경우
player.animator.SetTrigger("shoot");
}
player.attackState = PlayerController.AttackState.Idle;
}
}
}
아래는 코드에 대한 설명이니 참고해요.
[코드에 대한 설명]
PlayerShooting 클래스는 플레이어가 발사 공격을 시작할 때 발생하는 이벤트를 처리합니다. 이 클래스는 다음과 같은 기능을 수행합니다:
- 발사 애니메이션 트리거: 플레이어가 점프 상태인지 아닌지를 확인하고, 각각의 경우에 맞는 애니메이션 트리거(jumpShoot 또는 shoot)를 설정합니다.
- 공격 상태 업데이트: 발사 후 플레이어의 공격 상태를 Idle로 설정합니다.
주요 기능
- 발사 애니메이션 트리거:
- 점프 중이면 jumpShoot 애니메이션을 트리거.
- 점프 중이 아니면 shoot 애니메이션을 트리거.
- 공격 상태 업데이트:
- 발사 후 플레이어의 공격 상태를 Idle로 설정.
이 클래스는 플레이어가 발사 공격을 할 때 적절한 애니메이션을 실행하고 공격 상태를 관리합니다.
플레이어 스크립트에서 이벤트 스크립트를 처리해요
이제 다음의 코드를 만들고 Update() 함수에 추가해요.
if (Input.GetButtonDown("Fire2") && attackState == AttackState.Idle)
{
attackState = AttackState.PreparingAttack;
var shootEvent = Schedule<PlayerShooting>();
shootEvent.player = this;
}
[코드에 대한 설명]
이 코드는 플레이어가 특정 조건을 만족할 때 발사 공격을 실행하는 부분입니다. 주요 기능을 단계별로 설명하면 다음과 같습니다:
- 입력 감지:
- Input.GetButtonDown("Fire2")는 사용자가 "Fire2" 버튼을 눌렀는지 확인합니다. Unity에서 "Fire2"는 기본적으로 마우스 오른쪽 버튼이나 특정 키로 매핑됩니다. ("s" 키로 매핑)
- 이 조건이 참이면 사용자가 발사 버튼을 눌렀다는 의미입니다.
- 공격 상태 확인:
- attackState == AttackState.Idle는 플레이어의 공격 상태가 Idle(공격 대기 상태)인지 확인합니다. 즉, 플레이어가 다른 공격을 수행하지 않고 있는 상태인지를 확인합니다.
- 이 조건이 참이면 플레이어가 현재 다른 공격을 수행하고 있지 않다는 의미입니다.
- 공격 상태 업데이트:
- attackState = AttackState.PreparingAttack는 플레이어의 공격 상태를 PreparingAttack으로 변경합니다. 이는 플레이어가 발사 공격을 준비 중임을 나타냅니다.
- 발사 이벤트 스케줄링:
- var shootEvent = Schedule<PlayerShooting>();는 새로운 PlayerShooting 이벤트를 스케줄링합니다. 이 이벤트는 플레이어의 발사 공격을 처리합니다.
- shootEvent.player = this;는 이 이벤트가 실행될 때 어떤 플레이어가 발사 공격을 수행하는지 지정합니다. 여기서 this는 PlayerController 인스턴스를 참조합니다.
요약
이 코드는 플레이어가 "Fire2" 버튼을 눌렀고 현재 공격 상태가 Idle인 경우, 공격 상태를 PreparingAttack으로 업데이트하고, PlayerShooting 이벤트를 스케줄링하여 발사 공격을 수행하도록 합니다.
PlayerController 스크립트 내 Update() 함수에 추가했어요.
protected override void Update()
{
if (controlEnabled)
{
move.x = Input.GetAxis("Horizontal");
if ((jumpState == JumpState.Grounded || wallSliding) && Input.GetButtonDown("Jump"))
{
jumpState = JumpState.PrepareToJump;
}
else if (Input.GetButtonUp("Jump"))
{
stopJump = true;
Schedule<PlayerStopJump>().player = this;
}
if (Input.GetButtonDown("Fire1") && attackState == AttackState.Idle)
{
attackState = AttackState.PreparingAttack;
var attackEvent = Schedule<PlayerAttack>();
attackEvent.player = this;
}
if (Input.GetButtonDown("Fire2") && attackState == AttackState.Idle)
{
attackState = AttackState.PreparingAttack;
var shootEvent = Schedule<PlayerShooting>();
shootEvent.player = this;
}
CheckForPushable();
lastMoveDirection = move.x;
}
else
{
move.x = 0;
}
UpdateWallSlide();
UpdateJumpState();
base.Update();
}
이제 결과를 확인해봐요.
변경사항을 저장하고 실행해요.
원하는대로 PlayerShooting 이벤트가 잘 동작하네요.
오늘은 GPT-4, GPT-4o 활용해서 플레이어의 총알 발사 애니메이션을 적용했어요.
다음에는 총알이 날아가는 기능을 추가할께요.
지금까지,
언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.
감사합니다.
'디지털노마드' 카테고리의 다른 글
[챗GPT게임개발32] GPT-4, GPT-4o 활용해서 텔리포트 기능 구현하기 (71) | 2024.05.22 |
---|---|
[챗GPT게임개발31] GPT-4, GPT-4o 활용해서 플레이어의 경사면 오르기 구현하기 (69) | 2024.05.19 |
[챗GPT게임개발29] GPT-4, GPT-4o 활용해서 산탄 효과(Particle System)를 플레이어에 적용하기 (76) | 2024.05.18 |
[챗GPT게임개발28] GPT-4, GPT-4o 활용 Particle System을 사용해서 산탄 효과 구현하기 (2) | 2024.05.18 |
[챗GPT게임개발27] Unity에서 파티클 시스템을 다른 프로젝트로 이동하기 (69) | 2024.05.17 |