전체 글 134

특강 정리 - 객체지향, UGS

객체지향 특강 - 디자인 패턴개발을 할수록 코드가 쌓인다.작성한 코드는 레거시 코드라고 하며, 이를 개선하는 리팩토링 작업을 반복하게된다.개선을 반복하면서 일정한 패턴이 만들어지며, 이를 디자인 패턴이라고 한다.Unity 에서 자연스럽게 사용하는 디자인패턴들Prototype 패턴프립팹을 만들어 사용하는것 자체가 Prototype 패턴에 속함Composite 패턴오브젝트에 컴포넌트를 붙여서 사용하는 방식Flyweight 패턴ScriptableObject 사용이 이 패턴에 속함그 외 패턴들Facade 패턴Facade : 건물의 정면, 은행의 입구등을 생각하면 된다클래스에 큰 기능들을 묶어둔 뒤, 이에대한 접근 지점을 제공하는 패턴이 플레이어 클래스가 플레이어의 기능을 묶어두고, 접근지점을 제공하는 파사드 패..

숙련주차 개인프로젝트 - 버그 수정

팀 프로젝트 발표가 끝나고, 개인프로젝트 피드백 내용을 확인하는데 버프 시스템에 오류가 발생한다는 피드백을 받았습니다. 해당 버그를 확인하고, 수정하고자 프로젝트를 켜자마자 문제가 보였습니다.프리팹으로 빼두었던 버프시간 UI가 UI에 남아있던것을 확인하고 왜 오류가 발생하는지 알 수 있었습니다. 이 상태 그대로 실행하여 버프 아이템을 사용할경우, 이미 파괴된 게임오브젝트에 접근을 시도하였다는 내용의 오류가 발생합니다.제가 작성한 버프 UI는 플레이어의 버프가 추가될경우 변수로 등록한 게임오브젝트를 생성하고, 시간이 지나면 UI는 자체 스크립트로 인해 파괴되는방식이였습니다.public class BuffListUI : MonoBehaviour{ public GameObject buffInfoUI; ..

유니티 숙련주차 팀프로젝트 - 병합 완료

제출까지 2일남은 시점, 제작한 내용을 모두 병합하였습니다. 아이템 관련 내용을 당담하였기 때문에, 개인시연으로는 아이템 관련 부분만 진행하였습니다. Tab 키를 누르면 인벤토리가 열리고, 인벤토리에서 장비, 제작창을 열 수 있는 버튼을 만들어주었습니다.장비 탭에서는 현재 플레이어의 상태를 볼 수 있으며, 플레이어의 방어력, 추가 공격력등 장비의 스테이터스를 볼 수 있습니다. 단, 현재 장비의 스텟 변화가 실제 캐릭터에 적용된 상태는 아닙니다.장비, 소모품을 사용한 버프로 인한 스테이터스 변화는 별도의 스크립트가 저장하고 있으며, 이 내용을 캐릭터에 연결해주는 작업이 남았습니다.더보기public class CharacterBuffManager : MonoBehaviour{ private Equipm..

직렬화 특강 정리 - CSV, XML, Json 등

직렬화객체를 바이트 배열로 바꾸어 저장하는것프로그램의 기반유니티는 직렬화 데이터들의 집합 이라고 할 수 있음Scene,SO, meta, prefab 이 모두 직렬화 데이터메모장을 통해 prefab 등의 파일을 열어볼경우, YAML 형태로 직렬화 되어있는것을 확인할 수 있음역 직렬화저장한 데이터를 바이트 배열으로 바꾸어, 다시 객체로 변환하는것직렬화, 역직렬화의 과정코드들이 메모리에 산재됨재시작시 사용되는 메모리의 위치가 변경, 저장된 메모리는 이전 위치에 유지됨흩어져있는 내용을 정리해서 나열 → 직렬화나열된 값을 원래 자리에 되돌림 → 역직렬화직렬화를 한 뒤, 나중에 역직렬화가 가능함→ 직렬화를 통해 저장/통신 이 가능함 초기 직렬화0, 1 으로 데이터를 나열하여 사용 (바이트 배열)→ 컴퓨터는 이해하지..

유니티 숙련주차 팀 프로젝트 - 제작 시스템 추가

제작 시스템과 인벤토리 기반을 완성하였습니다.※ 아직 TMP에 한글폰트를 추가하지 않아서 글자가 모두 깨집니다. 제작에 필요한 아이템이 인벤토리에 있으면 제작 UI에 제작 가능한 아이템 목록이 나타나며, 이때 제작 가능한 아이템의 아이콘을 클릭하면 제작 재료 정보와 함께 제작 버튼이 활성화되도록 만들었습니다. 또한, 인벤토리에서 아이템 선택시, 상단에 아이템 정보를 출력하는 시스템을 제작하였습니다. 필요한 작업인벤토리는 플레이어파트를 당담한 팀원분에게 요청하여 파사드 패턴인 Player 클래스에서 접근 가능하도록 했습니다.단, 아직 제작시스템, 인벤토리 UI를 여는 입력이 완성되지 않았기 때문에 임시로 Update를 통해서 실시간으로 인벤토리를 확인하고, 제작 가능한 목록을 확인하고 있습니다.이 부분에서..

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

숙련주차 팀 프로젝트 - 생존게임 에서 아이템, 인벤토리, 자원 관련 부분을 당담하게 되었습니다.인벤토리와 아이템 관련 내용 기반을 구현한 뒤, 가장 문제가 될것으로 예상되는 크래프팅 시스템 기초를 다뤄보았습니다. 먼저 아이템 데이터를 저장하는 스크립터블 오브젝트 입니다.여기서 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..