내일배움캠프 Unity 트랙에 참여한 계기는 무엇인가요? 게임 개발 시 필요한 지식들을 배우기 위해서 참여하게 되었다. 본 코스 수료 후, 어떤 게임 개발자로 성장하고 싶나요? 제대로 서비스될 수 있는 완성도 높은 게임을 만들 수 있는 역량을 갖춘 게임
Unity로 제작된 누구나 쉽게 접근할 수 있는 캐주얼 게임이다.접근성이 높고, 복잡하지 않아 누구나 쉽게 개발할 수 있다.장르 : 어드벤처, 힐링특징 : 맵을 자유롭게 탐험하면서 힐링할 수 있는 게임.그 이유는? : 게임을 플레이해도 신체적으로도 정신적으로도 힘들지

선택한 게임의 이름은 무엇인가요?리그오브레전드선택한 게임의 장르는 무엇인가요?MOBA, AOS선택한 게임의 어떤 시스템에 집중하셨나요?챔피언해당 시스템이 동작하는 구조의 시작부터 과정을 자세하게 분석, 나열해봅시다.투사체 -> 챔피언 -> 투사체의 종류 확인 -> 만약
입력Console.ReadLine();출력Console.WriteLine();int인지 검사bool isInt = int.TryParse(입력 변수, out num);콘솔창에서 입력된 것 지우기Console.WriteLine();Parse는 문자열만 변환 가능하고,
강의 1주차이제부터 layout은 2 by 3을 써야겠다.Loop Time: 체크 시 반복움직일 오브젝트에 넣기 -> 같은 폴더에 animation controller 생성됨 -> Animation창 열고 그 오브젝트를 클릭해야 이미지 추가 가능연산: 계속해서 값을 변
Camera.main.ScreenWorldPoint(Input.mousePosition); // 스크린 상의 마우스 좌표 -> 카메라가 찍고 있는 world 좌표싱글톤: 다른 데서 자신을 부를 수있게 하나라고 세팅해둔 것유니티에서 데이터 보관하는 방법데이터 저장: \
Instantiate(프리펩, 위치, Quaternion(회전값)// Instantiate(prefab, new Vector(x, y), Quanternion.identity >> 회전값 x);Body Type: Kinematic -> 중력 영향 xKinematic으
Unity 오류..TLS Allocator ALLOC_TEMP_TLS, underlying allocator ALLOC_TEMP_MAIN has unfreed allocations, size 37메뉴 Assets -> Reimport Allpixels per unit:
5주차스플래시 이미지: 앱을 켰을 때 떴다가 사라지는 이미지Unity tool로 구현Eidt > Project Setting > Player > Splash Imageimage의 Mesh Type: Full Rect로 바꿔주고 사용하기Draw Mode: All Sequ
소리가 겹쳐서 안날 때는Play말고, PlayOneShot(clip) 사용Shape: 방출되는 모양Shape > Redius: 퍼지는 정도Color over Lifetime: 시간에 따라 색 조정Size over Lifetime: 시간에 따라 크기 조정유니티 기본 파티
git: VCS(Version Control System)수정된 것을 각자 가져올 수 있음.amend: commit message 바꾸기revert: 이미 push한 것 되돌리기checkout: 해당 시점까지 되돌리기 > 새 branch에 push새로운 repo 생성g
전에는 다른 팀원한테 머지를 맡기고 편하게 작업했었는데..ㅎㅎ이번에 머지를 해봤다. 역시 간단하지 않아서 걱정되었지만 아직 복잡한 수정은 없어서 잘 넘어갔다.5명이나 같이 유니티 작업을 해본 적이 없는데, 인원이 많으면 확실히 복잡하긴 한 것같다. 앞으로가 좀 걱정된다
오늘 try-catch문에 대한 질문이 나왔는데, 다른 팀원한테 들어온 질문이지만 나는 잘 설명할 수 있을 까 생각해봤다.. 뭐 대충 예외처리하는 것으로만 알고 있다. 학교에서 배울 때도 헤맷던 기억이 있다.그래서 찾아본 try-catchtry예외가발생할 가능성이 있는
트러블슈팅, 분배 관련 내용 등 제대로 작성하기사운드는 슬라이더 말고 이벤트 바인딩 사용하라고 하셨다.특정 이벤트가 발생할 때 실행될 함수를 지정하는 과정.ex)파티클도 넣을 걸 그랬다. 최근에도 했으면서 왜 생각 못했는지문제점 > 시도해본 것 > 해결방법 > 알게된
강력한 형식 시스템: 변수나 객체의 자료형이 미리 정의되어 있어 데이터 타입에 대한 안정성과 정확성 보장하는 시스템Ctrl + Space : 자동완성 다시 불러오기\\r, \\b는 어느 경우에 쓰는 거지메서드, 클래스 사이에는 두 줄 띄워주기메서드는 대문자로 시작해야한
3주차 강의 캡슐화: 관련된 데이터와 기능을 하나의 단위로 묶는 것 -> 정보 은닉, 외부에서 직접적인 접근 제한 상속: 기존의 클래스를 확장하여 새로운 클래스 만드는 메커니즘. 코드의 구조화와 유지보수 용이 다형성: 하나의 메서드 이름이 다양한 객체에서 다르게
C- 설계 복잡성 증가다이아몬드 문제: 어떤 부모 클래스의 멤버르 사용해야 하는지 모호해진다.인터페이스를 사용해야하는 이유코드의 재사용성다중 상속 지원클래스와 인터페이스 간에 느슨한 결합인터페이스클래스가 구현해야 하는 멤버를 정의한 것클래스의 일종이 아니고, 클래스에
알고리즘: 입력을 받아 원하는 출력을 생상하기 위한 절차공간 복잡도: 입력 크기에 따라 필요한 저장 공간의 양을 측정정렬 알고리즘선택 정렬: 배열에서 최소값/최대값을 찾아 맨 앞/뒤와 교환하는 방법 \- 시간 복잡도: O(n^2) \- 공간 복잡도: O(1)삽입 정
string에도 Contains("string")을 쓸 수 있다.문자열에서 특정 문자 제거c => !vowels.Contains(c): array에 포함되지 않는 문자 선택Where(): 특정 조건 만족하는 문자만 필터링.ToArray(): char\[] 배열로 변환n
cchar.IsLower(), char.IsUpper() - bool값Trim(): 문자열 앞 뒤 공백 제거백 제거cherry-pick: 원하는 커밋만 골라 불러오기relase branch: 플랫폼 별로branch 명: 작업자명도 붙이기
Ctrl + Shift + 위/아래 방향키: 같은 다음/전 단어로 이동몬스터를 생성할 때 플레이어의 레벨을 참조해서 스케일링을 한다.\-> 몬스터 클래스에 플레이어 변수가 필요하다.\-> 몬스터를 생성할 때마다 플레이어가 생성된다.\-> 비효율적임!! 어떻게 참조해야
하루종일 버그 수정만했다..코드를 작성할 때 테스트를 하면서 했어야 했는데, 다른 스크립트를 건들면 안되다 보니 하기 어려웠다.
JSON으로 데이터 저장하기객체를 JSON 형식 문자열로 변환 -> JSON 데이터를 파일로 저장 -> JSON 파일을 읽어서 객체로 변환파일 입출력 이용데이터 직렬화System.Text.Json 사용직렬화할 객체 정의직렬화역직렬화
일단 일정 수의 몬스터를 잡는 퀘스트를 구현하기Quest 클래스이름잡아야 하는 몬스터 이름목표 마릿수현재 마릿수보상 금액클리어 했는지 확인 변수quest에 대해 출력하는 변수QuestManager 클래스Quest 객체를 담을 리스트 questsPlayer playerM
서면 피드백 대기중
CameraProjection - Orthographic: 원근감 없는 카메라size: 설정해둔 수치만큼 상단부/하단부 설정, 가로 길이는 설정한 비율에 맞게 맞춰진다.Animatortransition - Has Exit Time : 체크 해제 시 이전 애니메이션이 끝
게임 종료 시 플랫폼마다 다른 동작transform.Find("객체이름").GetComponent<>(): GetChild와 다르게 경로명을 받아온다.Mathf.Atan2(y, x): y값과, x값을 받아서 그 사이의 세타값(라디안 값) 구함.Mathf.Rad2D
NPC 충돌처리NPC가 게임 진행 되는 동안 랜덤으로 이동하게 만들어놨다. 벽이나 통과 못하는 오브젝트를 지나가지 못하게 해야했다.NPC 이동을 처음엔 코루틴으로 만들었는데, 거기에 오브젝트를 감지하는 레이케스트를 추가하니, 유니티가 멈출 때도 있고, 제대로 작동을 안
객체 중심점 옮기기해당 sprite 원본 Sprite Editor에서 옮기면 된다.장애물을 한번에 10개씩 만들고 일정 시간 뒤에 다시 10개씩 생성하게 InvokePeating으로 만들었는데, 유니티가 멈췄다.\-> 최대 개수를 정해서 처음에 최대 개수만큼 생성한 후
미니 게임을 시작하면 UI를 띄우고 Time.timeScale = 0; 으로 게임을 멈춰놓는다.카메라가 플레이어의 일정 위치를 보여주게 설정해놨는데, 멈춰놓으니 계속 (0,0,0)좌표와 설정 해놓은 위치를 계속 왔다갔다 거린다..\-> player의 위치를 찾았으니 p
문제NPC를 게임 진행 되는 동안 랜덤으로 이동하게 만들었습니다. 그래서 맵에 있는 구조물이나 맵 벽을 통과 못하게 해야 했습니다.NPC의 이동은 이동할 방향을 랜덤으로 결정한 뒤 그 방향을 Raycast로 오브젝트를 감지하여 있다면 다른 방향으로 이동하게 코루틴으로
input system 설치해서 player input 설정가능설정한 Action 값에 대한 함수를 호출할 수 있다. on~on 함수에 설정한 매개변수를 추가해준다. InputValueCanvas를 추가하면 같이 추가되는 EventSystem은 UI를 클릭하는 것을 감

