2024/10 24

팀프로젝트 제작 시작 - 크래프팅 시스템

숙련주차 팀 프로젝트 - 생존게임 에서 아이템, 인벤토리, 자원 관련 부분을 당담하게 되었습니다.인벤토리와 아이템 관련 내용 기반을 구현한 뒤, 가장 문제가 될것으로 예상되는 크래프팅 시스템 기초를 다뤄보았습니다. 먼저 아이템 데이터를 저장하는 스크립터블 오브젝트 입니다.여기서 isCraftable 이 true일 경우 이 아이템은 제작이 가능한 아이템이며, 제작에 필요한 재료를 저장하는 직렬화 클래스 craftData 를 통해 어떤 재료가 얼마나 들어갈지를 정해주었습니다.[CreateAssetMenu(fileName = "Item", menuName = "Item/New Item")]public class ItemData : ScriptableObject{ [Header("Item Data")] ..

2차 디자인패턴 특강 정리 - 이벤트기반 프로그래밍, 명령패턴

이벤트 기반 프로그래밍 - 옵저버 패턴, 이벤트 버스 패턴효율적으로 프로그램이 실행되도록 설계할 수 있는 패턴Pub- Sub 패턴 이라고도함 (발행 - 구독 패턴)발행자 1 - 구독자 1 : 함수 직접 호출 → 이 함수에 반응해야하는 함수가 늘어나면 일일이 호출해야함 발행자 1 - 구독자 다수 : 옵저버 패턴 사용 → 여러개의 함수에서 특정 함수를 호출하고싶으면 특정 함수를 모든 델리게이트에 등록해야함 발행자 다수 - 구독자 다수 : 이벤트 버스 패턴 사용 → 등록과 호출을 하나의 스크립트에서 전담옵저버 패턴발행자 1 - 구독자 n 의 관계이벤트 발생시, 발행자가 이벤트 발생을 알리고 구독자들이 행동하는 패턴델리게이트를 통해 구현 가능public event Action 의 형태로 사용하는것이 옵저버 패턴..

유니티 숙련주차 개인프로젝트 마무리?

추가 구현이 필요한 부분버프 아이템캐릭터 추가 및 애니메이션 추가추가 상호작용 오브젝트 (창고 등)readme.... 제출 후 작성 예정... 여러모로 버그 수정을 하다가 시간을 너무 많이 써버렸습니다... 플랫폼 로직을 잘못짜서 수정한 내용 (++ 연산 진행 후, 도착판정을 내서 실제 도착지 전 노드에서 도착판정 발생)벽타기 관련 오류 (측면 이동시 로직) 특히 대각선으로 발사하는 형태의 대포의 경우, 제데로 날라가지 않는 문제가 발생했는데,이동이 velocity를 직접 수정하는 방식이였기 때문에, 이동 입력이 없으면 x, y velocity가 0이 되서 수직으로는 날라가지만, 수평으로는 이동이 불가능한 경우였습니다.//캐릭터 움직이기public void Move(){ //입력으로부터 움직일 방향..

1차 디자인패턴 특강 정리

디자인패턴복잡하고 난해한 문제를 패턴화해서 풀기위해 사용다른 개발자와 소통할때, 디자인패턴을 통해 간단하게 소통할 수 있음주의사항무작정 사용하는것은 지양해야함. 적절한 위치에 적절하게 사용문제를 풀기위해 사용해야함. 디자인패턴을 쓰기위해 문제를 늘리면 안됨※ 왜 디자인패턴을 사용했는지 설명할 수 있도록 사용해야함싱글톤 패턴중요하고, 유일하게 존재하는 대상에게 쉽게 접근하기위해 사용함접근이 잦은 핵심기능에 대한 전역접 접근을 허용하기위해 사용함ex) Manager 계열 클래스들 - 하나만 존재해야하며, 다양한 위치에서 자주 접근함구현유일해야한다 : 싱글톤 패턴이 사용된 클래스가 추가로 생성되는것을 막을 방법이 필요함전역적으로 접근 가능해야한다 : public static 을 사용하여 전역접근 구현publi..

내일배움캠프 28일차 TIL - 시야각 내의 오브젝트 판단하기

