서론지금까지 FPS게임을 만들어본 적 없고, 평소에 오버워치를 즐겨하기 때문에 만들어봅니다.최대한 비슷하게 만들어보려 노력할 것입니다.일단 어느정도 만들어놨습니다.1. 프로젝트 세팅지금까지 프로젝트를 빌트인 렌더파이프라인으로 만들었습니다.오버워치는 FPS이면서 꽤나 고퀄 게임이기 때문에URP로 만들어줄겁니다.2. 캐릭터 세팅캐릭터는 일단 솔져를 대상으로 만들었고,아바타는 Mixamo 사이트에서 Y Bot 캐릭터를 받아왔습니다. 믹사모 사이트에 들어가서 로그인 또는 가입을 한 후1) 좌측 상단 Characters버튼 클릭 후 Y Bot이라는 캐릭터를 클릭해 적용시켜줍니다.2) 다시 좌측상단 Animations버튼 클릭 후 Pro Rifle Pack을 클릭3) 다운로드를 클릭합니다. 4) Format창을 클..
https://welcomeheesuk.tistory.com/67 [디자인패턴] 6. 유니티에서 옵저버패턴 오늘 유니티에서 적용해볼 패턴은 '옵저버 패턴'입니다. 옵저버 패턴의 정의는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이가고 자동으로 갱신되는 방식으로 일대다 welcomeheesuk.tistory.com 1. 옵저버 패턴? 옵저버 패턴에 대해 정리한 여러 사이트를 본 후 제가 이해한 옵저버 패턴은 객체끼리 연락(정보)을 주고 받으며 상호작용을 하는 디자인 패턴이라고 생각합니다. 옵저버 패턴에서는 주제(Subject)와 옵저버(Observer)가 느슨하게 결합되어 있는 구조이며, 한 객체의 정보가 바뀌면 연결된 다른 객체들에게 연결이 가서 정보가 갱신되는 일대다 의존성을 가진..
[참고 사이트] https://dhshin94.tistory.com/137 컴포넌트 패턴 (Component Pattern) 1. 컴포넌트 패턴 정의 서로 다른 기능은 나누어 작성하여 서로간 커플링 없이 다룰 수 있게 하는 것 => 로직을 기능별로 컴포넌트화 하는 것 2. 컴포넌트 패턴 사용 이유 using System.Collections; using S dhshin94.tistory.com 서론 유니티 디자인 패턴을 검색하면 컴포넌트 패턴이 다가가기 쉽다는 내용이 있었다. 그래서 이번엔 유니티 컴포넌트 패턴에 대해 공부해보았다. 컴포넌트 패턴 위 참고사이트를 통해서 컴포넌트 패턴이란 무엇이고, 왜 사용하는지 알게되었다. 유니티는 기본적으로 컴포넌트를 활용하는 시스템이다. 실제로 오브젝트의 인스펙터 창..
서론 유니티로 게임 프로젝트를 만들어보았는데 유니티에 대한 이해도가 다소 부족한 것 같아서 공부하게 되었습니다. 다음 영상은 유니티 싱글톤 설명 영상 중에 가장 이해가 잘 되었던 영상입니다. https://www.youtube.com/watch?v=a5TCCQgdv-E&t=11s 싱글톤이란? 싱글톤은 유니티 입문자들이 접근하기 쉽고, 게임 개발 시 많이 사용되는 디자인 패턴 중 하나입니다. 보통 게임을 만들다보면 전역 변수를 선언 후 인스펙터에서 드래그 앤 드랍으로 연결을 하게 된다. 하지만 게임이 복잡해질수록 전역 변수의 수도 늘어날 것이고, 그만큼 메모리도 많이 잡아먹게 된다. 이러한 문제를 해결하기 위해 싱글톤 패턴을 사용하는 것이 좋다. 싱글톤은 게임 내에서 공통적으로 관리하는 데이터를 모아놓은 ..
1. 캐릭터 애니메이션 유닛과 적군에 이동, 공격, 죽음 애니메이션을 적용시켜줬습니다. 적군은 공격 애니메이션이 따로 없어 T-Pose라는 애니메이션으로 대체하여 기능을 구현했습니다. 해당 모델의 애니메이션을 복사하여 커스텀한 후 적용시켜줬습니다. 유닛 프리팹에 애니메이션을 적용하였습니다. 기본적으로 스폰이 되면 바로 이동 애니메이션을 활성화시켜주고, 공격범위 리스트가 0보다 크면 Attack 애니메이션을 활성화, 아니라면 다시 이동 애니메이션을 활성화, 현재 체력이 0이 되면 Die 애니메이션을 활성화 시켜주도록 설정하였습니다. Attack과 Die는 bool형태로 가져왔습니다. Die 애니메이션을 실행하고 끝나면 해당 유닛이 디액티브되도록 설정했습니다. 2. 배경음 배경음은 유니티 에셋스토어에서 무료..
1. 유닛 추가 유닛이 검사밖에 없어서 탱커와 아처를 추가해줬습니다. 현재 쓰고 있는 모델이 검사밖에 지원하지 않아서 scale을 조정하여 외관을 조금 바꿔줬습니다. 적군은 한마리로 설정하였고, 보스만 따로 만들어줬습니다. 누가봐도 탱커입니다. 활이 없어요..ㅠㅠ 탱커와 아처 모두 기존 검사와 같이 이동, 공격기능을 담당하는 스크립트를 인스펙터에 넣어주고, 체력바도 설정해줬습니다. 2. 체력바 기능 체력바는 예전에 받았던 UI팩에서 슬라이더UI로 설정해줬습니다. 체력바를 빨간색, 검은색 하나씩 만들어주고, 빨간색이 앞으로 오게 Z값을 변경해줬습니다. 현재 적용한 Sprite는 원본을 훼손하지 않기 위해 복사본으로 만들어줬습니다. 공격을 받아 체력이 닳으면 오른쪽에서 왼쪽으로 체력바가 줄어들게 센터를 왼쪽..
유닛과 적군이 만나면 서로 공격하는 기능을 만들었고, 기존의 유닛과 적군의 이동 기능을 조금 수정했습니다. 유닛 공격 기능 유닛과 적군끼리 공격하는 기능을 만들기 위해 각각의 스크립트를 새로 만들어줬습니다. 공격 기능 함수를 만들기 전에 어떻게 하면 서로 공격할지 생각해봤습니다. 1. 유닛의 공격범위 안에 적군이 들어오면, 들어온 순서대로 공격을 해야되기 때문에 공격리스트를 만들어서 순서대로 넣어줄 겁니다. 2. 공격 리스트에 적군이 추가되었다는 것은 공격 범위 안에 적군이 들어왔다는 뜻이니까 움직임을 멈추고 공격하게 만들겁니다. 3. 공격할 때 미리 설정해놓은 적군의 Hp에서 유닛의 Damage를 공격속도에 따라 차감하도록 해줄겁니다. 4. 만약 적군의 Hp가 0보다 같거나 작아지면 해당 적군 오브젝트..
이번에는 게임창에서 유닛 버튼을 눌렀을 때 똑같은 지정 유닛이 필드에 늘어나게 하는 작업, 일정시간이 지나면 지정 적군 유닛이 계속 필드에 나오게 하는 작업, 유닛은 적군과 만나면 충돌하고, 유닛은 유닛끼리, 적군은 적군끼리 충돌하지 않는 작업 을 해주려고 합니다. 1. 유닛 복제 - Instantiate 우선, 하나의 스크립트로 할 수도 있지만, 유닛과 적군이 명확히 구분되어 있다는 점과 가독성의 편리를위해 UnitSpawner, EnemySpawner 스크립트를 각각 생성해주었습니다. 각각의 스크립트에 각각의 프리팹을 넣어줄 prfUnit과 prfEnemy 변수를 생성했습니다. 먼저, 유닛은 이전에 버튼을 누르면 유닛이 SetActive(true)되도록 만들었습니다. UnitSpawner 스크립트에서..
이번에도 영상녹화가 습관이 들지 않아 이미 만들어놓은 것을 캡쳐해서 올리도록 하겠습니다. 하하.. 1. 게임오브젝트 프리팹화 먼저, 유니티 하이라키에 만들어놓은 유닛과 적군 오브젝트를 프로젝트에 만들어놓은 프리팹 폴더에 넣어 프리팹화 해주겠습니다. 이러면 하이라키에서 유닛과 적군 오브젝트에 들어있던 컴포넌트들이 저장된 상태에서 프리팹으로 변환되게 됩니다. 2. 이동구현 먼저, MovementController라는 이동구현을 위한 새로운 스크립트를 생성해주었습니다. 그 다음은 변수를 생성해줍니다. -컴포넌트에 만들어놓은 Rigidbody를 담을 수 있는 myRigid 변수 생성 -이동을 담당한 Vector3의 값을 가지는 direction 변수 생성. -유닛의 이동속도를 담당할 float형태의 speed ..
List(리스트)란? 리스트는 c#에서 제공하는 동적 배열을 나타내는 데이터 구조입니다. 여기서 동적 배열이란 일반적으로 크기가 고정된 배열과 달리 크기를 자유롭게 조절할 수 있습니다. 예를들면, 끝이 정해지지 않은 무한열차...라고 생각하시면 될 것 같습니다. using System.Collection.Generic; 를 네임스페이스에 적어야 사용할 수 있습니다. 위에서 말했다시피 리스트의 가장 큰 장점은 배열과 달리 방의 개수를 정하지 않아도 된다는 것입니다. 배열은 방의 개수 또는 값을 할당해서 선언해줘야하는데, 리스트는 그러지 않아도 선언과 초기화가 되기 때문입니다. //int형 값을 가질 수 있는 비어있는 리스트 생성. List listInt = new List(); //해당 데이터 값을 리스트..