분류 전체보기 132

특강 - 게임을 완성시키기 위한 기획

게임 개발에서의 커뮤니케이션서로의 생각을 이해하고, 함께 가고자 하는 방향으로 합쳐나가는것함께 가고자 하는 방향을 어떻게 잡을것인가 → 기조를 어떻게 잡을것인가기획에 대한 생각을 납득하게 하는것이 중요하다.납득을 위해 논리를 사용하게 된다.기조는 보통 상급자 (기획자)가 결정하게 되지만, 아마추어 단계에서는 개발자 본인이 결정하게 될 수도 있다. 좋은기조가능한 모든 구성원이 동의할 수 있어야한다.쉽게 변경되지 않아야한다.기조간의 우선순위가 명확하게 체계화 되어야한다.좋은 기조를 위한 기반논의를 주도할 리더가 있어야한다수평적 의사결정은 오히려 독이 될 가능성이 있다프로젝트 초기에 기조를 정해두는것이 좋다기조는 의견합치가 중여한데, 추상적인 상태에서 합치는것이 쉽다중간에 기조를 바꿀경우 의견 충돌의 가능성이..

게임 제작을 나누는 단계

최종프로젝트 진행 전, 어떻게 프로젝트를 진행해야하는지에 대한 내용 정리입니다. 게임 사이클을 만들기게임 사이클은 게임을 시작하고, 게임이 끝날때 까지의 진행 과정입니다.솔로플레이, 챕터 진행 방식의 게임이라면, 챕터의 시작를 시작하고, 챕터가 완료될 때 까지 어떻게 진행될지를 만들어야 합니다.PVP형태의 게임이라면, 매칭이 끝나고 게임을 어떻게 시작할지, 게임의 진행은 어떻게 될지, 게임이 어떻게 종료될지(승리, 패배 판정) 을 만들어야합니다.단계를 나누기1단계구현이 종료되면 게임이 돌아가는 단계입니다.게임성, 화려한 이펙트, 추가기능등은 구현할 필요가 없습니다.게임이 진행되기만 하면 됩니다. 로그라이크형 게임일 경우, 스테이지가 시작된다 - 방에 입장하면 전투가 시작된다- 전투가 종료되고 보상을 준다..

타일맵 위치에 오브젝트 생성하기

팀 프로젝트로 타워디펜스를 제작하게 되었는데, 타일맵을 사용할 때, 타워의 설치 위치를 정해주어야 하는 상황이 생겼습니다. 일단 마우스가 Collider 에 올라가면 자신을 설치 위치로 잡아주는 오브젝트를 제작하였는데, 이것을 지정한 타일에 올려줄 방법이 필요아였습니다.public class ConstructPoint : MonoBehaviour{ public bool IsTowerConstructed { get; private set; } public Transform constructPosition; public Tower ConstructedTower { get; private set; } [SerializeField] private GameObject selectImage; ..

중첩 코루틴, 다수의 코루틴

유니티 공식문서의 코루틴 부분 마지막에는 이러한 문구가 있습니다. 일련의 작업을 최대한 적은 수의 개별 코루틴으로 압축하는 것이 가장 좋습니다. 중첩 코루틴은 코드 명료성과 유지관리에 용이하지만 코루틴이 오브젝트를 추적하기 때문에 더 많은 메모리가 소모됩니다.코루틴이 매 프레임마다 실행되고 오래 실행되는 작업에서 yield 되지 않는 경우 Update 또는 LateUpdate 콜백으로 대체하는 것이 더 효과적입니다. 이는 오래 실행되거나 무한 루프되는 코루틴의 경우에 유용합니다. 이때, 중첩 코루틴의 경우, 실행중인 코루틴 내부에서 다른 코루틴을 호출하는 경우로, 이러한 경우를 사용하지 않는것을 권고하고 있습니다. 또한, while문을 사용하여 실행중 무한히 반복되는 코루틴이나 오랜시간동안 실행되는 코루..

특강정리 - 디버깅, 프레임 워크 구조

코드가 복잡해지면, 문제가 발생할 가능성이 높아짐이를 해결해기 위해 디버깅 과정을 거쳐야함 중단점f9 혹은 디버깅을 하고 싶은 줄의 좌측을 클릭해서 생성실행중 중단점을 만나면 해당 위치에서 코드 중단유니티에서 사용시, 중단점을 찍은뒤, 유니티에 연결을 누르고, 씬 재생중단점을 만났을때, 해당 지점에서 필드에 어떤값이 들어있는지를 확인 할 수 있음호출 스택함수가 참조되었을때, 해당 함수가 어디에서 호출되었는지를 보여줌조건특정한 상황이 동시에 발생했을때 만 디버깅 하고싶을때 사용 가능중단점에 조건을 걸어서 해당 위치에서 조건을 충족중일때 코드를 중단조건이 있을경우 중단점 원에 + 가 붙음추가 기능f10 - 프로시저 단위 실행 : 해당 코드의 다음 줄 실행(메서드 내용은 단계별 실행 없이 전부실행)f11 - ..

심화주차 진행상황 - 시간부족

심화주차 개인과제로 방치형 RPG를 선택하고, 현재 진행상황입니다. 현재 게임 자동진행, 재화 내용을 만들고, 마지막 스테이지를 클리어하면 스테이지가 재시작 되도록 설계한 상황입니다. 문제점생각해보니 마지막 스테이지가 종료되고 씬을 완전히 다시 불러오는것은 좋지 못한 선택이였던것 같다.씬을 다시 로드하게되면 팝업형태의 UI는 전부 사라질텐데 그러면 인벤토리를 열고있다가 스테이지가 종료되면 인벤토리가 닫히는 상태가 되버릴텐데....다시 생각해보니 방치형 게임은 보스를 잡고 나서 씬이 넘어가고 그 전까지는 계속 사냥을 반복하지 않나?보스사냥도 게이지가 전부 차면 보스 사냥 선택지가 나오고 or 보스 소환 여부를 선택하고 보스 사냥에 실패하면 스테이지로 돌아가는 기믹 이였을텐데사실 각 스테이지를 오브젝트 풀로..

개인프로젝트 - 맵 생성중 발생한 오류

맵을 생성한 뒤 특정 위치에 캐릭터 프리팹을 생성, NavMeshAgent 를 통해 이동을 시도할때 Agent 에서 오류가 발생 캐릭터를 생성한 뒤, navMeshOwner를 확인 할 경우 정의되지 않은 내용 참조 오류가 발생함 문제 원인 : 캐릭터 프리팹을 생성한 뒤, 생성한 프리팹의 스크립트에 이동 로직을 호출하지 않고 등록한 프리팹 객체의 스크립트를 호출하여 발생한 문제. 이를 해결하기 위해 프리팹 오브젝트를 생성한 뒤, 여기서 캐릭터 스크립트를 얻어서 별도로 등록등록한 스크립트를 호출하는 방식으로 문제 해결GameObject character = Instantiate(PlayerManager.Instance.ReturnEntryCharacterPrefab(i), StageManager.Instan..

특강 정리 - 직렬화 2차특강

플레이어 객체 → 여러 정보가 필요, 저장/불러어기가 가능해야함레벨경험치닉네임※ 묶어서 관리하기위해 직렬화 클래스로 관리public class Character : MonoBehaviour{ public UserData userData;}[System.Serializable]public class UserData{ public string nickname; public int lv; public float hp; public List friends = new List(); public Inventory inven;}이때 데이터 사용시에는 데이터를 저장한 클래스를 통해서 사용public Character character;public void CheckUserName(){ ..

특강 정리 - 객체지향, UGS

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

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

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