스킬사용이 가능해진 상태에서 스킬키를 입력받으면 초록색 원형 이미지를 보여준다.

그리고 레이캐스트로 y을 고정하고 x와z값으로 마우스 위치를 받아 움직여주도록 했다.

 

 

사용은 마우스 왼쪽클릭을 한번더 하면 발동하도록 처리했다.

 

 

함수호출순서로는

 

1.업데이트에서 입력키 받음

2.등록된 스킬인지 확인,해당 스킬 mp가 현재 mp보다 작은지

스킬 State =true,기본 공격State = false,

3.이펙트 풀에서 스킬오브젝트 가져옴

4.사정거리 표시(하얀 테두리),  초록색테두리 위치 업데이트(Ray캐스트) / 테이블에서 데이터 가져옴

 

마우스 클릭

발동

6. 테두리들 오브젝트 크기 원위치,및 오브젝트 비활성화

7. 초록색테두리(마우스 위치)로 이펙트 게임오브젝트 상태 true

8. 스킬오브젝트 주위기준으로 가까운 거리에 있는 몬스터들에게 데미지 처리 -> 플로팅텍스트 등등

9. 플레이어 mp감소,MP UI업데이트 

10. 스킬슬롯 UI쿨타임 시작,(해당 스킬 State =false 쿨타임이 끝날때 까지)

 

발동 후

11.기본공격 State = true, 스킬공격 State = false

12.이팩트 오브젝트 비활성화

13. 쿨타임 다되면 현재 mp값과 스킬가능상태 or 불가능상태 체크

14. 스킬슬롯 UI 업데이트 

 

 

 

 

 

반응형

펙스오브엑자일 처럼 무기의 잼을 장착할 수 있도록 하고싶었다. 잼을 장착한 무기는 특정할 스킬을 쓸 수 있도록

대장장이 NPC를 만들고 거기에 무기와 잼을 끌어다 놓으면 잼 장착이 가능하도록 했다.

 

잼 장착

잼이 장착되면 아이템슬롯에서 어떤잼이 장착되었는지 볼 수 있고

잼의 맞는 이팩트가 추가된다.

 

그리고 잼스킬이 활성화 된다.

 

잼 장착 해제

잼이 장착된 무기를 끌어다 놓으면 장착된 잼이 잼칸에 보여진다. 그리고 해제가 되면 인벤토리 비어있는 공간으로 다시 돌아간다.

 

 

아이템 고유ID 부여

인벤토리에 들어온 아이템은 고유ID를 갖기때문에 잼이 장착된 잼과 그렇지 않은 잼 구별이 가능하도록 했다.

 

 

 

 

반응형

 

캐릭터 선택

 

선택하는 직업의 캐릭터의 림 라이트를 적용해서 어떤 캐릭터가 선택되었는지 표현하도록 했다.

잘 안보이는 것 같기도..

 

몬스터 피격

몬스터 피격도 어떤 몬스터가 피격당했는지 표현되도록 했다.

 

여러 몬스터들을 피격한 경우

 

 

 

몬스터는 몸통전체가 같은 메테리얼로 적용되어있어서 몸통 Renderer로 한 부분만 알고 있으면 되지만 히어로 캐릭터 같은 경우는 머리, 몸통, 팔다리가 모두 분리되어있다. 아마도 부위마다 변경이 가능한 리소스라 나뉘어있는 듯하다.

 

모든 몬스터들은 같은 메테리얼을 쓰기때문에 메테리얼을 바꾸면 피격당하지 않은 몬스터들도 림 라이트 효과가 들어간다.

 

피격당한 몬스터의 메테리얼만 바꾸도록 MaterialPropertyBlock를 사용했다. 

 

(MaterialPropertyBlock의 대한 내용은 따로 정리 해야겠다.)

 

 

 

반응형

 

 

우선 PPT로 행동트리를 그려봤다. 

공격패턴은 근접2개 그리고 원거리 이펙트공격,점프공격이있다.

 

BT대로 구현한 내용을 Gif로 보면

 

근접공격 사거리(true)-> 근접공격

 

원거리 공격 사거리(true)-> RandomAction -> 점프공격 (확률45%)

 

원거리 공격 사거리(true)-> RandomAction -> 플레이어 추적 (확률45%)

원거리 공격 사거리(true)-> RandomAction -> 원거리 공격 (확률10%)

 

위험 체력 체크(true)-> 스켈레톤소환 -> 체력회복

 

 

반응형

몬스터로밍 범위를 테이블 값으로 불러왔었는데 이게 확장성도 낮고 낭떠러지, 등등 불규칙적인 맵에 적용하기가 힘들다.

그래서 인스펙터창에서 로밍 범위를 정하도록 바꾸었다.

 

 

 

