드디어 내일이 마감일!!
현재까지 만든 우리 게임의 화면이다
지금 시간이 부족해서 잔버그들이 꽤 있다.
고치는 법도 알고 있긴한데 제출해야 할 서류들이 너무 많아서.. . . ㅠㅠ 고치지 못하고있다
게임 씬
- 오늘 UI 디자인도 직접 바꿨다.
약간 공포 느낌의 폰트와 에셋을 찾으려고 노력했다.
- 아쉬운 점 : 잘 보면 보스의 이름표가 돌아가있다. 저걸 플레이어 방향으로 항상 설정해줘야할듯..
퀘스트 창
- 퀘스트 부분을 직접 담당하여 구현했다.
- 퀘스트 Scriptable Objects Data들을 UI에 띄워줬다.
- 퀘스트 버튼 누르면 오른쪽에 다음과 같이 상세 내용도 나온다.
- 아쉬운 점 : 지금 UI를 누르면 이전 UI들이 꺼지지도 않고, 게임이 멈추지도 않아서 플레이어 마우스 방향대로 계속 화면이 돌아간다. 팀원분이 담당하고 계신 무기 구현이 다 되고 버그가 잡혀 코드가 정상적으로 돌아가면 수정할 예정
인벤토리 및 제작대
- 지윤님이 구현해주신 부분!
- 인벤토리는 구현해본 적이 있으나, 아이템 크래프팅 부분은 해본 적이 없어 나중에 꼭 직접 구현해 보고 싶다.
- DragAndDrop을 사용하여 구현하셨다고 했다.
- 문서 아이콘 누르면 제작 방법 UI가 뜬다.
- 아쉬운 점 : 시간이 부족해 아이템 icon들을 바꾸어주지 못했다. 별로 안이쁘다 ㅠ
전투
- 보스 및 몬스터들은 내가, 플레이어는 팀원분들이 구현해주셨다.
몬스터 패턴
이동 패턴
Idle -> Walk 반복하다가 플레이어가 공격 범위 안에서 감지되면 Attack 상태로 변한다
공격 패턴
- 보스 (윤세나) 패턴
1. 근거리 공격
2. 사랑의 총알 3개 발사
- 금재은 & 안보연 패턴 : 근거리 공격
- 성지윤 패턴 : 원거리 공격 (사랑의 총알 발사)
- 아쉬운 점 : 가끔씩 몬스터들이 죽으면 오브젝트가 사라지지 않는 버그가 발생한다.
몬스터가 죽으면
protected virtual void Die()
{
for (int i = 0; i < Data.DropItem.Length; i++)
{
Instantiate(Data.DropItem[i], transform.position + Vector3.forward * 2, Quaternion.identity);
}
agent.enabled = false;
animationController.DieAnim();
}
이 코드에서 animationController.DieAnim();를 통해 죽는 애니메이션을 틀어주는데
public void DieAnim()
{
animator.SetTrigger("Die");
StartCoroutine(DisableAfterAnimation());
}
IEnumerator DisableAfterAnimation()
{
yield return new WaitForSeconds(5f);
animator.enabled = false;
// TODO :: 사라지는 파티클
gameObject.SetActive(false);
}
코루틴을 사용해 죽는 애니메이션이 끝나면 오브젝트를 SetActive(false) 해주고 있다.
이것도 시간이 남으면 Debug를 찍어보며 확인해보아야될 것 같다.
플레이어 패턴
- 팀원분이 담당해주신 부분.
- 시간 부족으로 도끼 공격은 구현이 안되었고, 활 장착 & 화살 발사 로직을 구현하였다.
- 제작대에 돌 1개, 나무 3개를 두면 다음과 같이 활이 나타나고 활을 인벤토리에서 더블클릭하면 장착된다.
- 여기서 Alt키를 누르고 손을 떼면 화살이 발사된다
- 흑흑 아직도 여기서 버그난다... 몬스터 죽었을 때 버그 있는지 확인을 못하는중
-> 새벽에 해결했다!!!! 세나님 수고하셨습니다!!!!!!
엔딩
- 내가 담당했다.
- 엔딩은 총 세가지로 구현했다.
EndingManager.cs
using UnityEngine;
public enum EndingType
{
KillBoss,
PlayerDie,
Hidden
}
public class EndingManager : Singleton<EndingManager>
{
[SerializeField] private GameObject[] _endingImages;
public void CheckEnding(EndingType endingType)
{
switch(endingType)
{
case EndingType.KillBoss:
// TODO :: 플레이어 구현시 연동
//if(CharacterManager.Instance.Player.Inventory.curEquip == "정화의화살") EnableEndingImage(0);
//else EnableEndingImage(2);
EnableEndingImage(0);
SoundManager.Instance.Play(3, 0.2f, SoundType.Bgm);
break;
case EndingType.PlayerDie:
EnableEndingImage(1);
SoundManager.Instance.Play(2, 0.2f, SoundType.Bgm);
break;
case EndingType.Hidden:
EnableEndingImage(4);
SoundManager.Instance.Play(3, 0.2f, SoundType.Bgm);
break;
}
}
void EnableEndingImage(int idx)
{
GameManager.Instance.IsPlay = false;
_endingImages[idx].SetActive(true);
}
}
- 코드는 진짜 쉽게 짰다. 원래 준비한 엔딩은 다섯개였는데 시간 부족으로 3개밖에 넣지 못했다.
1. 보스 처치시
2. 플레이어가 죽으면
3. 히든엔딩 (신전에서 기도버튼 누르기)
- 사실 이건 팀원들만 아는 재밌는 포인트다. 껄껄
- 아쉬운 점 : 지금 신전 주위에 가면 뜨는 안내 문구의 레이어가 엔딩 UI보다 앞에 있어서 겹치고 있다.
'게임 개발' 카테고리의 다른 글
[Unity] 참새의 모험 (1) - 무한 맵 생성 (0) | 2024.06.17 |
---|---|
[Unity] The Love 게임 - 완성 (0) | 2024.06.11 |
[Unity] The Love 게임 - (3) (0) | 2024.06.07 |
[Unity] The Love 게임 - (2) (0) | 2024.06.05 |
[Unity] The Love 게임 - (1) (0) | 2024.06.04 |