내일배움캠프 Unity트랙 6기 1. 내일배움캠프 Unity 트랙에 참여한 계기는 무엇인가요? 게임 개발자에 대한 관심이 생기고 Unity를 이용한 간단한 게임을 만드는 강의를 수강했었습니다. 똥피하기 게임과 비슷한 게임을 만드는 강의였는데, 매우 쉽고 간단한 게임
Unity를 이용해 만든 프로젝트 | / | 서비스 명 | 장르, 분류 | 제작사 | | --- | --- | --- | --- | | 첫 번째 프로젝트 | | | | | 두 번째 프로젝트 | | | | | 세 번째 프로젝트 |
형변환 (Casting) : data의 자료형을 다른 자료형으로 변환숫자 - 숫자 : (변환하고자하는 자료형)변수 - 명시적 변환아래의 코드와 같이 float → int의 경우 소수점 아래의 모든 값을 제외하기 때문에 명시해주어야 한다.string으로 형변환 : 변수.

에셋(Asset) : 게임을 구성하고 있는 요소ex) 사운드, 배경, 이미지, 애니메이션, 음악 등등에셋을 직접 만들어 판매하거나 만들어진 에셋을 구매할 수 있는 대표적인 장소가 Unity AssetStore이다. 유니티 에셋스토어에는 무료 에셋부터 시작해 매우 높은
위 코드에서 보면 Convert 클래스와 Parse 함수 모두 변환하고자 하는 자료형으로 변환할 수 없는 경우에 오류가 발생한다. 여기서 Convert와 Parse의 차이점을 확인할 수 있는데,Convert의 경우, null 값은 int형으로 변환할 때 0을 반환Par
위 코드에서와 같이 두 정수 a와 b를 나눗셈할 때, 연산 / 의 결과값도 정수로 나온다.실수로 얻고 싶다면 둘 중 하나라도 float, double 형태여야 한다.프로그래밍에서도 연산자 사이에도 우선순위가 있다.많은 연산자들이 있지만 이번에는 우선 산술 연산 중 사칙

Minecraft 마법 부여(Enchanting) 선택한 게임의 이름은 무엇인가요? > Minecraft 선택한 게임의 장르는 무엇인가요? > Sandbox, Survival 선택한 게임의 어떤 시스템에 집중하셨나요? > 마법 부여(Enchanting)
Level2-3. 본격 프로그래밍 시작해보기 콘솔창에서 데이터 입력 받고 숫자인지 문자인지 불리언인지 판단하고 숫자라면 0, 짝수, 홀수를 구분해서 알려주는 간단한 프로그램 문제를 풀어보았다. 언제 if 를 쓰고 언제 case 를 쓸까? if문의 장점 > 조건 설정
TryParse()와 if문을 이용하여 입력받은 데이터가 숫자인지 판단하여 알려주고 입력받은 데이터가 모두 숫자라면 두 수를 비교하는 프로그램을 작성하는 실습을 해보았다.
걷기반 퀘스트 5. 대한민국의 수도는? 대한민국의 수도를 묻고 정답을 입력받아 확인하는 프로그램을 만들어보는 퀘스트를 수행했다. if문과 switch문을 이용해 문제를 해결해보았다. 입력받은 데이터가 숫자(int)인지 확인하고 맞다면, 1 ~ 4 범위의 값은 정답
오늘은 위의 그림과 같은 게임을 만들어보는 강의를 시청했다.캐릭터 움직이기빗방울 Prefab 제작GameManager - 빗방울 반복생성, 점수 구현, 시간반영, 게임 끝내기
콘솔창에 입력을 받아 3글자 이상 10글자 이하면 이름으로 출력하고, 아니라면 3글자 이상 10글자 이하가 될때까지 입력을 받는 프로그램을 작성하였다. 조건문과 do while문을 활용하였다.
게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 2주차
1 ~ 100 숫자 중 홀수만 출력하는 프로그램을 작성.1-1. for문을 사용해 홀수 출력하기1-2. while문을 사용해 홀수 출력하기1-3. do-while문을 사용해 홀수 출력하기주어진 숫자 배열의 합계와 평균을 계산하는 프로그램을 작성NumArrSum(): 배
어제에 이어 오늘 원하는 기능을 모두 구현해 응용 게임을 완성했다. 다만 기능들을 더 좋은 방향으로 구현할 수 있는지 나중에 더 공부해보고 확인할 필요가 있다고 느꼈다.오늘한 작업Rtan - EnergyRtan 캐릭터에 Energy 오브젝트가 닿으면 캐릭터의 이동속도가