기즈모를 이용하여 몬스터가 어디로 로밍범위를 보여주도록 했다.

 

 

반응형

 

스킬북UI

UI 구성은 왼쪽은 일반 스킬, 오른쪽은 잼스 킬로 무기의 잼을 장착할 수 가있는데 잼이 장착된 무기로 가능한 스킬이 생기게 된다.

 

잼 장착은 대장장이 NPC를 통해 만들 예정

 

스킬등록

선택팝업창UI는 재사용.

스킬을 등록하기 위해서는 두가지 조건이 있다. 스킬등록 포인트가 있어야하고 이전 스킬 등록 여부

 

 

 

스킬등록이되면 실제 입력키를 받는 딕셔너리에 추가하도록 했다.

스킬등록 취소

스킬등록을 해제하면 담겨있던 딕셔너리에서도 제거하도록 했다. 실제로 입력키를 받지 않도록 하기 위해서이다.

이게 좋을까 아니면 딕셔너리는 그대로 둔 채 그 입력키를 무효화시키는 코드를 추가하는 게 좋을지

 

 

스킬사용

밑에 있는 스킬슬롯에 표시되어 있는 숫자1~8, 그리고 F1~F4까지 입력키로 스킬을 사용한다.

 

스킬 사용가능 조건 :

1. WeaponState가 0(맨주먹)이면 스킬 사용 불가능

2. 재사용시간이 경과되지 않으면 사용 불가능

3. Mp가 부족하면 불가능

 

 

1
2

 

3
스킬마다 소모MP가 다르기 때문에 사용 가능한 스킬만 활성화 되어있다.

반응형

일단 몬스터들은 마을맵에 몬스터 5종류?(고블린, 샤먼 고블린(원거리), 오크, 성난 돼지)

 

그리고 던전 씬의 2~3(보스 포함) 종류 정도 될 것 같다. 마을 씬에 입장하면 몬스터가 동적으로 생성된다. 그러 몬스터들은 각각 자기의 BT에 맞게 움직인다.

 

공격 판정

플레이어는 공격할 때 자기 공격 가능 범위(무기마다 다름)를 체크하고 그중에서 가장 가까운 몬스터들을 찾는다. (콜라이더를 사용하지 않음) 원래는 논타깃으로 플레이어가 정확히 몬스터가 있는 방향에서 공격을 해야 대미지 처리를 했지만 맞추기가 어려워 가장 가까운 몬스터가 있는 방향으로 회전하도록 했다.  

 

 

공격

공격은 기본 공격(히어로 공격력 + 무기 데미지)과 크리티컬 대미지 두 가지로 대미지를 입힐 수 있다. 크리티컬 확률은 플레이어 스텟인 크리티컬 확률로 나오도록 했다. 

 

 

UI처리

UI는 공격하고 있는 몬스터의 이름, 방어력, 체력을 뜨는  UI가 있고, 데미지 값을 보여주는 플로팅 텍스트가 있다.

플로팅 텍스트는 애니메이션 효과와 크리티컬 대미지인 경우 좌우로 흔들리는 효과는 트윈으로 처리했다.

플로팅텍스트 애니메이션

애니메이션 : 스케일 -> Y값 조절 -> 잠시 멈춤 -> 알파 값 조절

 

 

 

 

반응형

몬스터 종류는 아직 생각한 건 몇 가지 없지만 일단 가장 기본적인 근접 공격 몬스터를 만들 계획이었다.

 

몬스터들의 애니메이션은 믹스 아모(https://www.mixamo.com/#/)에서 구했다. 참 좋은 사이트이다.

 

보스 몬스터가 아닌 기본 몬스터는 플레이어보다 매우 단순하다. Idle, Walk, Run, Die, Attack 이 정도?

 

그러고 이제 이 몬스터들은 상황에 맞게 움직이기 위해 BT를 적용했다.

 

몬스터 종류의 따라 다르지만 처음 제작한 고블린은 BT는 이렇게 구성했다.

 

먼저 죽었는지 판단하고, 그렇지 않으면 다음 행동 조건을 체크하면서 해당하는 해동을 실행하도록 했다.

그 체크 조건들은 1) 공격 사거리인가? 2) 발견 거리인가? 3) 플레이어가 살아있나?

 

 

 

사실 조금 헤맸던 게 Sequence순서의 따라 동작이 의도했던 대로 안될 수가 있었기 때문에 시간이 걸렸던 것 같다. 

 

예를 들어 Sequence4와 Sequence순서가 바뀌었다고 가정하고 행동을 예상해보면 몬스터는 발견 거리가 되면 플레이어에게 달려간다. 그러고 원래라면 공격 거리가 되면 공격을 해야 하는데 계속 달려만 갈 것이다. 

 

