728x90
SMALL

프로젝트/언데드 서바이벌 프로젝트 21

프로젝트 QA(버그 수정, 리팩토링)

1. 맵의 재배치 수정 문제점 - 플레이어가 이동하는 방향(입력값)을 줄때마다 맵이 생성되기에 결과의 차이가 나거나 문제가 생길 수 있다. 수정 - 플레이어의 위치와 타일맵의 위치 즉 거리계산을 통해 타일맵을 배치하자 (-일 경우 좌측 배치, +일경우 우측 배치) 2. 적의 재배치 문제점 - 플레이어의 입력값을 통해 몬스터를 배치했다. 이젠 입력값의 방식을 쓰지 않기에 수정 수정 - 플레이어와 적의 위치값만을 사용해 계산 3. 무기 관통력 문제점 - 총알이 적과 충돌할때 관통할 수 있는 갯수가 -1 이되면 더이상 관통할 수 없도록 -1값으로 설정했는데, 간혹 per의 값이 -1이 되는 경우에 총알이 사라지지 않는다. 근접무기에서 무기 초기화 수정 1. 근접무기에서 관통값을 수정하자(-1 -> -100) ..

18장. 오디오 시스템(Audio Manager)

전체적인 배경음악, 효과음등을 한번에 관리할 오디오 매니저를 만들어서 관리하자. 오디오의 대표적인 종류 Audio Clip - 오디오 및 사운드의 에셋 파일 Audio Source - 에셋인 Audio Clip을 재생시켜주는 컴포넌트 Audio Listener - 장면에서 재생 중인 오디오를 듣는 컴포넌트 오디오 매니저 생성 및 초기화 BGM, SFX의 초기화 1. BGM, SFX 를 사용하기 위해 각각의 변수를 선언 후 2. 초기화 시켜주자. 실행 결과 오디오 매니저 값 세팅 오디오 소스 생성 BGM SFX 효과음 적용하기 사운드 관련된 것들은 오디오 매니저에서 관리하고 있기에 관련 리소스들을 다 추가해주자. 1. 열거형 Enum을 사용해서 많은 효과음을 데이터로 관리하자. (Enum에서 원하는 위치에..

17장. 캐릭터 해금 (UI/UX)

벼농부 , 보리농부는 기본캐릭터로 사용하고 2개의 캐릭터를 더 추가하여 해금 시스템을 만들자. UI 생성 잠금과 해금 시스템 캐릭터가 해금이 안됐을 때 Lock Image를 생성시켜주자. 스크립트를 통해 해금과 업적을 달성했는지 체크하자(Achive Manager.Cs) 1. 열거형으로 업적데이터를 생성해주자. 2. Awake에서 데이터를 사용할 수 있도록 데이터를 초기화 시켜주자. 3. InIt()함수에서 업적 데이터를 세팅하자. 4. 조건에 맞게 초기화 시켜주자. 5. 캐릭터 해금 함수 생성 후 Start에서 실행시키자. Enum.GetValues() - 주어진 열거형의 데이터를 모두 가져오는 함수 Playerprefs - 유니티에서 제공하는 간단한 저장 기능의 클래스 Enum 과 Playerpref..

16장. 플레이어 캐릭터 선택(UI/UX)

캐릭터 고르기 게임 시작시에 캐릭터를 고를 수 있도록 UI를 만들어주자. 스크립트를 통해 선택을 하자 게임 시작시에 캐릭터를 선택을 위해 GameStart()의 로직을 수정하자 매개변수로 설정한 int 값이 플레이어 Id로 지정되면서 설정한다. PlayerId 가 0일 때 남자, 1일 때 여자이기 때문에 그에 맞게 에니메이션도 변경해줘야 한다. Playe.Cs에서 수정 1. 여러개의 애니메이터 컨트롤러를 담을 변수를 선언 후 2. 생성한 애니메이터 컨트롤러를 담아주고 3. Player가 활성화 됐을 때 적용시켜주자 4. Event Click 연결 해주기 남자 캐릭터 여자 캐릭터 캐릭터 특징 적용하기 캐릭터마다 효과가 다를테니 그에맞게 적용시켜주자 Character 라는 스크립트를 하나 만들어서 관리하자...

15장. 게임 시작 종료(UI/UX)

완성적인 게임을 만들기 위해 시작부터 종료까지의 시스템을 추가해주자. 게임 시작 게임시작 버튼을 누르면 게임이 실행되도록 팝업을 만들어주자 게임 시작버튼을 누르면 해당 팝업이 사라지도록 버튼에 OnClick Event를 설정해주자 시작을 하기전에 HUD는 보이면 안되기때문에 먼저 비활성화를 해주고 OnClick Event에서 Hud 활/비활성화도 추가해주자. 게임 시작을 하면 게임이 흘러갈 수 있도록 설정해주자. GameManager.Cs 에서 GameStart() 라는 이벤트 함수를 만들어 똑같이 게임시작 버튼에 추가해주자. 실행 결과 플레이어 피격 플레이어가 적에게 죽었을 때 게임이 끝나야 하기 때문에 플레이어와 몬스터의 충돌을 처리하자. Player.Cs에서 충돌을 감지하는 함수를 만들어주자. 실행..

14장. 레벨업 시스템

우선 레벨업을 할 시 레벨업을 누를 수 있는 팝업을 만들어주자 만든 UI에 알맞은 텍스트 넣어주기(아이템 이름, 아이템 설명 등...) 생성한 스크립터블 오브젝트에 설명을 추가해주자. 근접무기 원거리무기 스크립터블 오브젝트에 저장되어 있는 데이터(이름, 설명)를 텍스트에 넣어주자. ItemLevelUp.Cs에 (Desc, Name) 텍스트를 추가하고, 초기화 해주자. 오브젝트가 활성화 됐을 때 텍스트 값을 넣어주면 되기에 ItemType에 따라 각각에 맞는 설명을 넣어주자. 상황에 맞는 레벨업 창 표시(컨트롤) 레벨업을 할 경우에만 레벨업 UI가 생성되어야 하기 때문에 관리해줄 스크립트를 하나 생성하자 팝업 활/비활 하는 함수 생성 만든 함수를 조건에 맞게 적용해주자. 1. 레벨업 팝업을 보여줘야 할 때..

13장. 무기 장착

무기 레벨업을 했을 때 손(각 무기 이미지)를 생성시켜주자 우선 플레이어 자식오브젝트로 왼손 오른손을 만들어서 무기를 장착할 수 있게 하자 캐릭터의 방향에 따라 무기의 방향도 바꿔주자 Hand.Cs 를 생성해서 그안에서 처리해주자 1. Player의 좌,우를 확인하기 Player Sprtie Renderer를 통해 체크 2. isReverse라는 Bool 변수를 통해 상태를 체크 후 3. 그에 맞게 처리해주자. 왼손 오른손 실행 결과 위치 설정을 했으니 이젠 무기 업그레이드 시에만 무기에 맞게 무기를 생성 시켜주자. 그러기 위해 데이터 연동 및 데이터 추가를 하자. 무기가 생성될 때 그리고 무기의 데이터들은 itemData.Cs에 처리한다. 이 곳에서 무기가 생성될 때 무기를 잡고있는 손도 같이 생성시켜..

12장. 능력치 업그레이드(스크립터블 오브젝트)

12.1 아이템 데이터 만들기 레벨업이 돼서 능력치가 오를경우, 또는 무기가 바뀔경우 일일히 무기의 데이터들을 수동으로 설정해줄 수 없기에 원본인 데이터 파일 스크립터블 오브젝트를 사용하여 체계적으로 관리해보자 스크립터블 오브젝트 - 다양한 데이터를 저장하는 에셋 우선 아이템 데이터 생성을 담당할 스크립트를 생성하자. 이후 스크립터블 오브젝트를 담을 폴더를 생성시켜주자. Data 폴더 생성 후 -> 폴더 안에 Scriptable object 생성 CreateAssetMenu? - 특정 스크립트에서 새로운 에셋을 생성할 수 있는 메뉴 옵션을 제공해준다. 이를 통해 사용자가 유니티 에디터의 메뉴를 통해 쉽게 새로운 인스턴스를 만들 수 있게 된다. 만든 스크립터블 오브젝트에 데이터의 값을 기입해주자. Ex) ..