주어진 숫자 배열에서 최대값과 최소값을 찾는 프로그램 작성

그림과 같이 생선가게 주인 강아지가 몰려오는 고양이에게 밥을 던져 배를 채워서 내쫓는 게임을 만들어보았다.GameObject - Dog생선가게 주인 강아지GameObject - Food생선가게 주인 강아지가 쏘는 오브젝트.Rigidbody 2D - Body Type -

카드를 뒤집어서 짝을 맞추는 게임 Image1, 2, 3 왼쪽부터 StartScene, 게임 진행 화면, 게임 종료 화면StartSceneAudioManager 게임 배경음악을 담당하는 오브젝트. StartScene과 MainScene에 모두 있어서 스크립트에서 Au
사용자로부터 알파벳을 입력 받아 숨겨진 단어를 맞추는 게임 프로그램을 작성하였다. 사용자가 단어의 모든 문자를 맞추거나 주어진 기회 내에 맞추지 못할 때까지 반복한다.

숫자 야구 게임 - 컴퓨터가 고른 3자리의 숫자를 맞추는 게임컴퓨터가 고른 3자리 숫자는 모두 다른 숫자로 이루어져 있다. 사용자는 3자리 숫자를 입력하고, 컴퓨터는 입력한 숫자와 비교하여 스트라이크와 볼의 개수를 알려준다.스트라이크 : 숫자와 자리수가 모두 맞는 경우
관심 있었던 게임 "역 기획" 분석 리그 오브 레전드 (League of Legends) 이 게임의 매력 포인트는 무엇인가요? 168명의 다양한 챔피언 목록: 챔피언에 따라 매번 색다른 경험을 할 수 있고, 자신에게 맞는 챔피언을 선택할 수 있습니다. 다양한 챔피언
분산 버전 관리 시스템(Distributed Version Control Systems - DVCS)팀을 이뤄 여러 명의 개발자가 하나의 프로젝트를 진행할 때, 코드의 변경 내용을 추적하고 관리하는 데 사용되는 분산 버전 관리 시스템이다.GitHub은 Git을 기반으로
카드 뒤집어서 짝 맞추는 게임을 팀원을 나타내는 캐릭터 이미지를 넣어 팀원을 소개할 수 있는 게임으로 만드는 작은 프로젝트다. 사전캠프 때 주어진 강의의 4, 5주차 - 카드뒤집기 게임을 응용하여 만들었다.게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 4, 5
그림 1 Stage를 선택할 수 있는 SelectStage SceneStage 1 ~ 3까지 만들고 각각의 Stage를 Scene으로 저장했다. 그림 1에서와 같이 Stage를 선택할 수 있는 Scene에서 처음에 Stage 2, 3는 잠겨있고 Stage 1만 시도할
내가 작성했던 코드를 다시 살펴보고 코루틴에 대해 좀 더 알아보았다.참고Unity: 비동기와 코루틴을 혼동하지 않기. calci. 2021. 10. 10. 08:51. https://tistory.jeon.sh/59유니티 코루틴 (Coroutine). 엔츄핀.
프로그래밍은 알고리즘을 작성하고, 그에 맞는 자료구조를 선택하는 것이라 할 수 있다. 따라서 자료구조를 제대로 알고 있지 않으면 실력 있는 개발자가 되기 어려울 것이다. 개발자로서 내실을 다지기 위해 자료구조를 알아보자.데이터를 효율적으로 다루기 위해 데이터를 조직,
숫자 맞추기 게임 Tic-Tac-Toe Game
객체지향 프로그래밍(Object-Oriented Programming, OOP)
기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식기본적으로 열거형 멤버의 연결된 상수 값은 int 형식으로 지정하지 않으면 0으로 시작해서 순서에 따라 1씩 증가한다. 위의 예시를 보면 Warrier = 1로 명시적으로 지정했을 때, Archer는 4가
아이템 판매 시 상점의 아이템 목록 리스트에 추가되게 했는데 아래의 그림과 같이 중복으로 추가되는 경우가 생겼다.판매한 아이템이 상점 아이템 목록에 있는지 확인한 뒤 상점 아이템 목록 리스트에 추가하는 메서드 작성
콘솔창Console.WriteLine()으로 작성한 내용이 콘솔창 크기에 따라 줄이 바뀌거나 여백이 너무 많이 남는 등의 문제가 생겼다. 또 기본 콘솔창에 나타난 게임 씬의 위치나 글자색, 배경색 등을 변경하고 싶었다.Console 클래스.Net Console 클래스에
개인과제 TextRPG에서 좀 더 발전시킨 게임을 팀프로젝트로 진행와이어프레임깃허브로 팀프로젝트 진행 시 같은 파일을 작업하면 충돌이 빈번히 일어나기 때문에 각자 어떤 부분을 개발할지 역할을 분담하는 부분에서 어려움을 겪었다. SA 와이어프레임을 함께 만들어서 전체적인
어제 생각했던 거는 부모 클래스인 Character 클래스를 상속 받는 각 직업 클래스를 만들고, 아래의 코드와 같은 방식으로 Character 클래스의 참조변수 character로 각 직업 클래스를 참조하는 방식으로 직업 선택 기능을 작성해보고자 했다. https&#
JavaScript 객체 구문을 기반으로 구조화된 데이터를 나타내기 위한 표준 텍스트 기반 형식 Key : Value Pair 및 배열 등 직렬화 가능한 값으로 구성된 데이터 객체를 저장하고 전송사용자가 읽을 수 있는 텍스트를 사용하는 개방형 표준 파일 형식 및 데이
csv 파일은 ' , '(쉼표)로 데이터를 구분하고 있는 텍스트 파일이다.Test.csv의 파일에 다음 데이터가 저장되어 있을 때, Test.csv 파일을 읽어보자csvFilePate에서 @"......\\"부분은 디버그 실행 파일이 있는 파일경로:\~~\\Consol
플레이어 클래스를 Json으로 직렬화하여 저장하고 다시 역직렬화했을 때 스킬에 대해서 NullReferenceException이 발생했다.캐릭터에서 스킬 클래스의 인스턴스를 생성하는데 역직렬화 후 인스턴스를 참조하지 못했다.마이크로소프트 Learn - .Net - JS
콘솔창을 꾸미기 위해 Console.foregroundColor를 사용했는데 색을 자주 바꿔야 하는 경우 일일이 작성하기 보다는 메서드로 만들어서 가독성을 높이는 것이 좋다.내가 작성한 코드를 수정 등 추후에 다시 건드리는 경우가 생겼을 때 쉬울지 생각하며 작성해야 한
월드 좌표계 (World Coordinate System)(0, 0, 0)을 원점으로 하여 오브젝트의 위치, 방향 등을 표현하는 좌표계로컬 좌표계 (Local Coordinate System)기준이 되는 대상에 대해 X, Y, Z축 방향으로 얼마만큼 차이가 있는지(상대
유니티에서 데이터를 저장하고 관리하는 데이터 컨테이너게임에서 재사용 가능한 데이터나 설정을 저장하는 데 사용코드와 데이터를 분리하나의 Scriptable Object를 여러 게임 오브젝트에서 참조, 재사용 가능인스펙터 창에서 직접 수정하고 관리할 수 있음유니티에서 게임
Unity New Input System을 활용하여 캐릭터 움직임 제어하기TileMap으로 맵 제작카메라가 캐릭터를 따라 움직이게 하기캐릭터 애니메이션 추가맵 테두리에 벽을 만들고 Tilemap Collider Component를 추가하여 캐릭터 Collider와 충돌
Start Scene에서 캐릭터 선택 및 이름 입력Main Scene에서 플레이어 이름 변경Main Scene 현재 시간 표시Main Scene 메뉴 UIMainScene에서 이름을 변경할 때 wasd를 누를 때마다 플레이어가 계속 이동함이름을 설정하는 UI가 SetA
플레이어 이름 변경 등 UI가 활성화된 상태에서 캐릭터의 이동을 막고 싶은 경우가 생기는데 기존의 캐릭터 이동을 멈추는 방법에서 문제가 발생.이름 변경 시 2~10글자의 이름을 입력하지 않으면 안내문구 "2 ~ 10글자의 이름을 입력해주세요"가 3초간 빨간 글씨로 강조
세상에 존재하는 모든 개념객체를 설명하거나 표현하기 위한 문법메모리에 할당되어 있는 클래스클래스를 이용해 실제로 메모리에 생성(표현)된 객체객체를 설명하거나 표현할 수 있는 변수와 메서드를 하나의 단위(클래스)로 묶는 것정보를 은닉하고, 외부로부터의 직접적인 접근을 제
적은 4종류1\. 생성 시점에 플레이어 캐릭터의 위치로 직진하는 적2\. 플레이어 캐릭터를 끊임없이 추적하는 적3\. 플레이어 캐릭터와 특정 거리로 가까워지면 주변을 원형으로 도는 적4\. 플레이어 주변에서 랜덤한 위치로 순간 이동하는 적3번 적의 움직임을 구현하는 과
EnemyManager - 적 생성적을 랜덤한 위치에 n초마다 오브젝트 풀에서 가져와 생성하고, 오브젝트 풀에서 모두 SetActive(true)된 상태면 추가로 생성하지 않는다.맵 사방에서 랜덤한 위치에 생성된 Enemy가 로직대로 움직이지 않았다.플레이어를 끝까지
버튼을 누르면 Rocket 오브젝트가 위로 올라간다.버튼을 누를 때마다 연료를 소비한다.연료는 매 프레임마다 0.1씩 추가된다.매 프레임마다 0.1씩 증가한다고 했을 때, Update에서 0.1을 더해주면 되겠다고 너무 단순하게 생각했다. 하지만 기기의 성능마다 프레임
Enemy를 오브젝트 풀에서 가져다 쓰면서 Enemy 오브젝트의 활성화/비활성화(SetActive(true/false))가 반복되는 과정에서 여러 스크립트의 Awake, OnEnable, Start에서 작성한 코드가 매우 복잡하게 꼬이게 되는 것을 느꼈다. 그래서 오브
코루틴으로 Enemy를 생성하는 부분을 Update에서 하고 있는데, Start에서 코루틴을 한 번 실행시키고 코루틴이 반복되게 하면 Update를 사용하지 않을 수 있다. 또한 new WaitForSeconds를 매번 사용하지 말고 미리 선언해서 사용한다.
특정 클래스의 인스턴스가 애플리케이션 내에서 하나만 존재하도록 보장하는 패턴으로 해당 인스턴스에 대한 전역적인 접근을 제공한다. 유니티에서는 게임 생명주기 동안 단일 인스턴스로 존재해야 하는 중요 객체와 리소스를 관리하는 데 자주 활용된다.중앙 집중식 제어 : Game
게임의 배경을 둘러싸는 환경 매핑 기술6개의 텍스처로 구성된 큐브 맵 or 하나의 구체로 텍스처가 매핑된 구체형유니티 게임 씬의 배경으로 사용됨주로 하늘, 구름, 산 등 먼 자연 배경을 표현하는 데 사용스카이박스를 동적으로 변경하여 낮과 밤 등의 시간대나 상황에 맞는
과제를 하다보면 필요한 기능만 구현한 나머지 코드의 구조적인 부분이 많이 부족하다고 느꼈다. 그래서 이번 과제에서는 아래의 요소를 많이 생각하면서 리팩토링을 하려고 노력하고자 한다.단일 책임(Single responsibility)개방-폐쇄(Open-closed)리스코
클래스가 자체의 인스턴스 하나만을 인스턴스화하도록 보장해당하는 하나의 인스턴스에 대한 손쉬운 글로벌 액세스 제공싱글톤은 많은 종속성을 가려 훨씬 해결하기 어려운 버그를 유발싱글톤은 테스트를 어렵게 만든다. 유닛 테스트는 반드시 서로 독립적으로 수행해야 하는데 싱글톤은
우리 조는 마인크래프트 같은 생존게임을 만들기로 했다. 내 역할은 여러 종류의 적 AI를 구현하는 것이다. 적은 여러 야생동물들로 아래와 같이 구성했다.Aggressive Animals (선공하는 동물)멧돼지 Boar곰 Bear늑대 Wolf(추후에 무리(그룹)형 동물로
Creature의 상태를 갖고 상태의 전환을 담당하는 StateContext해당 상태에서의 행동을 담당.WanderState : 랜덤한 곳으로 이동하는 상태, 활동 영역 밖에 있을 경우 처음 스폰된 포지션으로 이동Aggressive, Passive, Nonattack
유니티에서는 내비게이션 메시를 자동으로 생성하여 게임 캐릭터가 갈 수 있는 곳, 없는 곳을 구분하고 최적의 경로를 탐색하여 움직일 수 있는 AI Navigation 시스템이 있다.게임 월드에서 걸을 수 있는 표면을 뜻한다. 이동 가능/불가능한 곳을 설정하고, 그 위에서
AggressiveAnimal.csPassiveAnimal.csNonattackAnimal.cs위의 상태 변경을 담당하는 클래스 3개는 Update문 내에서 if 문을 사용하여 상태 변경 조건들을 체크하여 상태를 변경하는 방식으로 작성했다.Update문 내에는 현재 상
발표 자료에는 코드를 너무 많이 넣지 않고 핵심 로직만 간단히 넣는다.개발한 결과물을 시연 영상 같이 시각적으로 보여줄 수 있는 것들을 발표하여 우리가 무엇을 만들었는지 확실히 보여주는 것이 좋다.다른 조의 발표 피드백에서 적-플레이어 사이의 거리를 측정하는 Vecto
요약디자인패턴은 결국 객체지향을 위한 여러 방법들이다. 객체지향을 제대로 다룰줄 모르면서 디자인패턴을 사용하는 것은 토대 없이 기둥만 쌓는 꼴이다.결국 코드를 작성하면서 어떻게 하면 객체지향적으로 설계할 수 있을지 스스로 생각해보면서 리팩토링을 하며 기초를 쌓는 과정이
화면에 오브젝트를 그리는 과정을 제어하는 시스템Shader: 작은 단위의 처리. 각각의 색상을 계산하기 위한 수학적 계산 및 알고리즘 포함Mesh : 개체의 모양 정의Texture : 비트 맵 이미지.Material : Texture에 대한 참조, 타일링 정보, 색상,
숙련 주차에서 적의 AI 패턴을 상태패턴을 이용하여 구현하였다. 적마다 패턴은 다르지만 각각의 상태에서 하는 행동은 동일했기 때문에 각각의 적마다 전환 조건만 설정해주었다.이번 강의에서는 플레이어와 적을 상태패턴을 이용하여 구현하였는데 각각의 상태의 Update에서 다
땅 오브젝트가 있고 그 위에 나무 오브젝트를 생성하는 경우,나무 오브젝트의 Sprite의 크기에 따라 매번 위치를 수정해 줘야했다.모든 나무 Sprite의 Pivot을 ButtomCenter로 설정하면 나무 오브젝트의 position을 건드리지 않고 정확히 위치시킬 수
화면 클릭 시 상단의 성장도 게이지가 채워진다.게이지가 모두 채워지면 다음 성장 단계의 나무로 바뀐다.AutoClick버튼을 누르면 지정한 시간 동안 자동클릭하여 클릭 했을 때와 같은 동작을 한다.AutoClick의 지속 시간이 끝나면 '충전중'으로 바뀌고 재사용 대기
라스트워 : 서바이벌, Arrow a Row와 비슷한 게임을 만들기로 결정아래의 이미지와 같은 스테이지 구현 목표캐릭터 수 증감, 플레이어 업그레이드 아이템, 장애물을 맡아 구현하기로 했다.공통된 부분일정한 속도로 아래로 이동같은 이동 스크립트를 적용총알에 맞으면 카운
위 코드의 OnPlayerHit()에서 충돌한 오브젝트를 Destroy(gameObject)를 통해 파괴했는데, 파괴되기 전에 OnTriggerEnter가 한 번 더 동작하여 한 번만 실행되어야 할 OnPlayerHit() 메서드가 두 번 실행되어 문제가 발생함유니티의
Player의 Clone 수를 증가시키는 아이템을 얻으면 증가할 수 만큼 새로 생성해주어야 한다.Clone을 생성 후 움직임을 여러 방법으로 구현해보았다.Clone을 행렬로 정해진 위치에 생성플레이어 주변에 원형으로 생성위의 두 방식은 수학적으로 위치를 정해 생성하는
Player의 현재 위치를 기준으로 주위에 랜덤하게 스폰하였는데, 여러 문제가 발생하였다.문제 1. 맵 바깥에 생성문제 2. 아이템, 장애물 오브젝트나 Enemy와 충돌되는 위치에 생성Player의 위치를 기준으로 스폰하지 않고, 맵에서 Player가 움직이는 공간의
Scriptable Object 데이터 캐싱해서 사용하기플레이어 스탯(데미지, 발사 속도)을 강화하는 아이템의 경우 Player의 SO 값을 직접 건드리고 스테이지가 바뀌면 초기화하는 방식으로 작성했다.다시 초기화해주는 과정 없이 SO의 값을 캐싱해서 내부에서 사용하는
기조 설정과 커뮤니케이션에서 나온다.기조: 프로젝트의 목표, 방향성설정한 기조는 쉽게 바뀌지 않아야 한다.목표를 과하게 잡지 않는다.실력 위주 or 긴 플레이 시간 or 운 또는 성장 위주 and 길지 않은 플레이 시간 둘 중에서 설정해보자.핵심 컨텐츠만 구현해도 훌륭
OnMouseUp() 화면에서 떨어졌을 때OnMouseDrag() 터치 + 이동할 때OnMouseDown() 터치 시이름은 Mouse지만 모바일에서도 인식IPointerDownHandler : OnPointerDown(PointerEventData eventData)
게임 플레이에 필요한 데이터들(캐릭터, 아이템, 몬스터 등의 데이터(ID, name, description, stat 등등))을 관리하는 데이터 베이스 없이 프로토 타입을 구현하면 결국 나중에 적용할 때 코드를 다시 수정해야 된다. 그래서 처음부터 Google Spre
유한한 개수의 상태(State)들로 구성된 기계동작 기반 시스템 : 상태와 상태 간의 전환을 기반으로 동작상태, 전환 조건, 동작으로 구성최초 상태로 시작, 입력이나 조건에 따라 상태를 전환전환 조건을 충족할 때 상태를 전환, 전환 조건은 입력, 시간, 조건 등으로 결
최적화 => 쉽게 말해 FPS를 높이고 Batches(Draw Call + SetPassCall)을 낮추는 것Draw Call : CPU가 GPU에 오브젝트를 그리는 명령을 호출하는 것모바일 게임의 경우 Batches가 100 ~ 200으로 맞추는 것이 적정박싱 / 언
공격 속도는 1초당 공격 횟수로 정의했다.float AttackSpeed = 1.5 => 1초에 1.5회 즉 2초에 3번 공격공격 속도가 빠르면 애니메이션(공격 모션)도 빠르게 해야 동작을 정확히 보여줄 수 있다.리그오브레전드의 공격 속도 시스템을 참고하면 좋다.1초에
원점(origin)에서 시작해서 지정된 방향(direction)으로 무한히 쏘아지는 line변수origin : ray의 원점(시작점)direction : ray의 방향생성자 (오버로딩)new Ray(origin, direction);Camera 클래스는 ScreenPo
캐릭터와 몬스터의 행동이나 기능들을 담은 프리팹에 모델링 부분을 분리필요한 모델링 데이터를 DataTable에서 가져와 행동, 기능 등을 담은 프리팹에 넣어준다.던전에 스폰시킬 몬스터가 고블린 워리어 / 아쳐 / 스피어맨으로 구분될 때, 각 몬스터는 아래의 이미지와 같
진행 상황 Monster의 기본이 되는 상태들은 구현을 완료했다. Idle, Wander, Chase, Attack, Dead 상태를 구현해서 기본적인 전투 싸이클은 진행될 수 있는 상태이다. Spawner에서 몬스터를 생성할 때, 어제 작성한 동적 생성 방식을 적용하
위의 코드와 같이 Animator의 Parameter에 대한 String, int 데이터를 AnimationData 클래스로 만들어 사용했다. 하지만 이 데이터들을 굳이 클래스로 나누어 만들 필요는 없었다. 플레이어와 몬스터 각각 필요한 곳에서 이 클래스의 내용을 작성
static 한정자에 대해 설명해주세요. > static 한정자는 필드 및 프로퍼티, 메서드, 클래스 등에 붙는 한정자이다. 필드 및 프로퍼티, 메서드 등 클래스의 멤버에 붙는 경우, 해당 클래스의 인스턴스가 아니라 클래스 자체에 속해 인스턴스를 생성하지 않고도 해당
콜백이란 무엇인가요? 콜백을 사용해본 경험이 있을까요?콜백이란 함수나 메서드를 기능만 구현하고 다른 함수나 메서드에 전달하여 호출을 맡기는 방법이다. 특정 이벤트나 조건이 충족되었을 때 매개변수로 전달받은 함수를 실행한다. 주로 비동기 작업이나 이벤트 처리에서 사용된다
몬스터나 플레이어의 기본 공격을 포함한 스킬은 공격 판정 오브젝트와 SkillData를 이용한다.SkillData에는 공격 판정 오브젝트의 생성 위치, 이동 속도, 데미지 계수, 멀티 공격 숫자 등이 있다.몬스터가 사용할 스킬들을 이 SkillData로 만들고 그 ID
얕은 복사와 깊은 복사의 차이점은 무엇인가요?얕은 복사의 경우, 객체의 복사본이 원본 객체가 참조하는 다른 객체의 참조만 복사한다. 따라서 원본 객체의 참조 멤버와 복사본의 참조 맴버는 동일한 메모리 주소를 공유하기 때문에 한 쪽에서 바뀌면 다른 쪽에서도 반영된다.깊은
클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요? > C#에서는 클래스 단일 상속만 가능하다. 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요. >
아이템 드랍 시 기존에 사용해왔던 확률 방식: Random.Range(0f, 1f)로 뽑은 숫자가 아이템의 드랍 확률(0~1)의 숫자와 비교하여 드랍 여부를 결정 - 각 아이템마다 실행가중치 랜덤 알고리즘: 드랍 아이템 리스트 중 가중치를 이용해 하나를 뽑는 방식드랍될
제네릭이란 무엇인가요?람다식(Lambda Expression)이 무엇인지 설명해주세요.LINQ란 무엇인가요?리플렉션(Reflection)이 뭔지, 사용을 해봤다면 어떤 이유에서 사용했는지 설명해주세요.
몬스터가 죽으면 죽는 애니메이션이 끝났을 때 몬스터가 드랍할 수 있는 아이템 리스트에서 가중치 랜덤 알고리즘을 이용하여 하나를 뽑아 해당 아이템을 생성한다.아이템은 플레이어와 일정 거리 이상 가까워지거나 던전의 한 룸이 클리어되었을 때 플레이어에게 날아간다.플레이어와
Unity의 직렬화 시스템: Unity는 게임 객체와 그 구성 요소를 직렬화하여 저장하고, 다시 로드한다. Unity는 public 필드나 SerializeField로 선언된 필드를 직렬화하여 저장하고 로드한다. 클래스에 System.Serializable 속성을 붙여
GPU에 특정 객체를 그리도록 요청하는 명령객체마다 메쉬, 머티리얼, 쉐이더 등의 설정이 필요성능에 미치는 영향Draw Call이 많아지면 CPU가 병목 상태에 빠짐CPU가 렌더링 명령을 처리하는 데 많은 시간을 소모GPU는 CPU에서 Draw Call 명령이 전달되기
Drop Item의 모델을 적용하지 않고 획득 시 UI에 어떤 아이템을 획득했는지 알 수 있게 아이템의 Icon과 이름을 표시되게 바꿨다. Image 1 기존 아이템 Drop 모습위의 Image 1에서 검 아이템은 3D 모델인 반면 하얀색(임시 이미지)의 포션(검을 제
원하는 모양으로 UI 이미지가 보여지게 하는 기능어제 아이템 획득 시 UI가 표시되게 했는데 짧은 시간에 여러 개의 아이템을 획득하면 UI 창이 위로 계속 늘어나 화면을 너무 가리게 됨그래서 딱 3개만 표시되게 Mask 기능을 사용 (사각형 이미지로 Mask Iamge
Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.유니티 생명주기는 MonoBehavior 클래스의 주요 메서드들의 호출로 이루어지는데, 이 메서드들은 정해진 순서에 따라 호출된다.MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해
던전은 룸 여러 개로 구성되어 있는데 한 룸에서 스폰된 몬스터는 다른 룸으로 넘어가지 못하게 NavMesh가 설정되어 있다. 하지만 몬스터가 플레이어를 SetDestination으로 추적하면 가지 못하는 경로이지만 계속 가려고 움직인다.추적 상태에서 플레이어를 추적할
수정 전 : Raycast에서 LayerMask를 설정하면 해당 Layer만 검출하고 나머지는 무시하기 때문에 Monster - Player - Obstacle(장애물) 순서로 있어도 몬스터가 플레이어를 인식하지 못함이렇게 코드를 작성했던 이유 : Raycast의 re
이번 주차는 유저테스트를 대비하여 오류, 버그를 수정하는데에 집중했다.오늘 해결한 버그는 장착중인 아이템 성능을 플레이어 스테이터스에 반영하는 부분에서 발생한 버그를 수정했다.보유중인 아이템을 관리하는 ItemManager에 보유중인 아이템 리스트와 장착 아이템에 대한
퀘스트 팝업 UI에서 퀘스트를 완료하고 보상을 받을 때, OnClosed 이벤트가 실행된다. Initialize 메서드에서 퀘스트 UI를 갱신하는 RefreshQuestUI 메서드를 이벤트에 등록하고, 퀘스트 UI가 비활성화될 때 해당 메서드를 해제한다.퀘스트 팝업 U
몬스터가 죽고 재화(골드)를 드랍하는데, 그 값을 랜덤하게 뽑으려고 한다. 이때, 작은 값이 뽑힐 확률이 더 높게 설정하고 싶어서 Random.Value의 값을 AnimationCurve를 이용해 가중치를 설정하여 작은 값이 더 잘 나오게 하였다.AnimationCur
LoadSceneAsync를 이용하여 비동기로 씬을 로딩Build Setting에 로딩 씬 추가 해줘야 됨asyncOperation.progress(0 ~ 1의 값)로 로딩 진행 정도를 체크할 수 있음
Image 1 로딩 화면 UI위의 로딩 화면 UI를 갖고 있는 Canvas에 MonoSingleton인 LoadSceneManager 스크립트를 붙여 Don'tDestroyOnLoad로 만든다.Scene이 전환될 때마다 해당 로딩 화면을 띄우고 다음 씬을 로드한다.다
빛 반사로 인해 아래의 Image 1과 같이 Terrain에 광원이 보이게 되는 현상이 있었다. Image 1 Terrain에 비친 광원위 현상을 해결하기 위해 Inspector창에서 Terrain - Terrain 설정 - BasicTerrain - Reflectio
안드로이드 빌드 후 플레이에서 몬스터 소환 시 프레임 드랍이 발생함기존 던전에서 몬스터 스폰 방식:던전마다 룸이 몇 개 있고, 룸마다 스포너를 갖고 있음\-룸에 들어갈 때 입구에 있는 Collider에 닿으면 룸 내의 모든 스포너에서 몬스터를 소환이때, 플레이 중에 몬
UI를 구성하는 여러 텍스처를 Sprite Atlas를 이용하여 하나의 텍스처로 결합하여 여러 UI의 DrawCall을 한 번의 DrawCall로 줄일 수 있다. Image 1 Sprite Atlas에 Packing된 Image위의 Image 1과 같이 Inspecto
Update와 Time.timeScale매 프레임 호출. 프레임 속도에 따라 다름Time.timeScale 값을 변경해도 Update 호출 빈도에는 영향 없음Time.deltaTime은 Time.timeScale에 따라 조정되기 때문에 Update에서 deltaTime
직사각형으로 표현되는 UI요소의 경계의 왼쪽 아래가 (0, 0), 오른쪽 위가 (1, 1)Anchors : UI 요소가 부모 RectTransform 내에서 어떤 위치에 고정될지 결정Min x, y / Max x, y를 조절하여 적절한 Anchor를 설정할 수 있다.A
README는 레포지토리를 방문한 사람에게 “이 프로젝트는 무엇인지” 를 알기 쉽게 전달해주는 중요한 역할을 한다. 처음 레포지토리 방문한 유저가 쉽게 알 수 있게 가독성을 생각하여 작성해야 한다.README는 프로젝트를 진행하며 차근차근 작성하는 것이 좋다.(개인적
UI 프리팹을 Resources에서 Load현재 UI를 동적으로 생성할 때, UI 프리팹을 Resources 폴더에 넣고 Resources.Load를 사용하여 UI를 로드하고 있다. 간단하게 구현할 수 있다는 장점이 있지만 Resources.Load는 자주 호출되면 성