공격 거리는 발견 거리보다 당연히 작을 수밖에 없기 때문에 Sequence6만 계속 실행될 것이다.

(물론 다른 BT함수를 만들거나 변형하면 될 수도 있지만 나는 생각이 안 났다.) 

 

 

로밍 (Squecne6)
추적 Squecne4,Squecne5
공격->추적->로밍

 

반응형

일단 퀘스트는 총 4가지 상태로 나뉜다. 

1) 받기 전

2) 받은 후

3) 완료

4) 현재 퀘스트와 관련 없는 상태

 

1) 받기 전 (퀘스트 수락)

캐릭터를 새로 생성하고 마을 씬에 들어오면 첫 번째로 퀘스트가 주어진다. 

오른쪽에 알림창같은 팝업으로 퀘스트 이름, 퀘스트 설명, 달성 현황이 표시되도록 했다.

NPC에게 받음

 

퀘스트 상태에 따라 대화 상자의 버튼과 NPC머리위 아이콘이 달라진다.

 

퀘스트를 받은후

 

퀘스트 받기 전  /  퀘스트 완료 후 

아이콘

받기 전&관련 없는 상태는 대화 상자 아이콘

받은 후는 물음표 아이콘,

퀘스트 완료상태인데 보상받기 전은 느낌표 아이콘을 보여주도록 한다.

 

받기전
받은 후

 

완료 후


2) 받은 후 (퀘스트 진행상태 로그 창)

퀘스트 로그 창을 단축기를 통해 열면 현재 받은 퀘스트 목록들을 볼 수 있다. 보상 아이템과 보상 골드, 보상 경험치 등을 확인할 수 있다.

4) 완료 (퀘스트 달성)

퀘스조건을 만족하면 퀘스트알림창과 퀘스트 로그창에 완료표시가 보여진다.

 

 

반응형

 

인벤토리 아이템 정보창

 

인벤토리에서 어떤 아이템인지 표시해주고 그 아이템의 대한 설명이 필요하다.

당연하지만 모든 아이템은 가지고 있는 정보가(공격력, 방어력, 회피율 등등) 다르다.

클릭하면 재생됨

 

 

아이템타입 enum

 

여기서   모든 아이템은 아이템정보창을 하나로 쓰기에 발생되는 문제? 가있다. 

  아이템 타입의 따라 출력되는 정보가 다르기에.  해당하는 아이템의 정보가 아닌 경우 '0'으로 표시될수가 있다. (ex 무기인데 방어력이 표시되는 경우 기획에 따라 다를수있긴 하지만)

 

먼저 모든아이템들이 공통적으로 입력되는 것은 Sprite이미지, 아이템이름, 아이템 설명

 

아이템 타입의 따라 분류를 해보자

무기 타입일 경우 무기 타입, 무기 등급, 공격력, 크리티컬, 공격 속도, 무기 등급

방어구 타입은 방어구 타입, 방어구 등급, 방어력, 회피율, HP

 이런 식으로 나뉘게 된다.

 

해당하는 아이템의 능력치에 해당하는 Text는 켜주고 그렇지 않은 능력치인 경우는 꺼주는 과정이 필요하다.

그런데 이렇게 해도 또 문제가 발생한다.

 ----------------

공격력

공격 속도

방어력

체력

----------------

UI Text가 이런 식으로 배치되어있는데 여기서 공격력과 체력만 사용하면 중간의 공격 속도와 방어력은 오브젝트를 꺼주는데 그럼 중간에 텅 비게 된다.

----------------

공격력

 

 

체력

----------------

이런 식으로 표시될 거다.

이문제는 Grid Laydout Group를 이용하면 해결이 가능하다.

 

장착 아이템 수치 표시

장착을 하면 현재 캐릭터의 수치를 표시해줘야 한다.

예를 들어 체력 : '히어로 체력+아이템 스텟'  '(+ 아이템 스텟)' 이런 식으로 능력치를 표시한다.

 

클릭하면 재생됨

 

 

여기서도 당연히 아이템을 장착할 때 스텟 값을 변경하는 과정에는 여러 가지 경우가 있다. 

 '(+ 아이템 스텟'

아이템을 장착/해제할 경우 :  현재 장착되어있는 모든 아이템들의 정보를 계산하여 표시 

'히어로 체력+아이템 스텟'

여기서 그냥 현재 히어로 스텟에 아이템 스텟을 더하면 안 된다. 그 아이템을 뺄 경우와 아이템 능력치가 곱하기나, 나누기, 퍼센트로 들어갈 경우가 있기 때문에 원본 스텟을 복사하여 사용하는 게 좋다. 원본스텟은 레벨업을 할경우?를 제외하고는 건들지 않도록 하는게 좋다.

