3D Quarter View Action 게임 개발 2일차

mingu Lee·2025년 4월 18일

오늘은 Item에 관련하여 작업을 진행했다.

  1. Item 제작
  2. Weapon 획득 및 Swap 기능
  3. 기타 Item 획득
  4. 수류탄 공전 효과 추가

이렇게 총 4가지를 진행했다.

Item 제작


Player가 게임을 진행하면서 얻을 수 있는 Item인 Weapon 3종류, Coin 3종류, Heart, Ammo, Grenade 총 9가지 Item을 만들었다.

Weapon 중 Hammer를 예로 들어보겠다.

Item Object에 어울리는 Ligth와 Particle System을 추가해 주었다.

이때, Item이 Drop 됐을 때 Floor 위에 서 있어야 하므로 Object 아래에 Rigidbody 및 Sphere Collider를 추가해주었다.

추가로, Player가 Item과 상호작용을 해야하므로 상호작용 전용 Sphere Collider도 추가했다.

위 사진을 자세히 보면 Sphere Collider가 2개 있는 것을 볼 수 있다.

이런 방식으로 9개의 각 Item에 알맞게 값을 수정하여 Item Prefab을 만들었다.

이렇게 만들어진 Item Prefab에 Script를 추가하여 각 Item의 Type과 Item이 가지는 Value를 설정했다.

Weapon 획득 및 Swap 기능


위에서 만든 Weapon 3종류에 대해서 Player가 상호작용하여 획득하고 각 Weapon끼리 Swap하는 기능을 만들었다.

Player가 특정 Weapon가 접촉하고 있을 때, E Button을 누르면 해당 Weapon을 획득할 수 있게 설정했다.

이를 위해 Interaction이라는 Action을 추가하여 E Button을 Binding 했고, E Button을 눌렀을 때 상호작용 함수가 호출되게끔 했다.

Player가 Weapon 근처에 있을 때 nearObject에 Weapon Object의 정보가 담기며, E Button이 눌렸을 때 근처에 Weapon이 존재한다면 획득하는 방식으로 코드를 작성했다.

이때, Weapon을 획득했다는 정보를 저장하기 위해 hasWeapon이라는 Bool 배열을 사용했다.

이렇게 먹은 Weapon을 1, 2, 3 Button을 눌렀을 때 Player가 해당 Weapon을 장착하는 기능도 추가했다.

무기 장착이 가능하도록 Player의 오른손에 Weapon Point를 만들어줬다.

이 Point에 무기 3종류의 Prefab을 추가하고 나서 비활성화 한 다음, 무기를 얻었을 때 활성화 해주었다.

다음으로, Action을 추가하여 1, 2, 3 Button을 Binding 해줬고, 각 Button을 눌렀을 때 0, 1, 2라는 값을 읽어올 수 있도록 값을 설정했다.

이 WeaponSwap Action에 Weapon 획득 및 Swap을 처리하는 함수를 추가해주면 된다.

Swap할 때 무기만 슥 바뀌면 이상하므로 Swap Animation도 추가했다.

EndWeaponSwap 함수는 Swap Animation 끝 프레임에 Event를 추가하여 호출되게 했다.

기타 Item 획득


Weapon을 제외한 나머지 Item은 상호작용 없이 그냥 접촉했을 때 획득할 수 있도록 했다.

각 Item을 획득했을 때, 해당 Item이 가진 Value 값을 Player가 관리하는 변수 값에 추가해주었다.

수류탄 공전 효과 추가


다른 Item과는 달리 수류탄 Item을 획득했을 경우, 수류탄 Object가 Player 주변을 공전하는 효과를 추가했다.

수류탄은 최대 4개까지 획득할 수 있으며, 먹을 때마다 Player 주변을 공전하는 수류탄도 1개씩 증가한다.

위 사진처럼 미리 수류탄 Object를 생성해서 비활성화 해놨다가, Player가 수류탄을 획득할 때마다 하나씩 활성화된다.

이때, 각 수류탄은 transform.RotateAround 함수를 사용하여 Player를 중심으로 공전하는데, Player가 움직이면 Player와 멀어진 만큼의 길이로 공전하는 현상이 발생한다.

이게 무슨 소리냐면 아래 영상을 보면 이해가 빠를 것이다.

위 영상처럼 Player 주변을 따라다니며 공전하는 것이 아닌, Player와의 거리에 따라 공전 궤도가 이상해진다.

그렇다면 Player의 자식 Object로 추가하면 되는 것이 아닌가 싶지만 이 또한 문제가 발생한다.

Player 주변을 공전하는 수류탄들은 Player의 방향에 무관하게 항상 일정한 위치에서 일정한 방향으로 이동해야 한다.

하지만 Player는 현재 LookAt 함수로 이동 방향 쪽을 바라보게 되어 있기 때문에, 수류탄들을 Player의 자식 Object로 추가하게 되면 Player의 각도 변경에 따라 수류탄들의 위치도 바뀌게 된다.

따라서, 이를 해결하기 위해선 수류탄과 Player의 offset을 계산하여 지속적으로 수류탄의 position 값을 변경시켜야 한다.

수류탄이 Player의 방향에 상관없이 일정하게 Player 주변을 공전하고 있는 것을 볼 수 있다.

오늘의 결과물


profile
Github: https://github.com/dlalsrn

0개의 댓글