스파르타 내배캠 32일차 TIL
C1조_ 1조라도 안 보이면
남은 기능을 보면서 오후 쯤에 제출하고 널널하게 til 쓸 수 있겠구나 했던 과거의 나한테 큰일났다고 해주고 싶다. 저정도면 금방하겠지, 생각하고 널널하게 작업을 이어가던 중 부족한 부분이 눈에 보이기 시작했다. 맵에 문이 그렇게 많은데 하나도 열리지 않으면 게임이라는 단어를 붙이기에 부끄럽지 않을까, 몬스터는 잘만 계단을 왔다갔다 하는데 플레이어는 메시 콜라이더 90도에 막혀서 점프하고 올라가고 점프하고 올라가는데 맞나... 그래서 결국 건드려야 하는 부분은 점점 늘어났다.
문 열기
상호작용 키를 누르면 열리게 했다. 검색 해보니 애니메이션으로 문이 열리는 효과를 내는 예제가 많은 편이었다. 애니메이션이 훨씬 편하고 쉽긴 하겠지만 나는 로직을 작성하기로 했다.
private void Update()
{
if (open)
{
Quaternion targetRotation = Quaternion.Euler(0, doorOpenAngle, 0);
transform.localRotation = Quaternion.Slerp(transform.localRotation, targetRotation, smooth * Time.deltaTime);
}
else
{
Quaternion targetRotation2 = Quaternion.Euler(0, doorCloseAngle, 0);
transform.localRotation = Quaternion.Slerp(transform.localRotation, targetRotation2, smooth * Time.deltaTime);
}
}
상호작용을 해서 bool 값이 변경되면 문의 피벗 기준으로 회전하게 만들었다. 이렇게 했을 때의 문제점은 방향에 있다. 문을 열었을 때의 회전값과 닫았을 때의 값을 지정했기 때문에 밖에서 열든 안에서 열든 똑같은 방향으로만 열리게 되어있다. 상당히 부자연스럽고 불편하기 때문에 플레이에 영향이 될 것 같아서 조금 더 고민해야 할 것 같다.
손전등 끄고 켜기
손전등 끄고 켜는 데엔 문제가 없었다. 하지만 만들어 놓고 보니까 손전등의 회전이 이상했다. 처음에는 플레이어의 화면 전화과 같이 변경하면 되지 않을까 싶었지만 손전등 아이템 기본 회전이 내가 원하는 모양이 아니어서 수정한 것을 까먹었다. 그래서 화면에서 조절을 하며 값을 찾아내서 적용했다.
public override void UseFlashlight()
{
if(canTurnOff)
{
canTurnOff = false;
flashlight.enabled = false;
}
else
{
canTurnOff = true;
flashlight.enabled = true;
}
}
손전등의 불은 에셋에 Light가 붙어있어서 그것을 끄고 켜는 것으로 구현하였다. 제일 간단했던 구현이었던 것 같다.
점프 매트리스(?)
이때부터 기획을 잘못했다는 것을 느꼈다. 아무리 만들고 싶은 게임이 있어도 선택 사항을 잘 읽어보고 정할걸... 막상 만들어 놓고 된게 없으니 후회를 하는 것 같다. 아무튼 하던 것은 마무리 해야하니 점프대를 어떻게든 넣어보고자 했다. 밟았을 때 뛰어오를만한 오브젝트가 어떤걸까. 한참 맵을 둘러보니 매트리스가 눈에 띄었다. 그래서 이스터에그처럼 넣어보자 싶어서 플레이어가 매트리스를 밟았을 때 뛰어오르는 파워를 달리 지정했다.
private void OnTriggerEnter(Collider other)
{
jumpForce = CharacterManager.Instance.player.controller.jumpForce;
if (other.CompareTag("Player"))
{
CharacterManager.Instance.player.controller.jumpForce = jumpPower;
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
CharacterManager.Instance.player.controller.jumpForce = jumpForce;
}
}
인트로&아웃트로
인트로랑 아웃트로를 만들기 시작한 시간이...밥 먹고 나서였던 거 같은데.. 적어도 제출 1시간 전에는 끝내고 Read Me를 작성해야 한다는 마음에 발등의 불이 엄청 뜨겁게 느껴졌던 것 같다. 다른 거 볼 시간도 없이 판넬 깔고 이미지 넣고 해서 만든 것이다. 원래는 인트로에 다이얼로그 식으로 씬을 넣어보려고 했는데 시간이 없어서 간편하게 게임 설명을 깔았다. 게임을 시작하고 퀘스트 아이템을 세 개 전부 먹고 건물을 나가게 되면 끝나는 판넬이 나오게 된다. 세 개를 먹고 나가면 성공 아니면 실패가 뜨게 했다. 원래 컨셉에 맞는 연출을 넣고 싶었지만 그건 내일로 넘겨야 할 것 같다. 다행히 하루 정도 마감 기간을 넘겨주신 덕에 내일 연출을 좀 더해봐야겠다.
인벤토리 리스트
퀘스트의 실패, 성공을 확인하려면 플레이어의 인벤토리에 어떤 아이템이 있는지 알아야 했다. 하지만 그 전 구현은 그냥 UI 아이템 슬롯에 아이템을 넣고 마는 것이었다. 물론 아이템 슬롯을 돌려서 아이템을 확인하는 방법이 있었지만 다른 게임에서는 인벤토리 리스트를 만들어 저장하는 것이 기본이기 때문에 그렇게 작업을 했다. 플레이어에 아이템 데이터 리스트를 생성하고 아이템을 획득할 때 리스트에 저장되게 했다. 분명 더 좋은 방법도 있었겠지만 시간에 쫓겨 뇌의 아웃풋을 그대로 적을 수 밖에 없었다.
마무리하며
마지막에 급하게 작업하느라 게임 매니저 부분을 부실하게 만들었다. 게임 매니저를 따로 두려고 했더니 Time.timeScale이 작동하지 않아 이런 저런 시도 끝에 플레이어 컨트롤러 스크립트에 게임 매니저에 관한 로직을 넣었다. til을 쓰고 있는 지금 찾아본 끝에 Time.timeScale은 보통 한 스크립트에서 관리한다는 것을 알았다. 그래서 내일 게임 매니저를 정리하고 그쪽에서 게임 싸이클을 관리해야 할 것 같다.
'Unity > TIL' 카테고리의 다른 글
Unity InputSystem: Send Message (1) | 2024.06.04 |
---|---|
유니티 숙련 팀프로젝트 게임 기획 (0) | 2024.06.03 |
3번째 갠플 중간 과정 (1) | 2024.05.29 |
3번째 개인 프로젝트 구상 및 플레이어 작업 (0) | 2024.05.28 |
Unity 조명(Lighting) (0) | 2024.05.27 |