추상 클래스, 인터페이스 둘 중 어떤 것으로 해야할까아이템들의 공통 기능: 점수, 플레이어와 닿으면 사라짐, 스탯 증가인터페이스는 필드 정의를 못해서 추상 클래스로 결정추상 클래스로 하기에는 공통 함수를 작성해야되서 추상은 빼고 아이템 클래스들을 상속해주기로 했다.보물
sprtie atlas: 여러 개의 스프라이트를 하나로 만들어서 메모리를 적게 소모하게 한다. drawcall도 감소게 소모하게 한다. drawcall도 감소한 UI는 한 스크립트에서 관리DOTweentransform.DOLocalMoveY(원하는 위치, 몇 초동안):
버그가 너무 많아요
자석 능력이 있는 캐릭터에 원형 콜라이더가 달려있었다. 콜라이더 안에 코인이 들어오면 플레이어한테 끌려올 수 있게. 그런데 게임 시작 즉시 죽는 현상이 발생했다.맵의 DropZone과 원형 콜라이더가 걸렸다. \- 그래서 플레이어 인스펙터에서 콜라이더를 지우고, 따
델리게이트delegate 반환형 델리게이트이름(매개변수);생성만으로 사용 가능하지 않다. new를 통해 만들고 변수에 넣은 다음 사용확장성! - 측정이 불가능한 경우 주의Action: 반환형 없을 때Predict: 반환형 존재Func: 반환형이 bool, 매개변수 in
스카이박스배경을 둘러싸는 환경 매핑 기술6개의 텍스처로 구성된 큐브 맵 또는 하나의 구체로 텍스처가 매핑된 구체형 스카이박스로 구성게임 중 동적으로 변경하여 낮과 밤 등의 시간대나 특정 이벤트에 맞게 배경 변화 가능최적화 주의!프로퍼티 \- Tint Color \-
AI Navigation 인공지능이 게임이나 시뮬레이션 등 가상 환경에서 이동하는 방법을 결정하는 기술 Navigation Mesh: 3D 공간을 그리드로 나누어 이동 가능한 지역과 장애물이 있는 지역을 구분함 캐릭터가 이동할 수 있는 영역과 이동할 수 없는 영역을
낙하 피해 구현플레이어가 땅에 있지 않는 시간이 제한 시간보다 많을 때 데미지 입음.아이템 구현SO로 아이템 데이터를 저장한다.인벤토리 구현아이템을 저장할 ItemSlot을 만들고, UIInventory에서 관리한다.UIInventory에서는 인벤토리에 아이템 추가,

