-
RPG 듀토리얼 08. Monster(Enemy) AI & Attack
안녕하세요. 이번 글에서는 Enemy의 이동 & 공격 기능을 구현한 코드를 알아보겠습니다. 우선 간략하게 Enemy가 동작할 구현 목록부터 보겠습니다. 현재 제작할 Slime Duo는 선제 공격을 하는 Enemy가 아니기에 공격을 받기 전 까지는 필드를 자유롭게 돌아다닐것 입니다. 이후 Player에게 공격을 받게 된다면 Enemy는 Player를 추적하게 되며 공격 범위 안에 들어왔을 시 공격을 하게 됩니다. 또한 Enemy에게 최대 움직일 수 있는 Traceing이라는 최대 거리를 제한을 해 두어 player가 계속 멀어져 Enemy가 일정 범위 이상 갔을 시 전투를 종료하고 hp를 초기화하게 됩니다. 크게 보면 이동 / 공격 두 가지로 나누어집니다. Enemy의 동작 구현 코드는 Enemy_AI 스..
-
RPG 듀토리얼 07. Monster(Enemy) Target_Box
안녕하세요!! 오늘은 Monster를 만들어볼 예정입니다. 구현할 Monster를 Enemy로 칭하겠습니다. (Enemy가 손에 익었습니다..) 유니티 에셋 스토어에서 무료로 다운로드하였습니다. 우선 Enemy에 관련해서 구현할 목록부터 정리하겠습니다. // 1. Enemy를 클릭 시 타기팅 박스를 만드는 과정을 볼 것입니다. 2. Enemy의 상태 값에 따른 동작 구현을 볼 것입니다. 3. Player의 Skill 동작 구현을 볼 것입니다. (Player의 Skill에 따른 Enemy 동작 구현) // 흠.. 일단 머릿속에서 그려지는 게 아직은 이 정도입니다. 하나하나 설명을 이어 나가면서 추가될 부분은 추가하며 글을 작성하겠습니다. 이 타기팅 박스에 대해 간략히 설명하자면, Enemy를 터치 / 클릭..
-
RPG 듀토리얼 06. Item equip
안녕하세요 오늘은 아이템을 장착하며 아이템에 따른 능력치가 플레이어 스텟에 동기화되는 동작 구현을 보겠습니다. 우선 지난 시간에 아이템들이 드래그 & 드롭 되는 부분을 봤습니다. 그중 IPointerUpHandler : 버튼 / 클릭 떼는 순간 실행되는 이벤트에서 releaseTime을 검사해 0.2f초 이상 이면은 드래그 중 떼 진 것으로 간주 0.2f초 미만 이면은 클릭 상태로 2가지 동작을 if(조건문)으로 나눴습니다. releaseTime이 0.2f초 아래 일 시 실행되는 조건문입니다. (드래그가 아닌 클릭으로 간주합니다) 우선 코드를 보시기 전에 itemInfoFrame부터 보겠습니다. 아이템의 정보를 시각화해 줄 UI항목입니다. Text는 모두 TextMeshProUGUI로 작성했으며 이 아이..
-
RPG 듀토리얼 05. ITEM_in the Bag
안녕하세요. 오늘은 Bag 오브젝트 안에 Item 부분을 설명드릴 예정입니다. 다른 글들도 정리가 잘 되어있지 않은 편이지만.. 특히나 이 Item 부분은 더욱더 어디서부터 시작을 해야 할지 모르겠습니다. 우선 구현 목차를 간단하게 정리해 보겠습니다. (아이템이 가방 안에 있다는 가정 하입니다.) 1. Item 드래그 & 드롭 기능. 2. Item 장착 기능 3. Item 능력치 부여 4. Item 장착 시 (Player Stat += Item 능력치) 우선 아이템에 기능 구현은 이 정도가 끝인 것 같습니다. 이후 상점을 열어 아이템 구매 및 판매할 시 Bag 함수를 열어 Bag에 있는 아이템 부분과 상점의 상호작용 하는 부분에서 추가적으로 올리겠습니다. 우선 첫 번째로 Item의 드래그 기능부터 보겠습..
-
RPG 듀토리얼 04. RenderTexture & stat
안녕하세요! 이번엔 캐릭터를 클릭/터치 시 활성화되어 켜지는 Info창 과 Bag 창을 같이 보시겠습니다. 이번 장은 제가 생각했을땐 코드적인 설명보다는 UI항목에 대한 부분이 많을 것 같습니다. 코드적인 설명이 별로 없을 것 같아 그냥 넘어가자니 애매하고. 또 그렇다고 그냥 작성하자니 애매하고.. 우선 보시면 캐릭터 Info창에 Player의 화면도 보이고 Player의 Stat도 보입니다. Bag 창에는 아이템 칸도 보이고 골드 창도 보입니다. Info창과 Bag창을 개별적으로 나눈 이유는. Bag창은 나중에 상점을 이용할 때 재 활용하기 위해서입니다. 텍스트 들은 모두 TextMeshPro를 사용하였습니다. 우선 캐릭터 Info창부터 보겠습니다. Info창을 관리하기 위해서 Panel을 만들어 목록..
-
RPG 듀토리얼 03. Ray & CamController
오늘은 Ray를 생성하여 발사하는 로직을 구현할 예정입니다. 이 Ray의 사용처는 매우 다양하지만 이번 글에서는 player를 클릭해 Inventory / info 창이 열리게 설정할 것입니다. Ray 생성에 앞 서 먼저 카메라 회전을 담당할 스크립트 CamController부터 짧게 보고 가겠습니다. CamController 구현 목록은 간단합니다. GetMouseButton(1)로 마우스 왼쪽 버튼이 눌린 상태에서 마우스 움직임 방향대로 좌/우/상/하 회전을 하게 됩니다. 스크립트부터 바로 보시겠습니다. 선언 변수들부터 보겠습니다. camAxis_Central : MainCamera를 담고 있는 부모 오브젝트입니다 (플레이어의 위치 + y축 0.4f의 높이)에 붙어 있습니다. cam : player를..
-
RPG 듀토리얼 02. 플레이어 이동 구현
안녕하세요. 오늘은 player의 이동 구현을 살펴보겠습니다. player에게 필요한 구현들은 크게 4가지로 볼 수 있는데요 이동 / 공격 / 슬라이드 / 스킬로 볼 수 있습니다. 이동 / 공격 = 매 항시 작용 가능 슬라이드 / 스킬 = 쿨타임을 가진 스킬로 분류를 하겠습니다. 우선 초기 이동 컨셉부터 보겠습니다. 레이를 이용해 플레이어를 움직이는 모습입니다. 초기 콘셉트를 이렇게 쿼터뷰로 잡고 테스트를 해봤는데 제 역량 부족도 있겠지만, 제 가 만든 게임의 몰입감의 요소가 부족했습니다. 그리 하여 이동 구현을 솔 더뷰로 하게 뜸하여 직접 플레이를 하며 몰입감을 더 해주고 추 후 조이스틱을 추가하기로 했습니다. 이걸 어디서부터 설명을 해야지 순서대로 잘 갈 수 있을까 고민을 많이 했습니다. 몇 안 되는..
-
2D 슈팅게임 05. Enemy Hit 및 아이템 드롭
오늘은 날아다니는 Enemy 들을 맞췄을 시 발생하는 Hit 모션과 아이템이 드롭되는 부분을 구현하고 게임을 완성 시키려고 합니다. 전과 같은 방법으로 Sprite를 애니메이션으로 만들어주어 Hit 모션을 만들어 줬습니다. 애니메이션을 만드는 과정에서 Has Exit Time 부분을 종종 깜빡하는 경우가 생기는데 Has Exit Time 를 체크해두면 전 애니메이션의 동작이 완료된 후에 트랜지션대로 전이가 됩니다. 반대로 Has Exit Time 를 언체크 해두시면 즉시 전이가 되기에 깜빡하지 않는 습관을 들인다면, 시간을 절약시킬 수 있습니다. Enemy의 Animator 입니다. 평상시는 대기상태로 나는 모션을 취하다가, 히트가 됐을 시 Hit모션 재생 후 다시 BirdRed의 대기 상태로 돌아옵니다..
-
2D 슈팅게임 04. Enemy 제작
Enemy로 사용될 Bird Sprite 들은 유니티 에셋 스토어에서 무료로 다운로드하였습니다. 이 새(Enemy) 들은 맵의 좌/우 한 방향으로 이동을 하며 1. 총 3종류로 각 스피드가 다릅니다. 2. Atk(공격 물체)에 맞으면 드롭되는 아이템들도 다릅니다. 3. 종류 : 코인 / 똥 / 버프 로 크게 3가지를 구성 계획으로 잡았습니다. 이제부턴 Monster/새/ 등을 Enemy로 칭하겠습니다. Enemy에게 RigidBody2 D 컴포넌트를 추가시켰습니다. 중력을 받으면 안 되기에 RigidBody2 D 영역에 있는 Gravity Scale은 0으로 바꿔 주었습니다. 스크립트에 들어가기에 앞서 애니메이션을 Idle로 칭해 만들어 주겠습니다. Enemy의 스크립트입니다. birdSpeed_를 pu..
-
2D 슈팅게임 03. 점프 및 공격 모션
오늘은 Player의 점프 및 Attack 모션을 진행해 보겠습니다. 이동 구현과 마찬가지로 Rigidbody를 이용해서 점프를 시각적으로 보여줄 예정입니다. 백문 불여일견. 바로 진행하겠습니다. Jump 스크립트 입니다. Rigdbody는 rb란 변수로 선언해 담아 왔고 Animator는 ani란 변수로 선언해 담아왔습니다. jump를 하는데 필요한 jumpSpeed (점프 스피드)와 2단 이상의 중복 점프를 막기 위해 점프 중인지 체 크할 불 변수 isJump를 선언하였습니다. 점프 구현을 생각하니 초기 점프 구현 부분에 상당히 애먹었던 적이 있습니다. 다행히 CollisionFlags 변수의 Below 이용해 if(cc.collisionFlags == CollisionFlags.Below)의 조건으..
-
2D 슈팅게임 02. 캐릭터 이동구현
타이틀 씬에서 게임 화면 씬으로 넘어가는 것처럼 보이는 효과를 SetActive를 활용해 UI를 비활성화시켜주며 완성을 시켰습니다. 지난 받아온 Sprite들을 이용하여 Player와 Monster를 만들고 Player의 이동구현은 현재 모바일 환경이기에 조이스틱으로 캐릭터를 움직일 예정입니다. 유니티 에셋 스토어에서 받아온 무료 캐릭터의 Idle 이미지를 가져왔습니다. 이후 중력을 적용시켜줄 수 있는 Rigidbody 2D (3D x)와 Collider 2D (3D x)를 입혀 생명을 불어넣어 주었고 바닥과 양 벽을 빈 오브젝트에 콜라이더를 추가시켜주어 캐릭터가 떨어지거나, 필요 이상의 x축으로 나가는 것을 막았습니다. Collider에 대해 찾아보던 도 중, 알게 된 사실인데 Sphere Collid..
-
2D 슈팅게임 01. 게임 디자인 및 준비단계
먼저 작업에 앞서 01 챕터에서는 게임에 필요한 단순 준비 단계를 보여주기에 동작 구현을 보실 분들은 2D 슈팅게임 02.부터 봐주신다면 방문하여 주신 귀하의 바쁜 시간에 조금이나마 보탬이 될 것 같습니다. 개인 프로젝트인 작은 2D 슈팅게임을 만들어 본 적이 있습니다. 이번 기회에 제 것으로 만들기 위해서 개발 과정을 하나씩 캡처를 하며 빠르진 않더라도 과정을 보여드리려고 합니다. 배경과 플레이어에 따라 제목이 달라질 것 같아서 게임의 제목은 아직 정하지 못했습니다. 우선 제가 만들고자 하는 게임의 간단한 소개는 이러합니다. 1.Player는 좌 우 이동이 가능하며 점프가 가능합니다. 2.Player가 공격 버튼을 클릭하여 몬스터를 맞출 시, 몬스터는 공격 물, 코인, 버프 아이템을 랜덤으로 낙하합니다..