게임 개발 공부 기록 70

36일차 - Path Of Survival 팀 프로젝트 3

▶▷ 건축 기능생존 게임에서 흔히 볼 수 있는 바닥, 벽, 지붕, 문 등의 파츠를 이용해 간단히 머물 곳을 지을 수 있는 기능을 추가하였다.배치할 파츠를 고를 경우 배치 가능한 위치를 찾기 위한 미리보기 프리펩, 배치를 했을 때 실제로 배치될 프리펩을 각각 변수로 만들어 할당한 다음 미리보기 파츠에 배치 가능할 때와 불가능할 때 적용할 초록색과 빨간색 Material을 각각 변수로 만들어 인스펙터 창에서 할당하였다.미리보기 프리펩은 플레이어가 발사하는 레이의 위치에서 시야를 따라다니면서 레이어에 따라 건축 가능여부를 판단하고 그것에 따라 색이 바뀐다.일단은 프로토 타입으로 구현한 상태이고 이어서 작업할 계획이다.(제작 기능이 약간 어렵다고 판단되어 팀원분과 같이 제작해보고 비교해보기로 했는데 먼저 구현을..

35일차 - Path Of Survival 팀 프로젝트 2

▶▷ 노을 효과낮과 밤이 바뀔 때 하늘도 같이 어두워져야 하는데 기존에 있는 DefaultSkybox는 잘 어두워지는 반면 다운 받은 에셋에 있는 Skybox는 어두워지지 않는 현상이 있었다.이를 해결하기 위해 Skybox Material을 이것저것 만져보다가 노을 같은 효과를 낼 수 있는 값을 찾게 되어 해가 질 때 쯤 노을이 생기도록 만들었다.이 값은 바로 Atmosphere Thickness이며 값이 높아질수록 붉은 색을 띄게된다.낮과 밤을 만들 때처럼 AnimationCurve를 이용해서 구현하였다.time이 0.6을 넘어가면 노을이 지기 시작하고 0.9가 되면 끝나도록 했다.[Header("Skybox Settings (Procedural)")]public AnimationCurve skybox..

34일차 - Path Of Survival 팀 프로젝트 1

▶▷ 프로젝트 계획와이어 프레임아포칼립스 상황에서 좀비에게 감염되어 기존의 베이스 캠프에서 쫓겨난 플레이어가 치료를 받기 위해 다른 베이스 캠프를 찾아 생존하며 이동하는 컨셉의 프로젝트이다.나무와 돌 등의 자원들을 채집하여 인벤토리에 보관 및 각종 아이템을 제작할 수 있다. 또한 음식과 물을 얻어 갈증과 허기를 회복할 수 있으며 장비를 장착하여 좀비와 전투를 할 수 있다. ▶▷ 밤/낮 사이클생존 게임에서 필요한 요소인 낮과 밤을 구현하기 위해 Directional Light를 두개 만들어 각각 해와 달로 설정하였고 애니메이션 커브를 이용해 자연스럽게 어두워지고 밝아지도록 구현했다.using TMPro;using UnityEngine;public class DayNightCycle : MonoBehavio..

33일차 - 직렬화, 역직렬화

▶▷ 직렬화, 역직렬화1. 직렬화와 역직렬화란?① 직렬화(Serialization)데이터를 저장 가능한 형식(텍스트, JSON, XML 등)으로 변환하는 과정.메모리 데이터를 파일 또는 네트워크 전송을 위해 변환.유니티에서는 YAML, JSON, XML, CSV 등 다양한 직렬화 방식 사용.② 역직렬화(Deserialization)저장된 직렬화 데이터를 다시 원래의 객체로 변환하는 과정.파일이나 네트워크에서 데이터를 불러올 때 필요.2. 유니티에서 사용되는 주요 직렬화 방식 비교3. JSON Utility 직렬화① JSON Utility란?유니티에서 공식적으로 제공하는 JSON 직렬화 도구.C++로 구현되어 속도가 가장 빠름.② JSON Utility 사용법JSON 데이터 저장string jsonData..

32일차 - 3D Practice 3 (아이템 코루틴, 레이저 트랩)

▶▷ 도트 회복, 속도 증가체력이 한번에 차는 방식에서 도트로 서서히 회복되는 방식으로 변경하였다. 코루틴을 이용하면 쉽게 구현할 수 있다.public void OnInteract(){ // 플레이어에게 아이템 데이터를 전달 후 아이템 오브젝트 제거 CharacterManager.Instance.Player.itemData = data; if (data.type == ItemType.Consumable) { for (int i = 0; i 상호작용을 하면 각 메서드에 인스펙터 창에서 각 아이템 데이터에 설정해둔 value값이 전달되고public void Heal(float amount){ StartCoroutine(health.DotAdd(health.dotValu..

31일차 - 3D Practice 2 (아이템, 점프대, 한글 깨짐 현상)

▶▷ 아이템어제 InputSystem에서 추가했던 F키를 통해 상호작용할 수 있는 아이템을 구현하였다.using UnityEngine;// 아이템의 종류를 나타내는 열거형public enum ItemType{ Resource, // 자원 타입 Consumable // 소비 가능한 아이템 타입}// 소비 아이템의 종류를 나타내는 열거형public enum ConsumableType{ Health, // 체력 회복 Speed // 속도 증가}// 소비 아이템의 데이터를 저장하는 클래스[System.Serializable]public class ItemDataConsumable{ public ConsumableType type; // 소비 아이템의 종류 public f..

29일차 - AI Navigation

▶▷ AI Navigation인공지능이 게임이나 시뮬레이션 등 가상 환경에서 캐릭터나 NPC가 지형, 장애물, 목표 지점 등을 고려하여 지능적으로 적절한 경로를 생성하고 이동하는데 사용 Navigation Mesh3D 공간을 그리드로 나누어 이동 가능한 지역과 장애물이 있는 지역을 구분하는 매쉬캐릭터가 이동할 수 있는 영역과 이동할 수 없는 영역을 정의하고 이를 기반으로 경로를 계산2. Pathfinding캐릭터의 현재 위치에서 목표 지점까지 가장 적절한 경로를 찾는 알고리즘 3. Steering Behavior캐릭터나 NPC가 경로를 따라 이동할 때 자연스러운 동작을 구현하기 위해 사용동적으로 캐릭터의 이동 방향과 속력을 조정하여 부드럽고 현실적인 이동을 시뮬레이션함 4. Obstacle Avoidan..

28일차 - ForceMode, Raycast, Coroutine, Light

이번주 부터는 유니티 숙련주차로, 3D 프로젝트를 다룰 것이다. 이번에 만들 프로젝트는 간단한 3D 생존 게임이고 해당 프로젝트를 통해 3D에서 쓰이는 요소들을 파악하고 학습할 예정이다.▶▷ Rigidbody - ForceModeForce : 힘을 지속적으로 적용Rigidbody.AddForce(Vector3 force, ForceMode.Force);Acceleration : 가속도 적용Rigidbody.AddForce(Vector3 force, ForceMode.Acceleration);Impulse : 순간적인 힘 적용Rigidbody.AddForce(Vector3 force, ForceMode.Impulse);VelocityChange : 변화하는 속도를 적용합니다. 물체의 현재 속도를 변경하면서..

27일차 - Delegate, Input System

▶▷ 델리게이트, 이벤트 델리게이트 : 덮어쓰기 가능 (=) (외부에서 Invoke가능)delegate 반환형 델리게이트명(매개변수);delegate void DalegateFunc(); 이벤트 : 덮어쓰기 불가능 (+=, -=) (내부에서만 Invoke 가능)event 델리게이트명 변수이름;Action : 자동 델리게이트 ▶▷ InputSystem다이렉트 방식wasPressedThisFrame: 눌렀을 때wasRealeasedThisFrame: 땠을 때isPressed: 누르고 있을 때 임베디드 방식 C# 제너레이트 방식게임의 규모가 커질 수록 C# 제너레이트 방식이 편하고 간단하고 빠르게 구현할 때는 다이렉트나 임베디드가 편하다고 한다.C# 제너레이트 방식은 각각의 요소에게 다른 조작키를 부여할 때 ..

26일차 - PenguinRun 팀 프로젝트 마무리

▶▷ PenguinRun오늘은 애니메이션 렌더러 추가 작업과 플레이 테스트, 그리고 마무리 작업으로 README를 작성하였다. 더보기# Penguin Run## 📂 프로젝트 구조📦 Penguin Run ┣ 📂 Character                # 플레이어 관련 디렉토리 ┃ ┣ 📜 PlayerController.cs    # 플레이어 조작 ┃ ┣ 📜 StatHandler.cs         # 플레이어 스탯 관리 ┃ ┣ 📜 AnimationHandler.cs    # 플레이어 애니메이션 관리  ┣ 📂 Camera                   # 카메라 관련 디렉토리 ┃ ┣ 📜 FollowCamera.cs        # 플레이어를 추적하는 카메라 클래스 ┣ 📂 Manager ..