다운받은 에셋을 임포트해서 모델을 씬에 배치하면 텍스처가 자동으로 적용되지 않는다. 이 때 모델에 적용되어 있던 Material의 복사본을 만들어 해결했다.Create Material Preset을 눌러 모델의 material과 동일한 것을 생성한다.생성된 materi
문제아이템 효과가 일정 시간 후에 해제 되어야 하는데 해제가 되지 않는다.해결아이템을 상호작용하면 아이템이 삭제되어서 다음 코드가 실행이 안된 것이였다..아이템 실행 코드를 다른 스크립트로 옮겨 해결했다.문제플레이어 위치 조정하고 발사하는 것까지 코루틴으로 만들어놨는데
디자인 패턴프로그램 구조를 만들 때 자주 발생하는 문제에 대한 해결 방법목적생성 \- Singleton, Abstract Factory 등구조 \- Adapter, Decorator 등행위 \- Mediator, Observer 등 싱글톤클래스에 인스턴스가 하나
다이얼 자물쇠다이얼은 3개의 드럼으로 이루어져있다.다이얼을 클릭하여 상호작용 -> 화면에 크게 띄움 -> 드럼 객체 클릭 -> 클릭된 드럼이 조금 확대된 뒤 화살표 활성화 -> 화살표 조작하여 숫자를 맞춘다.다이얼 숫자 검사 \- 화살표를 누를 때마다 현재 숫자를 저
상호 작용하여 움직이는 오브젝트IInteractable을 상속받아, 텍스트 세팅과 상호 작용 시 적용되는 동작을 추가하도록 했다.오브젝트를 좌우 선택을 해서 밀 수 있어야 되기 때문에 Player와 연결하기 전인 지금은 마우스의 월드 좌표와 오브젝트의 중앙 좌표를 비교
플레이어의 시야 기준으로 방향을 판단하여 상호 작용하도록 수정했다.Vector3.Dot(Vector3 a, Vector3 b)두 벡터 간 내적 계산위 코드에서 카메라의 오른쪽 방향 벡터와 카메라에서 물체까지의 방향 벡터를 비교하였다.dotProduct 값이 음수면 왼쪽
UI가 아니고 3D 객체로 추가한 TMP는 빛 영향을 받지 않는다.
모든 걸 참조형으로 하는 것이 편하다. -> 처음 구조 짤 때는 클래스인터페이스도 굳이 사용하지 않아도 된다.SO는 정적인 데이터만한 씬에서 작업을 한다면 만들어 둔 것 prefab화 해두기 캔버스가 늘어나면 부하가 많이 들어난다. (카메라가 늘어난다고 생각)체력바와
Unity 배치고사Ray를 화면 중앙 기준으로 반환Coroutine 동작a > b > a > b > c3초 대기동안 StartTestCoroutine이 다시 호출돼서 기존 코루틴이 종료된다.
CinemachineUnity에서 제공하는 카메라 제어 시스템코딩없이 카메라 이동, 전환, 흔들림, 추적 가능.Cinemachine Brainpriority가 높은 VirtualCamera를 따라간다.Cinemachine VirtualCameraBody: Follow에
UIManager각 캔버스 전환 / 활성화 여부플레이어 참조UIMainMenu메인메뉴에 있는 UI 활성화각 버튼 기능Manager에서 플레이어 정보 가져와서 UI 업데이트UIInventory아이템 슬롯 사용/장착 버튼선택한 아이템 정보UIStatus플레이어 스탯착용한
MonoBehaviour 를 상속받고 있으면 new 생성자가 안먹힌다..
아이템 장착/사용 후 인덱스가 변함Resources 폴더에서 에셋 불러오기DoTween
유한상태 기계유한한 갯수의 상태들로 구성된 기계 및 패턴상태와 상태 간의 전환을 기반으로 동작구성 요소상태: 시스템이 취할 수 있는 다양한 상태전환 조건: 상태 간 전환을 결정하는 조건동작: 상태에 따라 수행되는 동작 또는 로직동작 원리초기 상태에서 시작하여 입력 또는
state 패턴IState 인터페이스StateMachine 추상 클래스MonsterBaseState 클래스
유니티 내에서 파일을 옮길 때 액세스 거부가 뜰 때가 있는데visual studio를 끄고 다시 시도해보면 해결된다.몬스터 객체가 여러 개 있을 때 state변환이 안된다..stateMachine이 공유 되고 있는 건지 확인해야한다.생성된 stateMachine의 ha
몬스터 드랍 - 오브젝트 풀자원 생성 시 비활성화 코드 이벤트에 추가아이템 획득 시 비활성화
몬스터 위치에 데미지 UI 출력몬스터 객체에 데미지 UI를 띄울 빈 객체를 만들어서 위치를 넘겨주도록 했다.
몬스터가 죽고 다시 태어날 때 NavMesh 오류가 났다..stateMachine이 null일 땐 추적을 안하도록 수정하여 해결했다.
폴더 이름에 이니셜 지양동적 UI 사용해보기프레임워크 사용해보기
유니티의 기본 오디오 엔진은 오디오 레이턴시 같은 현상이 많아 리듬게임을 개발하는 경우 FMOD라는 사운드 미들웨어를 사용한다고 한다.사운드 엔진으로 오디오 랜덤화, 크로스페이드 등 적응형 오디오와 관련해 많은 기능 지원적응형 오디오(Adaptive Audio): 게임
플레이어 참조씬 전환게임오버데이터 로드 \- Json \- UGSDataManager에서 스테이지 데이터 로드 \- Stage 구성: npc, blocks, eventsBaseUI show/hide 등Resource 로드한 데이터 캐싱
UGShttps://shlifedev.gitbook.io/unitygooglesheetsResourceManager 수정이름으로 불러올 수 있게 수정했다.SoundManager - 볼륨 설정
Block 조합 규칙들..
UGS에 커스텀 클래스 추가하는 부분에서 오류가 났다.namespace를 추가 안해주면 경로를 못찾아서 오류가 난다.추가해줘도 key값을 못찾는 오류가 발생했다.CombineRule은 Enum값을 포함하는데, 구글 시트에 비워둔 것이 문제였다.Enum에 None을 추가
TimeLine플레이어가 레이로 블럭 오브젝트 와 상호작용 -> 플레이어가 그 블록의 정보(id 등)을 넘겨줘서 타임라인에 dragSequence 생성(UI_Sequence가 블록 변수 가지고 있어야 넘겨줄 수 있겟지)
씬 전환 시 Gamemanager에서 새로운 Player를 참조할 수 있게 했다.플레이어와 관련된 것(컨트롤러)들은 재참조해줘야 해서똑같이 sceneLoaded를 사용해서 해결했다.
destination과 steeringTarget 차이점destination: 최종 목적지steeringTarget: 현재 이동 중인 경로에서 다음으로 가야 할 코너 위치 \- Target이 도망갈 때 사용할 것 같다.Navmesh 적용된 npc 구역 제한오브젝트 생
시야 내로 들어오면 의심 수치 상승 -> 행동 반응 없음의심 수치 맥스 -> 경계 발동 ->최소 경계 시간동안 지속형 행동반응 시작경계 시작 시작 (플레이어 안) 최소가 지나기전에 플레이어 밖\-> 최소 시간까지는 행동을 함다시 플레이어가 들어올때마다 경계 시간 초기화
레이케스트가 어떠한 컴포넌트를 감지하려면 콜라이더가 있어야 한다. 자식 객체에 콜라이더가 있어서 감지를 못했다. -> 유지하려면 GetComponentInChildern
코루틴 wait - 생명주기 함수는 돌아감
NPC 행동 변경
타임라인 내 블럭 삭제, 좌측 정렬
3,3 리스트 값 받아오기 오류가 났다.아래처럼 고쳐서 해결했다.게임 클리어 UI지정된 텍스트가 없다면 삭제해서 vertical layout에 깔끔하게 나오게 했다.
블럭 중복 조합 방지블럭마다 후속/선행 조합을 이미 검사했는지 bool값을 넣고 true일 때는 검사를 패스하려고 했지만 어떻게 해도 안됐다..그래서 타임라인 배치된 순서대로 블럭을 검사하니, 배치된 블럭의 리스트를 새로 만들어서 검사한 블럭의 조합과 맞춰진 블럭은 리
접촉 블럭 규칙 추가
애니메이터의 state의 motion(clip) 코드로 변경해주기블럭 성공여부에 따라 클립도 바꿔줘야 플레이 시 정상적으로 애니메이션이 출력된다.기존의 AnimatorController를 복제해 그 곳에 연결된 AnimationClip만 다른 것으로 바꾸는 클래스기본
NPC가 정지할 때 미끄러지듯이 멈추는 현상이 있었는데, 멈출 때 navMeshAgent의 속도를 초기화시켜 해결했다.
세이브/로드
씬 전환 시 함수 호출 순서
알고리즘 문제
걷다가 멈춤(걷는 모션 포함되어있음), 뛰다가 멈춤(멈추는 모션만 있음) 애니메이션이 달라서 구분해줘야 하는게 좀 그렇다.플레이어와 충돌하면 서서히 멈추도록 했다.
Block과 Event를 같이 사용할 수 있게 리팩토링상호작용할 수 있는 객체에 상속받게 하고 있는 IInteractable로 한번에 관리하려고 했는데, 공통으로 갖고 있는 변수(id같은)를 사용할 때마다 타입을 나눠서 해주게 되었다. -> 비효율적인것같음.추상 클래스
면접 준비 (3)
접촉블럭이 시퀀스 지정되는 조건이 여러 개에서 string 리스트로 DataTable에서 정보를 받아와서 파싱해서 쓰기로 했다.사망트리거인 블럭 중 조건에 맞는 id가 있다면 그 것이 포함된 클립으로 바꾸기
NPC 기본 행동을 추가했다.위치 고정에 애니메이션 반복 재생코드 위치를 어디다 놓아야할 지 고민했는데 IdleState의 Update()에 넣어, AlertState를 빠져나갈 때 애니메이션을 멈추도록 했다.코드에서 처럼 애니메이션 재생/정지를 hash값으로 받게 수
생명 주기 함수들 순서를 잊지말자..Awake -> OnEnable -> Start