반응형

무기 타입은 총 8가지

맨손, 한손검, 양손검, 메이스, 한 손 창, 양손 창, 한 손 도끼, 양손 도끼가 있다.

 

일단 한 손무기중에서 공격애니메이션을 제외한 대기,이동,점프등등 같은 애니메이션을 사용하고 공격애니메이션은 메이스와 한손도끼는 비슷하기에 같게 만들었다.

한손검은 다른 한손 무기 애니메이션보다 속도가 빠르다.

 

무기 리소스 모양의 무기 타입을 맞추는 것이라 시간이 들었다. 

플레이어 애니메이터

WeaponState로 무기가 스왑 되면 해당하는 애니메이션으로 넘어가도록 했다.

무기 스왑

무기 타입별 애니메이션

각 무기타입별 애니메이션은 아래와 같은 구조로 4개의 서브 스테이트로 다시 분류된다.

공격 애니메이션

마우스 좌측으로 연속 입력의 따라 3단 공격까지 가능하다.

 

무브 애니메이션

 

스킬 애니메이션

 

생활 콘텐츠용

 

반응형

콜라이더 그리드 관리

 

월드맵에서 모든 땅 포함 오브젝트 콜라이더 유지 비용을 줄이기 위해 그리드 형식 콜라이더를 켜주고 꺼주는 시스템을 만들었다. 플레이어가 없는 위치의 콜라이더가 활성화될 필요가 없기 때문이다.

 

플레이어가 위치한 그리드를 제외한 모든 다른 그리드에 포함된 오브젝트의 콜라이더는 꺼주도록 한다. 

 

 

월드맵

활성화된 그리드는 초록색 비활성화된 그리드는 빨간색으로 기즈모 색상을 변경하여 보여주고 있다.

크기는 12x12로 총 144개의 그리드로 나누고 한 그리드당 스케일 값은 50이다. 

그리드는 플레이어가 위치한 그리드를 중심으로 최소 4개(가장자리에 있을 때)~최대 9(자신 포함 8방) 개까지 켜준다.

 

월드맵의 총 3천개 이상의 오브젝트들이 있으며 게임시작과 동시에 각오브젝트의 위치를 통하여 그리드로 관리된다.

 

 

반응형

RPG 게임이기에 플레이어는 NPC는 몬스터 등 상호작용할 객체들이 많다.

그렇기 때문에 인터페이스 인터렉션을 만들어 사용하면 꽤 좋을 것 같다고 생각했다.

 

일단 플레이어와 상호작용하는 기본들이다.