스크립트의 필드에 오브젝트가 사용할 시야각(Field Of View) 를 float 형으로 선언하고, 이를통해 다른 오브젝트가 각도 이내에 들었는지 알아내는 방법입니다. 먼저 Mathf.Cos 를 사용하여, float 형인 FOV를 코사인값(각도값) 으로 변환합니다private float fov = 45f;private float threshold;public Transform target;public bool IsInFov(){ threshold = Mathf.Cos(fov * Mathf.Deg2Rad / 2);} 여기서 fov 값에 Mathf.Deg2Rad를 곱하여 시야각인 45도를 라디안 값으로 변환해줍니다.이 라디안 값을 Mathf.Cos() 를 사용하여 $Cos  \Theta $ 값을 구해..

내일배움캠프 27일차 TIL - 3D 게임에서 지상 확인하기

3D 숙련강의중, 캐릭터가 지상에 닿아있는지를 확인하기위해 이러한 코드를 사용합니다.//캐릭터가 땅에 닿았는지 확인private bool IsGrounded(){ Ray[] rays = new Ray[4] { new Ray(transform.position + (transform.forward * 0.2f) + (transform.up * 0.01f), Vector3.down), new Ray(transform.position + (-transform.forward * 0.2f) + (transform.up * 0.01f), Vector3.down), new Ray(transform.position + (transform.right * 0.2f) + (tr..

내일배움캠프 26일차 TIL - 자료구조 특강 정리

자료구조를 배우는 이유 - 같은 구조라도 성능차이가 발생하기 때문컴퓨터 공학의 핵심 시간 복잡도알고리즘의 동작에 필요한 연산이 데이터의 갯수에 따라 대략 어느정도인가?주로 빅오 (big O) 표기법으로 나타냄$n^{2} +  2n + 1 $ 와 같은 경우, 최대차항만 남겨 O( $n^{2}$ ) 으로 표기한다, 최고차항의 상수도 무시할 수 있다.시간 복잡도에 따라 걸리는 시간은 대략 이러한 그래프를 보입니다.지수함수, 팩토리얼 함수 형태의 시간복잡도가 나타나는 연산은 되도록 피해야하며, 로그 - 선형 함수 이하의 연산이 가장 이상적입니다. 배열 Array모든 자료구조의 기본과 같은 형태크기를 정한만큼, 저장공간을 부여Length() 메서드의 경우, 배열의 크기를 반환하는 메서드데이터 지역성배열 데이터 참..

내일배움캠프 25일차 TIL - 알고리즘 문제 풀이

leetcode에서 제공하는 알고리즘 문제중, 하나를 풀고 해설을 읽어보았습니다. 문제는 이러합니다. 정수형 숫자 배열 height 가 주어지며, 가로의 길이는 모두 1이라고 할때, 여기서 넓이가 가장 큰 직사각형을 구하는 문제입니다.이때, 배열의 조건은 다음과 같습니다.1 0 먼저, 처음 저의 풀이는 자신의 우측 배열을 확인한 후, 이 배열의 값이 자신보다 크거나 같으면 길이를 1 늘리고, 그렇지 않으면 반복문을 종료합니다.이후 저장된 길이와 자신의 높이를 곱해서 넓이를 구한 뒤, 저장된 최대값과 비교하여 저장합니다. 이 과정을 배열 전체에 반복하여 가장 큰 넓이를 구합니다.public class Solution { public int LargestRectangleArea(int[] heights..

내일배움캠프 24일차 TIL - 로컬 멀티플레이 인풋 시스템

유니티 입문주차 프로젝트 진행중, 로컬 멀티플레이 기능을 설계하면서 발생한 문제입니다.문제상황캐릭터를 생성했을 때, 1P 캐릭터는 정상적으로 조작이 가능하지만, 2P 는 조작이 불가능한 상황이 발생했습니다.당시, 캐릭터가 같은 액션 에셋을 공유하고, 액션맵을 바꾸는 방식으로 구현하려고 하였습니다. 당시 처음 시도했던 조작 코드입니다.public void IsPlayer2(bool isPlayer2){ if (isPlayer2) { playerInput.defaultActionMap = "Player2P"; } else { playerInput.defaultActionMap = "Player1P"; }} 시도해본 것처음 시도해본것은 캐릭터의 조작을 ..