LineRenderer로 오브젝트 연결선 구현
면접 준비 (4)

Guard NPC의 기본 행동 타입을 추가했다.한 자리에서 대기하다가 시야에 플레이어가 들어오면 추적 -> 놓치면 처음 자리로 돌아오기처음 자리를 start에서 지정해줬는데, 아래 같이 해서 startPosition이 고정되지 않았다.\-> 플레이어 추적 후 놓치면 다

PlayerInput에 action을 추가해준다.virtualCamera의 FOV값을 스크롤에 따라서 변경되게 해준다. 총 오브젝트와 상호작용하면 조준 화면으로 바뀌어야 한다.상호작용 시 카메라의 우선도를 높이고, 다시 상호작용하면 줄여 플레이어 카메라로 전환되록 했다
NPC의 플레이어 감지 함수를 변경했다.벽 넘어 플레이어가 감지되면 안돼서 Ray로 감지한 것들을 받아서 제일 가까운 것이 Player의 Layer가 아니면 감지한 것이 아니게 수정했다.
쏟아지는 버그!지인, 가드가 문을 못 열어서 자식에 콜라이더를 따로 달아 OnTriggerEnter로 감지하면 열도록 하였다. 이렇게만 해서는 작동 안함\-> 해결: RigidBody 달아줘서 해결했다.Text.text에서 따로 색을 지정하고 싶었다.<color=