game 8

UnityPisine Module06 - 11. 끝!

플레이 영상 유니티 피신의 평가를 마치고, 마지막으로 게임플레이 영상을 준비하며 이번 프로젝트를 마무리한다.이번 과정을 통해 유니티를 사용한 게임 개발의 기본부터 실제 게임 구현에 이르는 전 과정을 경험할 수 있었다.처음에는 간단해 보였던 작업들이 실제로 구현하면서 얼마나 많은 요소들이 서로 연결되고 영향을 미치는지 깨달았다.특히 UI, NavMesh, 그리고 캐릭터 애니메이션을 다루는 과정에서 여러 문제들을 해결해 나가면서, 단순히 기능 구현을 넘어 게임의 완성도를 높이기 위한 고민도 많이 하게 되었다.또한, 게임의 재미와 플레이어의 경험을 위해 세부적인 디테일을 조정하는 과정이 중요하다는 것도 느꼈다. 예를 들어, 적의 감지 범위와 플레이어의 조작감 등을 미세하게 조정하는 일이 전체 게임의 흐름과 몰..

Unity Piscine Module06 - 10. UI 추가

UI 작업은 복잡하지 않지만, 해야 할 일이 많고 체계적으로 정리하지 않으면 금방 꼬여버려 시간이 많이 소요되는 작업이었다. 작업을 진행하다 보니 욕심이 생겨 이것저것 추가해보았는데, 그 내용을 정리해보겠다.열쇠 개수 표시열쇠 개수 표시 자체는 어려운 작업이 아니었다. 다만, 괜찮은 열쇠 이미지를 구하는 게 귀찮았다.시점 표시 문구사실 없어도 되는 기능이었지만, FPS 시점에서 과제에서 요구하는 기본 조작키가 마음에 들지 않아서 일반적인 FPS 조작을 구현했고, R키를 눌러 조작키를 변경할 수 있게 해주었다. FPS 시점에서 두 가지 조작키가 생겨서 이를 표시해주기 위해 만든 기능이다.유령이 쫓아올 때 사이렌 표시유령이 쫓아올 때 소리가 나긴 하지만, 좀 더 가시성 있게 표현하고 유령에게 들켰을 때 긴장..

Unity Piscine Module06 - 9. 적 추가

가고일과 고스트 적을 추가했다.이번에 게임에 추가한 새로운 적은 가고일과 고스트다. 각각의 적은 플레이어를 다른 방식으로 위협하며, 게임의 긴장감을 높이는 역할을 한다.가고일가고일은 고정된 위치에서 돌면서 주변을 감시하는 역할을 한다. 일정 시간마다 랜덤하게 왼쪽, 오른쪽, 또는 뒤쪽으로 회전하며 주변을 주시한다. 만약 가고일의 시야에 플레이어가 들어오면 주변에 있는 고스트들을 불러서 플레이어를 추격하게 만든다.가고일 코드public class Gargoyle : MonoBehaviour{ [SerializeField] private GameObject[] Ghosts; void Start() { StartCoroutine(ActivateGargoyle()); } ..

Unity Piscine Module06 - 8. Post Processing 적용

포스트 프로세싱(Post-Processing)은 게임에서 렌더링된 이미지에 추가적인 시각적 효과를 적용해, 더 생동감 있고 풍부한 화면을 만들어주는 기능이다. 여러 가지 효과를 통해 색감, 조명, 분위기 등을 조정할 수 있으며, 이를 통해 게임의 비주얼 퀄리티를 크게 향상시킬 수 있다.배워보니 결국 어떤 설정이 어떤 효과를 주는지는 직접 여러 번 조정해보고 경험을 쌓아야 감을 잡을 수 있을 것 같다는 생각이 들었다. 그래서 처음에는 이것저것 만져보다가, 튜토리얼에서 추천하는 수치를 그대로 따라 해보기로 결정했다.이번에 적용한 효과는 다섯 가지다. 각 효과의 기능과 조정할 수 있는 설정들을 간단히 정리해보겠다.1. Color GradingColor Grading은 게임의 전반적인 색상, 명암, 채도 등을 ..

Unity Piscine Module06 - 7. 열쇠 수집 / 엔딩 애니메이션 구현

열쇠 3개를 방에 랜덤 배치하고 3개를 먹은 후 엔딩방에 도달하면 문이열리도록 구현했다.엔딩 애니메이션 페이드 인/아웃과 적에게 잡혔을 때의 애니메이션도 추가! public class KeyGenerator : MonoBehaviour{ [SerializeField] private GameObject keyPrefab; [SerializeField] private Transform[] spawnPoints; [SerializeField] private int numberOfKeys = 3; private bool[] check; void Start() { check = new bool[spawnPoints.Length]; while (numberO..

Unity Piscine Module06 - 6. 맵 구현

맵 제작이번 맵 제작은 딱히 어려운 부분은 없었지만, 반복적인 작업이 많아 다소 귀찮았던 부분이 많았다.방을 만들면서 혹시 나중에 랜덤으로 방을 배치해야 할 상황이 생길 수 있을 것 같아, 모든 방의 규격을 동일하게 맞추고 프리팹화시켜 관리했다. 덕분에 나중에 방을 조합하거나 재사용할 때 쉽게 사용할 수 있을 것 같다. 이번에 작성한 스크립트는 문을 여닫는 간단한 스크립트다. 문이 플레이어의 접근을 감지하면 열리고, 일정 시간이 지나면 자동으로 닫히도록 설정했다.public class Door : MonoBehaviour{ private bool isOpen = false; private Animator animator; void Start() { animator = G..

Unity Piscine Module06 - 5. FPS / TPS 시점 적용

TPS와 FPS 시점을 모두 구현해야 했는데, 처음에는 간단할 줄 알았다. 하지만 실제로 구현해보니 생각보다 많은 문제들이 발생했다. 이번 포스트에서는 이를 해결하기 위해 겪었던 과정과 배운 점들을 기록해본다.TPS 시점TPS 시점에서는 Unity의 Cinemachine을 적극 활용했다. 특히 FreeLook Camera를 사용하여 플레이어를 따라다니도록 설정했는데, 이 과정에서 중요하게 고려해야 했던 부분이 있었다.문제 1: 카메라 축 고정카메라가 플레이어를 따라가도록 설정하면, 이동할 때 카메라와 플레이어의 방향이 일치하지 않아서 조작이 불편해질 수 있다. 이를 해결하기 위해 카메라의 축을 고정하여 항상 플레이어가 이동하는 방향을 기준으로 시점이 유지되도록 설정했다.문제 2: 플레이어 가리기카메라와 ..

Unity Piscine Module06 - 4. 움직임 구현

움직임 구현... 별거 아닐 줄 알았는데 예상외로 고생한 부분이 있어 기록한다.3D 오브젝트에 애니메이션을 적용하면 Root Motion이라는 개념이 생기는데, 이게 이번에 문제를 일으켰다.Root Motion은 3D 애니메이션이 캐릭터의 움직임을 직접적으로 제어할 수 있도록 해준다. 즉, 애니메이션 자체가 오브젝트의 Transform에 영향을 미쳐서, 캐릭터가 자연스럽게 이동하고 회전할 수 있게 해준다. 이 개념은 사실적인 움직임을 구현하는 데 유용하지만, 이를 처음 접하는 나로서는 꽤 당황스러운 부분이었다.문제 발생: 공중부양하는 플레이어 나는 기존에 2D 게임을 개발했을 때처럼, 오브젝트에 Rigidbody와 Collider를 적용하고 이동을 스크립트로 제어하려고 했다. 하지만 돌려보니 Idle 상..