1. InterType : 인터렉션타입 (NPC, 몬스터, 아이템 루팅 박스 등등

2. enable : 이 객체와 플레이어가 인터렉션을 사용할수 있는지 상태 체크용

3. InterString : 나는 그 객체를 상호작용 시도할 수 있다는 상태를 보여주기 위함으로 썼다.

4. sInterPlayerAni : 이 객체를 만났을 때 플레이어가 취하는 애니메이션들을 가지고 있다.

5. ShowInter() : InterString과 마찬가지로 이상태가 되면 객체가 발생하는 행동들이 있다.

6. ActionKey() : 5번이 활성화된 상태에서 2번 조건이 true이고 플레이어가 액션키 버튼을 누르면 실행되는 행동

7. EndIter() : 인터렉션이 끝난 후 처리

8. NonShowInter() : 5번과 반대되는 경우 

 

사용 

NPC와 대화

 

1. InterType : NPC(대화하기) 

3. InterString : 대화하기

5. ShowInter() : NPC 손 흔들기 애니메이션, 인터렉션 UI상태 true 

6. ActionKey() : 5 플레이어가 F키 누르면 NPC는 대화하는 애니메이션을 작동하고, 퀘스트 창을 출력 , 카메라 줌인

7. EndIter() : 퀘스트 창 닫고, 카메라 줌아웃

8. NonShowInter() : 인터렉션 UI상태 false

 

생활컨텐츠 : 벌목

 

반응형

사실 리소스랑 맵과 캐릭터와 딱 어울리는 UI를 찾는 게 어려웠다.

그래도 가능한 제일 어울리고 이쁜 UI를 만들고 싶었기에 열심히 찾았다.

 

그리고 요즘 핫한 패스오브엑자일 원형 HP, MP통처럼 그냥 일반 HP바처럼 가만히 있는 것이 아닌 실제 피가 가만히 있지 않듯 물결 흐르는 쉐이더 효과가 이쁘다.

사실 UI 짬뽕이 돼서 이질감이 살짝 없진 않지만 나중에 바뀌더라도 일단 이렇게 작업을 해야겠다.

반응형

직업선택 (미완성 상태)

위치 값 한 곳을 두고 캐릭터를 클릭하면 그 위치로 캐릭터가 걸어 나온 뒤 공격 애니메이션을 취한다. 이미 걸어 나온 캐릭터가 있는 상태에서 다른 직업의 캐릭터를 클릭하면 그 캐릭터는 뒤로 이동하고 새로 선택한 캐릭터가 위치한다.

 

캐릭터 커스텀 아이징

메쉬를 로드해서 교체하는 방식이다. 이때 유저가 선택하는 커스텀 데이터는 저장이 필요하다. 인게임 속 다른 방어구를 착용하고 장착 해제를 했을 때 이상태로 복귀가 필요하기 때문이다.

 

 

반응형

로비 씬

저장 데이터를 3개의 슬롯으로 형식으로 놓고 저장, 삭제하는 방식으로 UI를 만들었다.

 

그리고 "새로운 영웅을 만드시겠습니까"라는 "예", "아니오"로 선택하는 팝업창은 출력되는 문자열과 실행될 함수를 델리게이트로 넘겨서 팝업창은 동적으로 생성되고 다시 한번 사용할 때는 재활용된다.

데이터가 있는 슬롯을 선택할 경우
새로운 캐릭터를 생성할 경우

한번 생성하고 재활용한다.

 

 

데이터가 있는 경우는 현재 데이터중 유저ID,직업,레벨,골드 주요 정보만 출력된다.

반응형

RPG게임은 테이블이 2D프로젝트보다 확실히 많았다. 

구글 스프레드시트 테이블

Config,
Hero,
NPC,
Monster,
Weapon,
Armor,
ItemPotion,
ItemGem,
ItemETC,
Quest,
Conversation,
Message,

일단 이정도이고, 작업하다가 컨텐츠가 늘어날 수도 있겠다.

모든 테이블의 항목들은 nID의 고윳값을 가지고 있고, 그 테이블의 데이터를 항목에 따라 분류가 필요한 부분은 enum을 사용해 분류하도록 했다.

예를 들어 각 무기들은 nID는 4000번대이고 eWeaponType으로 무기 타입을 분류되도록 했다.

enum : eWeaponType

이런식으로 Type으로 분류가 필요한 데이터들을 enum설정하여 효율적으로 데이터를 얻어 올수있도록 구성을 했고, 실질적인 구현부에서는 잘해봐야겠다.

반응형

2D프로젝트는 Git으로 프로젝트를 관리했으니 이번에는 SVN으로 하였다.

 

SVN이란?

SubVersion의 줄임말로 자유 소프트웨어 버전 관리 시스템이다. 명령행 인터페이스에서 사요앟는 명령어를 따서 "SVN"이라고 줄여서 부른다.

 

버전관리나 여러명에서 작업하는 프로젝트의 경우 각자 만든 소스의 통합과 같은 까다로운 문제를 해결을 도와준다.

 

TortoiseSVN 이란?

마이크로소프트 윈도우용 서브버전 클라이언트 프로그램

 

설치방법 : 

다운로드 :  https://tortoisesvn.net/downloads.html 

 

자신의 컴퓨터 bit를 확인하고 다운로드 하면 된다.

 

 

그런다음 윈도우에 저장소로 만들 폴더를 하나 생성해주고. 마우르 오른쪽을 누르면 아래와 같이 TortoiseSVN관련 메뉴들이 보이게 된다.

[Repo-browse] 를 선택하면 URL이 나오는데  SVN주소를 입력해준다.

 

CheckOut  

내컴퓨터 파일과 SVN의 파일을 연결시키는것이다.

 

[URL of Repository] 는 체크아웃받으려는 SVN 서버에 있는 대상

[Checkout directory] 는 체크아웃받은 파일을 저장할 컴퓨터 주소

 

 

 

Commit

Update : 현재 SVN저장소에 있는 파일을 내림

Commit : 새로 추가된 파일을 SVN으로 올림

반응형
반응형

직업별 버프상점

저번에 등급별로 공격력을 업그레이드하는 버프상점에 이어서 직업별로도 업그레이드 할 수 있도록 했다. 버튼을 만들고 그 버튼이 어떤 버튼(어떤 직업인지)을 나타내고있는지 알면 인게임매니저가 맵의 존재하는 캐릭터를 검사하여 해당하는 직업의 히어로들을 업그레이드하면 된다.

 

 

기타 마무리_암막처리

NGUI들은 UI가 뎁스로 관리되기 때문에 현재 활성화하려는 팝업말고 뒤에 있는 UI들이 클릭 될 수 있다. 그렇기에 활성화 팝업의 가장 낮은 뎁스 빈 sprite이미지의 collider를 깔 다른 UI가 클릭이 불가능하도록 처리했다.

기타 마무리_소울풀링

몬스터가 죽었을 때 몬스터가 가져다주는 수치와 영혼이미지가 보여지는데 이것도 풀링으로 만들어서 여러이미지가 동시에 보여지도록 풀링으로 만들었다.

고블린은 10soul

 

반응형

데이터를 저장하기 위함을 위해 로그인 기능을 넣었다.

구글 스프레드시트를 이용했다. 설문지를 이용해서 데이터를 저장하는 방법이다. 설문지와 구글 스프레드시트 연동하는 방법은 블로그에 이미 포스팅했기 때문에 생략.. 일단 로그인이 어떤 식으로 구현이 됐냐면

게임을 시작하면 게임 관련 테이블을 받게 되는데 로그인 아이디, 패스워드 관련 데이터도 받도록 했다.  

sID와 sPass는 유저가 입력하는 아이디와 패스워드가 되고, nID는 데이터를 불러올 회원의 고유 넘버 값이 된다. nID를 통해 회원의 게임 데이터들을 불러오는 것이다. 데이터는 대충 재화(골드, 보석), 스테이지 클리어 여부 및 점수, 아이템수, 직업별 업그레이드 상태이다. 

일단 입력한 아이디와 패스워드가 같을 경우 그 IDData가 가지고 있는 데이터들을 입력하게 했다. (예외처리가 아직 많이 없다) 

더 까다로운 부분이 새로 가입하는 경우인데 지금 생각나는 체크해야하는 조건들을 나열해보면

1. 가입하려는 아이디 중복 여부

2. 가입이 됐을 때 고유 넘버 nID부여 가입된 순으로 배열하는 것이 좋아 보이기에(이건 두 가지로 나뉜다. 가입된 아이디가 아예 없을 경우와 가입된 아이디의 총개수의 +1로 값을 준다)

ID : 0 / PW : 0 으로 가입이되어 있음

가입이되면 해당하는 초기 데이터셋팅값을 받도록하고, 로그인이 되면 저장되어있던 데이터들을 받도록 처리했다.

반응형

랜덤으로 아이템이 받는 콘텐츠를 넣었다. 클릭하면 아이템 둘 중 하나 나오는 거다. 

박스를 클릭하면 생성되는 박스를 점점키워서 커지는 효과를 냈다. 추가적으로 별 모양 sprite를 통해 반짝거리는 데코를 넣고 당연히 인벤토리 추가되는 아이템의 개수 증가와 비어있는 아이템은 sprite를 비워주도록 처리했다.

반응형

인게임에서 히어로를 클릭하면 그 히어로의 해당하는 조합표가 보이는데 조합재료가 2성일 경우 그 재료의 조합목록들을 한번 더 보여주도록 했다.

2성 어쎄신은 3성의 어벤져의 조합재료이다. 어쎄신 버튼위의 마우스를 올리면 어쎄신은 도적2개로 조합되는것을 보여준다.

메지션 조합

조합가능 상태와 조합목록들을 알고있기에 그 해당하는 히어로의 이미지를 입혀주고 미니조합창의 위치와 active상태를 true로 바꿔준다.

반응형

(+기존게임에는 없지만 추가적 컨텐츠)

킹덤러쉬게임을 살짝 빌려서 로비에서 구매한 아이템을 인게임에서 사용할 수 있도록 했다.

 아이템은 2가지, 첫 번째 모래시계는 일정범위 몬스터의 이동을 일정시간 멈추도록 하고, 두 번째는 범위적으로 몬스터의 데미지를 입히는 아이템들이다.

일시정지 아이템

범위공격 아이템

 

반응형

스테이지 연결

스테이지에는 웨이브 몬스터 종류, 몬스터의 개수 정도만 정보를 가지고 있기로 했다. 그래서 WaveTable을 만들었다. 스테이지의 아이디로 각 웨이브의 데이터를 받아오도록 하면 될 것 같다.

StageTable

 

WaveTable

nWaveInfo를 가지고 Wave의 nID와 비교하여 데이터들을 가져오도록

결과창

마지막위에브의 몬스터를 잡으면 나타나는 팝업창이다. 스테이지를 클리어한 시간으로 score를 계산해서 별 1~3개를 표시하도록 했다.

스테이지 선택창에서는 획득한 별의 개수로 표시해주도록 했다.

 

반응형

로비씬에는 해당 유저의 인벤토리, 조합표,아아이템상점 3가지의 컨텐츠가있다.

로비에서 해당직업의 공격력을 업그레이드 시키면 인게임에서 그 직업의 해당하는 히어로가 스폰될때 공격력이 업그레이드 된 상태로 스폰된다. 

조합창

 

상점

상점에는 2가지가 있다. 골드로 살 수 있는 직업별 버프 업그레이드, 인겜에서 사용하는 아이템

상점_골드상점

구매를 하면 돈이 10골드씩 상승하도록 했다. 

상점_보석상점

상점같은 경우 해당하는 아이템을 클릭 할 경우 이펙트를 줬다. 만약 이게 없다면 샀는지 안샀는지 알 수가 없기 때문에 

 

인벤토리

인벤토리 클릭할때 마다 정보 상태를 업데이트를 해준다.

업데이트해야할 항목들은 버프업그레이드상점에서 어떤 직업의 몇업이 됐는지 그리고 보석상점에서 어떤 아이템과 몇개를 보유하고 있는지이다. 아이템같은 경우는 현재의 총 아이템개수, 그리고 각각 몇개의 아이템이 보유하고 있는지를 표시해준다.

랜덤박스컨텐츠

아이템이 두가지 아이템중 랜덤으로 1개의 아이템을 받을 수 있다. 

반응형

인게임 컨텐츠

그룹 지정 컨텐츠

구현 결과 : 그룹지정. 히어로들을 그룹을 지정하여 캐릭터를 한꺼번에 이동할 수 있도록 하였다. 그룹은 'A' ,'B' 두 가지로 나누었고 그룹 지정된 히어로를 이동 시 한꺼번에 같은 위치로 이동하도록 한다.

싱글턴으로 그룹 A, B List를 만들었고 거기서 그룹에서 빼거나 추가하거나 반복하도록 처리했다.

1. 그룹지정

하단 왼쪽 캐릭터 상태창을 보면 '그룹 A로'가 있다.  현재 그룹 상태가 'N' 한번 클릭하면 'A' 한 번 더 클릭하면 'B'로 변경된다.

즉 버튼의 Lable내용은 현재 그룹의 클릭 다음 상태에 그룹을 표시하도록 한다.  

위 그림처럼 '그룹 A로'클릭과 동시에 그 히어로는 그룹 A에 추가된다. 상태창 위에 보면 현재 캐릭터가 무슨 그룹인지 표시해주고 그 그룹에 어떤 히어로들이 추가됐는지 알 수 있도록 했다.

1. 그룹 이동

같은 그룹에 속한 히어로들은 일정한 위치로 그룹 이동하도록 했다.

개별 이동

그룹 지정한 히어로들을 한 캐릭터만 이동할 경우도 있다. 그럴 때는 개별 이동을 클릭하여 이동 처리한다.

 

히어로 판매

게임을 진행하다 보면 필요 없는 히어로를 판매할 수 있다. 판매하면 인게임에서 사용할 수 있는 soul이라는 재화를 얻게 된다. 해당 히어로의 가치 1성 50 soul을 이펙트를 보여준다.

인게임 속 히어로가 사라지면 히어로 딕셔너리에 Remove와 해당 히어로의 soul값을 표시해주며 비활성화 처리한다.

soul은 여러 군데에서 많이 사용하기에 풀링 처리하였고 특정 부분에서 위치를 변경하여 게임 씬에 보이도록 하였다. 히어로가 현재 인게임상 태에서 사리 지면 처리해야 할 부분들이 있다. 

1. 인게임 히어로 딕셔너리에서 지워주기

2. 해당하는 soul을 추가하기(인게임 soul표시 ui창 업데이트)

3. 현재 존재하는 히어로 개수 차감하기

 

반응형

인게임 컨텐츠

조합컨텐츠

자동으로 생성되는 히어로는 1성으로 등급이 가장 낮은 히어로들만 스폰된다. 이 1성 등급의 히어로들 가지고 2성으로 업그레이드가 가능하도록 하였다.

이런 식으로 인게임에 추가된 히어로들을 탐색하여 조합 여부를 표시해주는데 알파 값을 조절하여 현재 조합이 가능/불가능한지를 표시하고 조합이 불가능한 상태면 버튼 자체를 비활성화된다. 위 그림을 보면 워리어와 위자드가 있기 때문에 2성 등급의 소드맨으로 조합이 가능하다. 

소드맨버튼을 클릭하면 재료가 되는 메카닉과 워리어는 맵에서 사라지고 화랑이라는 히어로가 스폰된다.

오른쪽 하단 조합 버튼의 HeroList. 스크립트는 현재 자기 나열된 조합 목록들을 가지고 있다. 그렇기 때문에 그 리스트들을 가지고 인게임의 히어로들을 탐색하여 삭제 처리하도록 한다.

 

인게임 히어로 등급별 버프 상점 컨텐츠

모든 UI를 그냥 활/비활성화 처리하지 않았다. UI를 살아있듯 유저가 누를 때 작은 재미를 주기 위함과 생동감을 표현해주고 싶었다. 그렇기에 상점을 클릭하면 강화창이 위치 이동한다.

강화창은 1성 2성 3성 각각 soul재화 값이 다르며 클릭하면 해당하는 등급의 히어로들의 공격력을 증가된다.

1성 등급 버튼을 누르면 인게임에 존재하는 1성 히어로들은 레벨업과 동시에 공격력이 상승된다.(초록색 글씨로 표시) 마찬 가지로 2,3성 업그레이드 클릭 시 해당하는 등급의 히어로들은 업그레이드 처리가 된다.

 

반응형

타일프리팹을 복사하여 원하는 크기의 맵을만든다.

로비씬에서 스테이지를 선택하고 거기에 선택한 스테이지의 맞는 타일스프라이트로 변경하도록 했다. 타일의 스프라이트 뿐만 아니라 몬스터들이 일정한 위치를 회전하도록 몬스터 경로포인트도 위치도 타일은 알고있어야한다.

그런다음 몬스터는 생성될 때 스테이지의 맞는 이동경로를 받도록 했다. 

목표위치의 가깝게 오면 다른 포인트로 목표위치가 바뀌도록 했다.

 

반응형

 

게임을 진행하다가 조합 표를 누르면 전체 조합 표를 볼 수 있도록 만들었지만 게임을 진행하다가 사용자가 더 편히 현재 어떤 히어로가 존재하며 어떤 클릭한 히어로만의 조합 표를 보여준다.

현재 진행상황으로는 히어로가 스폰될때마다 히어로 테이블에 저장된  데이터를 입력받는다. 그리고 던전에 추가됐다는 것을 인게임 매니저에게 알리고 있다. (딕셔너리의 자기 자신의 스크립트와 오브젝트를 추가한다) 

 

조합표 데이터 로드_7

그런데 히어로 조합 표는 히어로를 클릭했을 때 자기 자신이 베이스 재료인 경우인 조합 표들을 나열해야 한다.  

조합표테이블

즉 클릭한 히어로가 nMaterial1인 경우의 조합표들을 보여주면 된다. 2번인 warrior를 클릭하면 nID가 9번, 11번, 18번, 19번 조합 표를 출력하면 된다.

사실 현재 던전에 있는 히어로들은 전에 작업해서 쉽게 받아 올수 있었지만 나 자신이 베이스 재료인지는 테이블 다운로드할 때 자료구조를 조금 추가가 필요했다.

인게임 시작할때 조합표를 업데이트하는 함수. (시작할 때 한 번 실행됨)

추가적으로 위 처럼 만들어주고 베이스 재료만 따로 또 저장했다. 

조합테이블

그리고 히어로를 클릭하면 클릭한 히어로의 sprite이미지와 이름, 그리고 이미지의 알파 값을 높여 현재 존재하고 있다는 것을 알려준다. 클릭한 히어로는 인게임 매니저에서 따로 찾지 않는다 (있으니까 클릭한 것이기 때문)

그리고 두번째 재료가 존재하는지 찾는다. 여기서 문제점이 발생했다. 두 번째 재료를 찾는 과정으로 인게임 매니저에서 현재 보유하고 있는 히어로들을 찾는데, 만약 여기서 베이스 재료가 세 번째 재료가 같은 히어로라면?

그러면 현재 보유한 헤어로가 1개여도 중복된 히어로들은 모두 있다고 표시해줄 것이다. 그것을 막기 위해서 히어로가 생성하때 각 오브젝트의 새로운 고윳값을 생성하게 했다. 그렇게 그 고윳값을 제외한 히어로들을 찾도록 했다.

그리고 조합표가 상위등급을 만드는 재료가 2개가 필요한 히어로도 있고 3개가 필요한 히어로도 있다. 각각 필요한 히어로 조합만 표시해주기 위해!=0이 아닐 경우에 밑에 재료를 업데이트해주도록 했다. 그리고 그 조합 리스트의 위치 값을 변경해 오른쪽 정렬하도록 했다.

 

-진행상황

해당하는 히어로가 조합표 재료로 두개일때 
해당하는 히어로가 베이스인 조합표 모두 로드
상위등급 히어로 조합가능
조합재료가 3개일때 2개일때 다른 오른쪽 정렬
클릭하면 보임

 

-미완료 상황

- 추가적으로 상위등급 활성화된 결과 sprite는 조합이 가능하다고 알리는 이펙트효과를 주고

- 결과를 제외한 2성이상 조합표리스트에 마우스를 올리면 그조합표의 어떤 조합표로 제작됐는지 표시해주는 미니 조합표도

아직~작업중

- 완료된 조합표를 클릭하면 캐릭터 교체작업 모든재료를 풀에 넣고 조합결과 히어로를 생성하도록

반응형

+ Recent posts