11장. UI/UX

11.1 UI 즉 보여지는것을 배치하기 위해선 UI Canvas가 필요하다. 플레이하는 유저에게 보여줄 경험치바, 레벨, 킬수 등을 보여주자 (UI에 관해선 카테고리 UI에서 설명) Canvas - Render Mode에 관하여... https://docs.unity3d.com/kr/530/Manual/UICanvas.html 캔버스 - Unity 매뉴얼 모든 UI 요소는 Canvas 안에 위치해야 합니다. 캔버스는 Canvas 컴포넌트가 있는 게임 오브젝트이며 모든 UI 요소는 반드시 어떤 캔버스의 자식이어야 합니다. docs.unity3d.com Canvse Scaler 에 관하여.. https://docs.unity3d.com/kr/2021.3/Manual/script-CanvasScaler.htm..

10장. 몬스터 처치

10.1 피격 리액션 몬스터의 피격 애니메이션과 넉백등 효과를 주기 위해 Animation 과 Enemy 스크립트에서 수정을 하자. Enemy.Cs 작성 위와같이 코드 작성을하면 적의 피격 애니메이션은 작동하지만 넉백이 작용하지 않는다. 그 이유는 FixedUpdate() 에서 적이 플레이어를 향해 계속 이동하기 때문이다. 넉백이 되기 위해 조건을 추가해주자. 조건 수정 전 조건 수정 후 Coroutine 이란? - 간단하게 설명하면 비동기로 실행되는 함수이다. 특정 함수나 특정 코드를 반복적으로 실행하거나 필요할 때만 호출해서 사용할 수 있다. 반복적으로 실행하기 위해서는 Update문이나 For문을 통해 실행시키지만 코루틴을 사용하면 필요한 순간에만 사용하고 필요하지 않으면 사용하지 않음으로 프레임 ..

728x90