-
RPG 듀토리얼 01. 에셋 준비물 (in Game 동영상)
안녕하세요. RPG 포트폴리오를 만들어 볼 겸 스스로 학습을 토대로 제작해보자 해서 만들게 된 rpg 튜토리얼 프로젝트입니다. 02 : 20초 아직 미완성 프로젝트이지만, 제작 과정과 함께 동작을 파트별로 나눠 개발 일지로 글에 담으며 지속적인 수정을 해줄 프로젝트 입니다. 현재까지 진행된 과정은 3 - 4주 정도 소요가 되었으며 다른 작업 중 수정되는 요소들도 있고 현재도 계속 수정 중이기에 정확히 가늠하기가 어렵습니다. 먼저 이 rpg 튜토리얼의 구성은 이러합니다. 1. Player, NPC(마을 주민, 장로, 상점, 교관, 부상당한 NPC), monster1,2, Boss 플레이어 이외의 8명의 상호작용을 할 오브젝트들이 필요합니다. 플레이어 - 이동 / 스킬 / 대시 구현으로 시작해서 구현할 Li..
-
RPG 듀토리얼 17. BOSS!!! 02 / 02 (Return & Die)
안녕하세요!! 오늘은 Boss의 Rturn 부분과 함께 대미지를 입어 Die 상태를 살펴보겠습니다. 사실 요즘 코딩 테스트를 하는 데 있어 저의 부족함을 깨닫고.. (절실히) 1일 1문제 (프로그래머스)를 실천해 보려고 했었습니다.. 만 Level 1 문제도 상당히 오랜 시간이 걸리며,, 저의 부족함을 절실히 깨닫고 알고리즘 공부에 힘을 싣고 있습니다... 해야 하는 것도 많고 준비해야 하는것도 너무 많은 것 같아 처음에는 상당히 불안했었는데요. 너무 복잡하게 생각하지 않고, 현재 할 수 있는 것부터 하나씩 하나씩 나아가기로 했습니다. 목표가 있다는 것이 즐거움 아니겠습니까? 허허!! (내일의 저는 오늘의 저보다 성장해 있습니다.) 자. 우선 그건 그거고 이건 이거니깐! 우선 구현한 Boss의 스크립트부..
-
RPG 듀토리얼 17. BOSS!!! 01 / 02 (Attack)
안녕하세요!!! 오늘은 튜토리얼의 클리어가 되는 조건인 소탕할 Boss에 대해서 작업을 하겠습니다! 이렇게 생긴 녀석인데 유니티 에셋 스토어에서 무료로 가져온 에셋입니다. (상당히 많은 에셋들이 듀토리얼의 Boss로 거쳐갔습니다...) 이 보스의 위치는 이 병사가? 알려주었었죠 ㅎㅎ 바로 스크립트로 넘어가 보겠습니다. 보스를 제어하기 위해 EnemyBoss 스크립트를 만들었고 열거형으로 boss의 상태 값을 선언해 주었습니다. enum은 상수의 일종으로 const대신 사용하며 const값을 입력하지 않아도 자동으로 0,1,2.... 의 값이 대입됩니다. (코드가 단순해지며 가독성이 좋고, 상수 이므로 if문 swith문에서 사용이 가능합니다.) Idle : 대기 Mve : 움직임 Attack : 공격 R..
-
RPG 듀토리얼 16. Store buy and sell
안녕하세요!! 날씨가 따뜻해지다가 다시 추워지다가.. 오락가락합니다. 다들 감기 조심하셔야 할 듯합니다 ㅜㅜ (겉옷 꼭 챙겨 다니세요!) 오늘은 상점 팝업 기능까지 마쳤으니 상점에 있는 아이템을 구매 및 판매하는 부분을 작업할 예정입니다. 상점에 있는 물건들(npc가 갖고 있는 물건)과 npc를 클릭하면 store창과 bag창이 팝업이 됩니다. (닫기 버튼은 panel에 eventTrigger에 Pointer Down 을 사용하여 비활성화 되게 해 줬었습니다.) 아이템 정보 창이 활성화될 시에는 두 가지 조건이 있었습니다. 1. Bag 안에 있는 아이템일 때 클릭을 할 시 2. Store 안에 있는 아이템을 터치/클릭할 시 Item_Action 스크립트에서 가방에 있는지 체크할 inBag 불 변수와 상점..
-
RPG 듀토리얼 15. Npc Store OpenStore
안녕하세요. 이번 글에서는 상점 npc에 대해 다룰 예정입니다. 구현 동작 목록을 보자면 1. 상점 NPC를 클릭하면 상점이 열리게 됩니다. 2. 상점에 있는 아이템을 구매 및 판매를 할 수 있습니다. 2가지로 크게 볼 수 있을 것 같습니다. Store프레임과 Bag프레임입니다. (그림적 감각은 타고나야 한다고 하던데,, 살짝 감각이 있는 것 같기도 하고..) 네 STORE프레임은 간단한 이미지로 만들었으며 각 슬롯과 슬롯의 자식으로 텍스트를 붙여주었습니다. NPC들의 퀘스트 창과 똑같이 Panel을 만들어 Panel을 터치/클릭 시 비활성화를 되게 만들었으며 경계 선을 지점으로 위쪽은 StoreFrame이 비활성화되며 상점 npc를 터치 / 클릭 시 StoreFrame과 BagFrame이 같이 켜지게 ..
-
RPG 듀토리얼 14. Object Pool & item Gold
안녕하세요. 원래 상점 NPC를 작업하려고 했는데 ObjectPool을 적용한 코드 작업을 보려고 합니다. Enemy를 죽이면 50%의 확률로 골드 아이템이 생성됐었는데요. 새로 생성하는 것보다, 오브젝트 풀 방식으로 관리하는 게 훨씬 효율적이니 간단하지만, 효과적인.. 처음엔 잘 모르지만 점점 효과가 누적되면 태산이 되는 바로 저 같은.. 네. 바로 코드로 들어가겠습니다. 우선.. 작업한 부분을 어디서부터 봐야 할지 찾아보다가 gold 아이템 구현 부분을 설명 안 드린 것 같아 Enemy가 죽으면 떨어트릴 Gold Item 작업 부분부터 먼저 보면서 천천히 나가겠습니다. gold에 입혀질 Item_Gold스크립트의 전체 스크립트입니다. gold_Text : 얻는 골드를 시각화해줄 text입니다. (Te..
-
RPG 듀토리얼 13. player & NPC 상호작용
안녕하세요. 오늘은 player와 npc의 상호 작용하는 부분을 올리려고 합니다. 마을에는 각 npc들이 존재하며. 현재 배치할 npc오브젝트의 구현 목록은 마을 주민 / 장로 / 상점 / 교관 / 부상당한 병사 로 총 4명의 npc를 구성할 것입니다. 현재 예상으로는 상점을 제외한 나머지 npc의 동작 구현 목록을 보며 상점의 팝업 기능과 구매/판매 기능을 따로 작성하지 않을까 싶습니다. 이 프로젝트는 단순 튜토리얼을 구현한 것이기에 따로 플레이어의 육성은 없지만, 보스를 소탕하기 전까지의 퀘스트를 NPC인 교관에게 받으며 안내를 받고 있습니다. 또한 NPC와 대화를 하거나 일반 몬스터를 잡을 때 경험치를 주며 퀘스트를 클리어할 때에도 경험치를 받을 수 있습니다. 각 렙에 맞게 스킬의 잠금이 해제됩니다..
-
RPG 듀토리얼 12. Player Skill (Skill 01 - 03)
안녕하세요. 지난 글에는 skill00 인 파이어 볼 스킬에 대해 알아봤었죠. 원래 스킬 전부를 보려고 했는데 설명하다 보니 이어지는 동작 체계들이 많아서. Skill00번과 CalulateDmg(대미지 계산 기능)을 봤었습니다. 지난 글에서 설명드린 부분을 제외하고 오늘은 나머지 스킬 01 - 03번까지 보려고 합니다. 자 그럼 가장 기본 스킬인 Skill 00을 제외하고 01번부터 03번 까지 빠르게 보겠습니다. SkillFire01 스크립트입니다. 01번과 비슷하며 간략하게 설명한 후 넘어가겠습니다. targetNot : 타깃이 지정 안 됐을 시 공격할 target입니다. target : 타깃이 지정됐을 시 공격할 target입니다. speed : skill01의 스피드입니다. hitEffect :..
-
RPG 듀토리얼 11. Player Skill (Skill 00 & Calulate)
안녕하세요!!! 오늘은 각 공격 스킬에 대해 알아보려고 합니다. 각 공격 스킬에는 1. 파이어 볼 : 가장 기본적인 스킬 입니다. 2. 애로우 샷 : 관통을 하는 스킬입니다. 3. 블랙홀 : 범위 내에 적을 기절시킵니다. 4. 힐 : 체력을 최대 20% 올려줍니다. 4가지의 이름을 지어 봤습니다 ㅎㅎ 1, 2, 3번 같은 경우에는 총 세 가지 이펙트가 존재합니다. 1) 캐스팅을 시전 할 때 2) 스킬 발사를 할 때 3) 스킬을 맞았을 때 4번은 자체적인 힐 스킬로 1) 스킬 발사를 할 때 만 있습니다. 쿨타임은 길지만 캐스팅 시간은 짧게 구현하여 즉시 발동되게 해 봤습니다. 각 스킬 이펙트는 제가 Particle System을 이용해서 만든 파이어볼과 파이어볼 히트 이펙트를 제외하곤 만들어져 있는 에셋을..
-
RPG 듀토리얼 10. Player Skill (Casting)
안녕하세요!! 지난 시간에 UI의 버튼을 누르면 지정된 시간에 맞게 쿨타임이 생기며 시각적인 효과를 버튼의 Fill Amount로 봤었는데요. 오늘은 각 스킬 사용 시 캐스팅과 동작 구현을 볼 것입니다. 지난 시간에 SkillBtn 스크립트에서 Casting() 함수를 실행시키는 코드를 봤었습니다. 이 Casting 함수는 PlayerController에 구현을 했는데요. Casting 함수를 구현하는데 필요한 target이나 각 변수들의 편리함도 있었지만 이 스킬은 스킬 버튼이 아닌 player가 사용을 하는 것 이기에 관리적인 측면에서 PlayerController에 담았습니다. 우선 캐스팅 함수를 실행하기 위해 선언 변수들부터 보겠습니다. onCasting : 캐스팅 중인지 확인할 불 변수입니다. ..
-
RPG 듀토리얼 09. Player Skill (CoolTime )
안녕하세요. 오늘은 Player의 스킬 중에서 CoolTime을 먼저 보겠습니다. 공격 스킬 구성은 총 4가지가 존재하며 1. 파이어볼 가장 기본 스킬로 불이 나가며 공격을 합니다. 2. 애로우 샷 기를 모아 화살이 나가며 관통이 됩니다. 3. 블랙홀 적 들을 기절 시킵니다. 4. 힐 에너지를 채워 줍니다 기본 공격 / 슬라이딩 두 가지가 존재합니다. 각 이미지는 두 개를 겹쳐 놓은 뒤 앞에 있는 Image의 Type을 Fillde의 radial 360으로 주어 쿨타임이 시각화를 더 해 주었습니다. 이렇게 만들어 준 이유는 바로 쿨타임을 적용하기 위해서 입니다. 이 이미지가 Fill Amount를 이용해 쿨타임이 적용된 것처럼 시각적인 효과를 보이는 코드를 보겠습니다. 스킬의 기본 정보를 새로운 스크립트..
-
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가지로 볼 수 있는데요 이동 / 공격 / 슬라이드 / 스킬로 볼 수 있습니다. 이동 / 공격 = 매 항시 작용 가능 슬라이드 / 스킬 = 쿨타임을 가진 스킬로 분류를 하겠습니다. 우선 초기 이동 컨셉부터 보겠습니다. 레이를 이용해 플레이어를 움직이는 모습입니다. 초기 콘셉트를 이렇게 쿼터뷰로 잡고 테스트를 해봤는데 제 역량 부족도 있겠지만, 제 가 만든 게임의 몰입감의 요소가 부족했습니다. 그리 하여 이동 구현을 솔 더뷰로 하게 뜸하여 직접 플레이를 하며 몰입감을 더 해주고 추 후 조이스틱을 추가하기로 했습니다. 이걸 어디서부터 설명을 해야지 순서대로 잘 갈 수 있을까 고민을 많이 했습니다. 몇 안 되는..