본문 바로가기

Unity/Unity3D_MyProject

Unity3D_MyProject - 게임개발일지#0(2021.5. ~ 2021. 12.)

 

그동안 게임개발일련의 과정을 메모장으로 기록을 해왔었습니다.
처음 본격적으로 게임개발프로젝트를 기획하고 시작한 건 2021. 5월경 이었네요
직장을 다니면서 느리지만 나름 꾸준히 개발을 해왔던 과정들입니다
처음에는 터치로 공을 Charge시켜 스와이핑으로 날리며 점진적으로 StageClear를 하는 방식으로 구현하다가
로그라이크로 장르를 바꾸게 되었구요 중간중간 게임의 방향성을 수정하는 일이 잦았네요
첫 6개월 동안은 게임개발에 있어 기획단계가 매우 중요함을 느꼈습니다
나름의 개발프로젝트를 시작한 2021.5월 부터 현재 2023. 1. 12까지 1년반 정도 프로젝트를 진행해오고 있네요
그 간의 과정들을 기록한 메모장 개발일지를 연도별로 포스팅 하고 남기려 합니다

 


 

2021. 5. 1. ~ 2021. 12. 31

1.시간이 지날수록 원소가 충전되도록 만들기
2.원소를 배열이나 리스트로 만들어 특정인덱스로 사용가능하도록 만들기
3.플레이어에 달려있는 가장 가까운 적 찾기를 차지볼로 만들어진 실체볼(원소타워)에 적용시키기
///6.1 완료//

1.차지볼이 벽에서는 빨간색으로 변하고 터렛볼을 설치할 수 없도록 만들기
2.차지볼 위치를 입체적으로 벽이 있다면 벽위에서 생성되도록하기
3.차지볼이 너무 작아져서 터렛볼이 너무 작은경우를 수정하기
///6.2 완료///

***트리거및 충돌이벤트가 발생하기 위해서 두 오브젝트중 한개는 리지드바디가 있어야함
보통 벽이나 땅에 리지드바드를주고 중력사용 체크해제. iskinematic 체크를 해주어서 사용


1.플레이어 멈춤시 공격, 터렛 공격
///6.2완료 ///

2.플레이어 Hp 구현,몬스터 Hp 구현, 플레이어 및 터렛 공격에 의한 몬스터 피격 구현
//6.3완료//


3몬스터 공격에 의한 플레이어 피격 구현, 
4.몬스터 hp가 0이 되면 사라지고 ,몬스터가 죽으면 체력바UI도 같이 사라지도록
//6.4완료//

5.다음스테이지에 들어갔을때 이전의 설치되었던 터렛들 모두 파괴
//6.4완료//

5.각 맵마다 맵컨디션오브젝트를 만들어주고, 몬스터를 배치시켜야함(1스테이지맵까지 완료)
 -몬스터 배치 후 각 맵오브젝트마다 작은 단위의 각각의 맵 스스로를 관리할 MapCondition 오브젝트를 생성시켜주어야함
///6.4완료//

5. 현재 맵의 몬스터를 다잡아서 클리어 했을시에만 다음스테이지로 향하는 문이 열리도록 구현
///6.5완료///

5.네비게이션을 만들고 몬스터A가 플레이어가 방에 들어오면 바로 따라오며 움직이고 공격시에는 멈추고
 플레이어 공격 -> 반복
///6.7완료///

5.플레이어hp가 0이되면 죽는 애니메이션 , 게임 재시작


6.플레이어 어떠한특정요건 충족시 원소 획득



00차 후 해야할 일00

2. 원소UI,원소아이템, 원소차지볼, 원소터렛+원소총알 을 한세트로 원소UI와 대응하는 9가지세트를 만들어 배열 혹은 리스트로 구별짓고 분류해야함
3. 원소관련 에셋정하기 및 원소관련 스킬구현하기
4. 플레이어 레벨업 구현
5. 레벨업시 스킬선택(777머신) 구현
6. 천사방에서 룰렛 구현
7.보스방 보스구현




플레이어 프리팹이 들어가는 오브젝트들
1.Main Camera
2.stageMgr
3.TouchBallMgr
4.ElementUiMgr
5.각 맵오브젝트마다의 MapCondition
6.각 맵오브젝트마다의 몬스터들
7.Canvas
7.Canvas 자식오브젝트인 JoyTocuch
7.Canvas 자식오브젝트인 ActiveSkillButton 버튼함수
8.HPCanvas
9.PlayerDataMgr
10. GameUi
11.SlotMachineManiger




//오늘한일//
1. 애니메이션 실행지점 이벤트함수 커스텀으로 구현하고 플레이어 기본공격 타이밍 맞추기
  -기본공격 애니메이션의 특정진행도 시점 1프레임을 캐치하여 그 상태일때만 기본공격 프리팹을 생성하기
2. 마초 액티브스킬을 구성하는 파티클에 collision을 사용하여 몬스터와 충돌검사하기
  -collision은 world로 만들고 min과 max를 조절하여 충돌직후 사라지도록 만들고, 해당 collision이 활성화된 파티클 오브젝트만 tag를 달리주고
  -send message를 체크해주어 
  -몬스터 스크립트에 OnParticleCollion()함수를 이용하여 파티클의 tag를 구별해서 원하는 로직을 만들어냄
  -collisiion에서 collide with를 Monster로 해주는데 즉 Layer가 Monster인 오브젝트하고만 충돌한다는 뜻임
3.액티브 스킬 피격효과를 구별하여 몬스터베이스 스크립트에 추가


///앞으로 할일///
1.몬스터 죽었을때 죽음 애니메이션 추가 
--완료-- 
2.기본공격LV3일때 몬스터에게 경직효과 추가, LV3기본공격 1,2타일떄는 LV2피격 효과 적용, 3타일때만 Lv3 피격 효과 적용
  --기본공격 Lv3이고 기본공격은 3의 배수 일때 몬스터가 이동중이라면 몬스터의 이동 이후 다음 공격이 경직되며 캔슬됨-
   ---완료

3.액티브스킬Lv2, Lv3일때도 몬스터에게 경직효과 추가 및 LV3 피격 효과 적용 / 액티브스킬LV1일떄는 LV2피격 효과적용
---완료

4.기본공격 LV1, LV2일때는 번개속성추가 및 기본데미지 증가 + 액티브스킬은 lv1부터 번개추가데미지
---완료
5.몬스터와 속성 상성간 추가데미지 
---완료

5.몬스터 체력바 위치조정
--완료


5.몬스터 처치시 골드 드랍 및 스테이지 클리어시 골드 획득
--몬스터 처치시 골드프리팹을 생성하고 생성한클론의 부모를 몬스터의 부모인 MapCondition으로 할당해주는 스킬
--골드프리팹자체에는 충돌콜라이더를 주고 자식으로 빈오브젝트를 만들어 isTrigger가 체크된 콜라이더를 추가해주는 스킬
   (부모인 골드프리팹자체의 Layer는 Gold로 해주어서 플레이어와 충돌+트리거가 안돼도록 설정해 놓았기 때문에
     자식인 isTrigger가 체크된 빈 오브젝트의 Layer는 Defalt로 해주어야 트리거가 제대로 발동됨)

--완료
  

6.HP이미지 수정
--완료


7.몬스터골드(경험치) 드랍
--완료

7.스테이지클리어스 드랍 골드(경험치) 플레이어에게 자석
--완료

7.플레이어Exp 슬라이더 UI추가 및 경험치 획득시 선형증가, 최대경험치 설정 
--완료
7. 레벨업시 레벨업효과 프리팹 및 LV텍스트 변화, 슬롯머신UI로 변환, 슬롯머신 스킬 선택시 다시 조이스틱, 액티브스킬 UI로 변환
--완료
8. 플레이어 공속 애니메이션과 연동
--완료
8. 몬스터 피격시 데미지 텍스트 프리팹 생성, + 크리티컬
 --완료
9.플레이어 Hp 선형감소 및 뒤따라오는 체력감소효과 적용
--완료


10. 슬롯머신 가로로 바꾸고, 슬롯머신 돌리기가 멈추면 해당 스킬에 맞는 스킬설명이미지와 함께 보여지게 하기
--완료

10. UI선택으로 기본공격 및 액티브공격 레벨올리기..
 목표
 (1) - 3레벨까지 올리는건 완료 그럼 3레벨 이후에는 어떻게 해야할지... 딕셔너리의 [3이건 지워도 댐 
--완료 => 3레벨 이후에 다시 스킬후보군3개를 고를때  3레벨찍은 스킬을 제외하고 지금까지 선택했던 스킬중 하나를 재할당해준다

 (2) - 경험치를 다 먹고나서 다음스테이지 문이 열리도록! 
-- 완료 =>기존의 문이 열리기위한 조건에 골드카운트변수를 생성하고 경험치를 먹을 때마다  +하고 흡수할때마다 - 하여 그 수가 0일때의 조건까지 충족했을때문이 열리도록 만든다

 (2) - 지금까지 선택한 스킬리스트를 옵션UI를 눌렀을때 가시화하여 보여주기 
--완료 =>새로운 settingUi판넬을 만들어 그 안에 선택된스킬을 보여줄 판넬을 하나더 만들고 
            해당 판넬을 컨트롤할 스크립트 추가 그리고 배열을 만들어 그안에 버튼과 이미지 20개를
            비활성화 상태로 둔 다음 슬롯머신 스크립트와 연결지어서 하나씩 최종선택된 스킬의 이미지를 채워준다 

 (2) - 옵션 UI의 뒤로가기버튼 만들기
--완료 => 뒤로가기버튼을 눌렀을때 GameUi스크립트안의 SettingBackBtn()함수를 작동시켜 Setting판넬을 비활성화 시킨다

 (3) - 옵션UI를 눌러 SettingUI판넬을 활성화 시켰을때 게임을 정지시키기
--완료 => Time.timeScale =0; 을하면 일시정지 =1을 하면 정상동작





 (3) - 기본공격과 슬롯머신 UI레벨을 연동시키기
-->완료 ==> 스위치문 활용


 (4) - 실제 스킬을 구현 (정령이 나타나서 스킬을 발사하고 사라지는 방식으로 구현)
---> 진행중 , 영혼로직 구현, playerDataMgr로 스킬Lv등 이동, 몬스터 피격을 피격체의 성격에 따라 구분하여 로직 작성(영혼발사체는 onColliderEnter로 검사)등, 

 할일 -  영혼스크립트를 상속으로 나누어보자, UI와 스킬연동하여 레벨업시켜보자 , 영혼스킬에 2번째 불스킬인 메테오까지 추가해보자
 --> 완료 : 상속으로 불영혼과 얼음영혼을 나누고 각 공격로직을 다르게 구성시켜줌

 6.25할일 - fire2 단일메테오 스킬 프리팹에 collision을 주었으니 monsterBase에서 onParticleCollision()부분에 영혼스킬 히트 로직을 추가해주자
             - 메테오파티클에 구체 콜라이더를 추가해서 istrigger로 광역충돌히트 검사햇음
--> 완료

 (5) - 구현한 실제스킬과 그 스킬레벨과 슬롯머신 UI레벨, 공격력증가등을 연동시키기 
--> 완료
 
 (5) - 얼음영혼 추가하여 로직 재검사 // 얼음영혼깨어남이펙트랑, ICE2 얼음스킬 로테이션이 이상함..
 --> 완료 

 - 파티클시스템에 collision 에서 LifeTimeLoss를 1로 하면 충돌시 파티클이 사라지도록 구현가능하고 Sub Emitters에서 파티클이 생성될떄의 이펙트와 collison될때의 이펙트를 따로 구현해줄 수 도 있음
 - ice1은 shape에서 burst spread로 바꿔주면 얼음trace가 균일하게 퍼져나감    

 - 얼음스킬을 추가하여 불스킬과의 구별은 각 파티클시스템의 콜라이더 이름으로 해주었음
 - 파티클시스템의 스크립트인 SpritSkillPC은 triggerEnter방식으로 히트로직을 구성하는 방식인 fire2와 ice1을 구별해주어야함
 
(5) - 얼음스킬1에 트리거stay인경우 몬스터 메쉬를 파랗게 만들면서 이동속도 느려지도록 하기
--> 완료 ice1Hit 플래그 변수를 추가하여 MonsterBase의 ontrifferEnter()로 Ice1스킬을 맞았을때 해당 플래그변수를 true로 만들고 navOn()에서 속도를 조절했으며 
     색깔은 onDamgeMesh()와 NavOn()에서 플래그변수를 활용하여 구별

 

(5) - fire1스킬과 fire2 스킬을 같이 습득했을때 재사용대기시간을 어떻게 적용시킬 것인가.. 

   - 재사용대기시간은 각 영혼프리팹이 가지고 있는데..
  


11.마초캐릭 die 애니메이션 만들기..
12. 최적화 할 수있는것들 코드 최적화하기
13. 새로운캐릭을 하나더 만들고 차 후 UI에서 캐릭터 변경을 할 시에 여러 오브젝트에 이전의 캐릭터오브젝트가 할당되어있던것을 어떻게 새로운 캐릭터오브젝트로 변환시키는지 고민



디버그목록
1.몹들 다 잡자마자 골드(경험치)가 플레이어로 날아오기 전에 다음스테이지로 이동해버리면 경험치 증발
 --경험치를 다 획득하면 다음스테이지 문 열리는 걸로 ㄱ
--> 완료 : PlayerDataMgr스크립트에 dropedGoldCnt (몬스터가 드랍한 골드(경험치)수) 변수를 추가하고 해당 변수를 골드를 드랍할때 + 하고 골드가 플레이어에게 흡수될때 - 하여 그 수가 0이 될때 워프가 열리도록 하는 조건 추가

2.가끔씩 레벨업후 슬롯머신나오기전에 조이스틱 움직여져서 계쏙 이동하는 버그
 -->완료 : PlayerDataMgr스크립트의 playerLvUp()함수에 JoyStick.Instance.playerMoveVec = Vector3.zero;를 추가해줌

3. EXP바가 터치되는 버그.
-> 완료 : PlayerExpSlider 오브젝트에서 interactable을 체크해제 해주고 Canvas오브젝트 내에서 가장 최상위 자식으로 옮겨준다
           : 같은canvas부모를 가질 때 가장 최상위에 있을수록 UI화면상 가장밑부분에 위치한다

4.대쉬가 안돼는버그
-> 완료 : 플레이어의 콜라이더를 box에서 capsule로 바꿔주고 rigid.add의 힘을 좀더 쌔게 줌

5.핸드폰 해상도 비율이 달라져도 슬롯머신의 스킬설명란이나 스킬이미지가 움직이는 거리를 일정하도록 해줘야함

6.마초의 3렙 기본공격은 3타마다 번개를 꽃는데, 3타를 다 던지고 그 3타를 몬스터가 맞기 전에 이동하면 makingBulletIndex가 0이 되버려서 번개를 안꽃음..
-> 완료 : 플레이어가 창을 던지는 순간 makingBulletIndex를 ++하고 움직이는 순간 0으로 초기화하는데 이때 던지는 순간 증가된 makingBulletIndex정보를 던지는 총알속 스크립트에 바로바로 저장해서 날려주어 해결

7. 장거리에서 플레이어의 액티브스킬이 적중하는 버그
-> 완료 : 액티브메인스킬의 dust파티클을 가져와서 Emission(Bursts Count조절)과 shape(원모양의 Cone Radius 조절), collsion(radius)를 조절해주어 cone(원)모양의 가장자리를 모두 채우도록 1회성 충돌감지collision을 생성한다 , 몬스터의 isActiveHit플래그변수에 코루틴을 주어 피격무적시간을 준다



***코루틴에 매개변수로 콜백함수를 넣어서 특정value를 리턴시키는 방법인데 활용할 수 있으면 해보자
 IEnumerator Bar(System.Action<bool> callback)
 {
     yield return null;
     callback(true);
 }





***영혼스킬의 히트방식
fire1 -> OnColliderEnter
fire2 -> OnTriggerEnter
ice1 -> OnTriggerEnter
ice2 -> OnParticleCollision





최적화 사항
#1.오브젝트풀링
//EffectSet과 잘 연동시키기
//오브젝트가 처음 활성화시에 Awake()혹은 Start()는 한번만 호출된다, 
  해당 오브젝트가 비활성화되었다가 다시 활성화되어 재사용될때에는 활성화상태의 어떠한 상태를 계속 가지고 있는 상태이다

//활성화될때마다 무언가를 초기화시켜주어야하다면 OnEnable()을 써야한다 
  즉 활성화될때마다 0.5초 후에 setActive(false)가 되어야할 경우(이펙트)가 많기때문에 이는 OnEnable()에서 Invoke를 활용하여 로직을 작성

//재활성화시에 ObjectPooler.Spawn...으로 인해  생성위치를 함께 초기화 해주기때문에 OnEnable()에서 따로 생성위치를 최초위치로 초기화해주지 않아도 된다
하지만 그 외의 것(예를 들어 생성할때마다 rigid.addforce를 한다던가 속력의 변화를 줄때는 이것이 비활성화 될때 가지고있던 속력을 초기화시켜주어야함)

//기존 이펙트들이 자동으로 사라지는 로직의 스크립트를 새로운 스크립트인 DeactiveEffect로 대체해주어야함

//OnDisable()에서 invoke시에는 CancelInvoke()를 코루틴사용시에는 Allstopcouroutine();을 사용하기

#2.yield return을 YieldTime class에서 가져와서 사용하기
#3.new는 가능한 한번만 사용하여 전역변수화 하고 해당 변수를 중복사용하기
#4.getComponent를 1회만 선언하여 변수에 할당하고 그 변수로 사용하기
#5.getComponent가 동적으로 쓰이는 경우 단일객체에서 호출할 수 있는 것들은 복수객체가 아닌 단일객체에서 호출하도록 재구성하기
#6.foreach보다 for쓰기
#7.tag == ~~ 대신 CompareTag("Player")사용하기
#8.문자열 StringBuilder사용하기(검색 필요)
#9.TryGetComponent() 사용하기(검색 필요)
#10.구조체 사용하기



--MonsterBase.cs의 254줄까지 최적화완료..

O오늘의 디버그 목록
--몬스터히트이펙트가 왓다리갓다리 하는 버그 ...
-->완료 : 각 이펙트들을 하나의 변수안에 대입시켜줘서 그런것이었음 각각 이펙트를 따로 작동시킴

--슬롯머신의 이미지 좌측이동거리가 핸드폰해상도에 따라서달라지지 않도록 비율이동으로 조정

O중요
--PlayerSc 마지막줄까지 최적화완료...
--단일 오브젝트 풀링할때 파티클시스템 각각에 자동파괴되는 스크립트는 없애줘야한다
--라이트닝1스킬은 트리거형식으로 히트데미지를 계산하는 fire2스킬이나 ice1 스킬과 같은 방식으로
   데미지계산을 하기때문에 Spirit Skill PC스크립트를 가져온 것이고(속성에 따른 추가데미지를 확인하는 로직에 필요)
   fire1스킬처럼 발사체로써 움직여야하기 때문에 Projectile Mover스크립트를 가져왔다
   (리지드바디를 사용하여 힘을 주는 로직과, 벽과 트리거시에 오브젝트풀에 반납하는 로직을 사용)
   트리거콜라이더를 2개를 사용하여 1개는 몬스터에게 데미지를 주는 영역으로 Layer를 추가하여 오직 몬스터와만 상호작용하도록하고
   나머지 한개의 콜라이더는 발사체 크기만큼 조절하여 벽과 충돌시 사라지는 용도로 사용
 




*******TouchBallMgr스크립트 전체와 IceChargeBall스크립트 전체, ElementUIPos스크립트 전체, MeterScript전체, 에셋스토어폴더의 ElementalMeters폴더안에 있는 PlayerController스크립트 전체, PlayerSc의 UPdate()문 181번째줄(터치볼관련)과, 533번째 줄(원소관련) 은 비활성화***







7/14 할일
-Holy스피릿 born이펙트 -->완료
-Holy스피릿 스킬공격 EffectSet과 ObjectPooler에 등록  --> 완료
-Holy스피릿 공격로직 구성 --> Holy1완료, Holy2 진행중


7/20 한일
-플레이어가 Holy1버프를 받고 있는 동안에는 기본스킬레벨 +1, 피해감소 5 적용, 캐릭터 상단에 버프표식 생성
-Holy2스킬은 빛의 망치가 떨어지는데 떨어지면 충돌가능한 망치가 일정시간 남아 있게 되고 
  충돌지역에 있는 몬스터를 에어본 시킴
  이 망치를 캐릭터가 습득하면 버프표식과함께 쉴드가 생성, 해당 쉴드는 1회 몬스터의 공격을 막아줌
  

-기본공격을 기존 2단계에서 3단계로 나누는데 어케 나눌지,, --> 완료 : 스킬획득시 Lv별로 나누어 Lv1일때에는 공격력과 공속만 올려주고 Lv2.Lv3일때는 프리팹까지 ++해준다

- 기본공격렙 만렙에서 Holy1 버프위에있을시에 예외처리는 어케할지 --> 완료 : 기본공격레벨이 최대일때는 버프공간에 있을동안은 액티브스킬레벨을 올려줌





7/21한일
-기존 제네릭 캐릭터에서 휴머노이드 캐릭터로 바꿔줌 이유는 아래의 사이트에서 추가적으로 새로운 애니메이션을 얻어오기위해
 앞으로 근접공격전환 시스템을 추가하여 새로운 애니메이션도 추가해줄 예정이기 때문임
-그에 따라 선제적으로 휴머노이드 애니메이션을 새롭게 아래 사이트에서 다운받아서 기본공격애니메이션을
  다운로드받고 직접적으로 해당 다운받은 애니메이션을 클릭하여 창던지는 모션으로 사용하도록
  프레임별 무기를 쥔 오른손의 위치조절 + 특정한 프레임에서 무기오브젝트 Actvie 비활성을 추가하여 
  애니메이션을 수정해줌 


O아래 사이트를 참고하여 애니메이션을 다운로드 받아온 이후에 다운받은 FBX파일을 에셋폴더로 옴겨온 후
 1.해당 프리팹을 클릭하여 Rig에서 Animation Type을 Humanoid로 바꾸어주고 
 2. Avatar Definition을 Copy From Other Avatar로 하고 아래 Source에 기존리소스인 c_mahco_01_huAvatar를 넣어줌
 3.다운받은 애니메이션을 Ctrl +D로 복사하고 이름을 바꿔준 후 해당 애니메이션을 클릭
 4. 필요하다면 Loop Time을 체크해주고
 5. Bake Into Pose를 모두 체크
 6. Based Upon은 위에서 두개만 Original로 하고 마지막한개는 Center of Mass로 바꿔줌


O휴머노이드 애니메이션 생성 -> mixamo 
https://makerejoicegames.tistory.com/74
https://www.mixamo.com/#/?page=1&query=attack&type=Motion%2CMotionPack


-슬롯머신으로 선택한 스킬들에 대해 하나의 스킬을 선택했을때 후보군일때 보여주었던 스킬설명과
  같은 인덱스를 스플릿하여 스킬네이밍을 가져올 수 있도록(explaneIndexList를 새로 생성하여 활용)하고 
  해당 스킬네이밍에 Lv1, Lv2, Lv3를 붙여서
  구별해주었으며 그 네이밍을 SelectedSkillData 리스트에 담아줌


7/23한일
- 근접공격 구현
1. 근접공격 애니메이션을 따와서 애니메이터에 등록하여 isMeleeAt이라는 bool조건을 추가하여 상관관계를 새롭게 짜서 근접공격 애니메이션 클립을 추가해주고
2. PlayerSc에서 타겟팅 중 몬스터와의 거리가 일정거리 이하가 되면 근접공격 애니메이션을 실행하도록 로직을 짜줌
3. 원거리 기본공격에서 특정 애니메이션 재생률을 따와서 타이밍을 찾아내듯 같은 방법으로 근접애니메이션 3타 모션에 맞게 공격콜라이더에 피격할 타이밍을 Bool변수인 isMeleeAt가 true인 1프레임을 찾아줌
4. MonsterBase에서 OntriggerStay()문안에서 플레이어자식으로 만들어둔 근접공격범위 Collider와 트리거 중임과 동시에 PlayerSc의 isMeleeAt가 true지점에서만 3타 모션에 맞도록 피격되도록 해줌
5. 플레이어 근접공격 애니메이션 클립에 meleeAtSpeed를 연동시켜 스크립트에서 재생속도를 제어해줌
6. 트레일 랜더러도 옵션으로 추가해줌 --> 차후 근접공격시에만 켜지도록 만들어 줄 예정

 
7/25 수정
-위 7/23의 3,4번인 근접공격 구현 방법을 사용하니 OntriggerStay()에서 자주 isMeleeAt가 true인 프레임을 놓쳐서 근접공격이 안먹히는 상황이 발생
따라서 근접공격 콜라이더를 프리팹으로 만들어서 EffectSet오브젝트와 ObjectPooler오브젝트에 넣어주어서
근접애니메이션의 3타 진행률을 검사하는 함수의 각 1타, 2타 3타에 근접공격 콜라이더를 스폰해주고 
해당 근접공격 콜라이더 프리팹에도 Ondisable()일때 오브젝트풀로 회수하는 스크립트를 넣어주고
MonsterBase의 OnTriggerEnter()에 근접공격콜라이더와 트리거될시에 바로 비활성화 시켜주어 해당 프리팹이 오브젝트풀로 회수될 수 있도록 로직변경

-기존 원거리공격이 Lv1일때는 Lv1총알이 무속성공격이었는데 캐릭터의 속성을 넣어주는것으로 변경
-몬스터가 근접공격에 피격시에 속성간 추가데미지를 받는 로직은 플레이어의 액티브스킬속성로직을 가져와서 추가데미지량이 큼(번개속성+30) 
-근접공격도 normalSkillLv을 따르기 때문에 기존 원거리 공격과 마찬가지로 Lv2때 몬스터 번개피격이펙트 추가 Lv3의 3타때 경직효과도 추가해줌
-스킬슬롯머신 및 Holy1스킬로 normalSkillLv을 올렷을때 기존 원거리공격력(50%) 및 공속(30%) 증가 로직에 근접공격력(50%) 및 공속(20%)  증가 로직도 추가해줌
-근접기본공격력과 근접기본공속, 근접기본공격인덱스(1,2,3타)는 따로 두고, PlayerData의 normalSkillLv는 공통으로 사용한다


O앞으로 할일목록
- 근접공격 레벨에 따른 트레일렌더러 만들어주기 ---> 7/26 완료
- 기본원거리,근접공격을 올려주는 스킬이미지 바꾸기
- 12번째 스킬로 최대체력 증가 + 체력회복 + 피해감소율 증가 스킬 추가 (회복량디스플레이, 힐이펙트 추가) --> 7/26 완료
- 피격시 플레이어 데미지 텍스트 디스플레이효과 추가 --> 7.26 완료
- 스킬선택슬롯에 경험치로 환원 목록추가 --> 7/27 완료
- 스킬 선택창 화면 비율에 맞게 조정 --> 7/27 완료
- 마초캐릭터 대쉬 애니메이션과 죽음 애니메이션 추가 -- 7/26 완료
- 대쉬 쿨타임 이미지 만들어주기 --> 7/27완료 
- 모바일 빌드 실험
- 최적화
- 다른캐릭 만들어서 간단한 UI로 캐릭터 선택 구현 
- 게임시작시 canvas에 생성되는 EnemyBackHealth(clone)을 오브젝트 풀링으로 구현할 수 있는지..

 
7/26한일
-근접공격Lv2일때는 무기이펙트, Lv3일떄는 잔상효과 추가
-근접공격3타일때는 추가데미지 15 (MonsterBase 근접공격 히트 부분에서 구현)
-회피애니메이션 및 죽음애니메이션 추가 플레이어에 죽음로직추가
-피격시 플레이어 데미지 텍스트 디스플레이효과 추가
-12번째 스킬(Armor)로 최대체력 증가 + 체력회복 + 피해감소율 증가 스킬 추가 
-Armor스킬을 배울시에 잃은체력의 50%를 회복하는데 회복시 +되는 회복량 디스플레이 추가, 힐 이펙트 추가

디버그목록
1.죽은상태에서 액티브스킬누르면 스킬나가고 다시 살아남 ㅋㅋ.. --> 완료
2.현재맵을 클리어하면 바로 다음스테이로 가는 문이 열리는데 가끔 움직이는 상태로 슬롯머신이 열리고 
  움직임이 제어가 안되기떄문에 움직이는 방향으로 캐릭터가 계속 달리는데 이때 다음스테이지와 트리거되면
  다음스테이지로 넘어가 버림.. 따라서 슬롯머신이 돌고 스킬을 골르면 다음스테이지가 열리도록 하는게 좋을 듯
  흠.. 그런데 렙업을 안하는 경우는 슬롯머신이 안도니까 다음스테이지를 못가게 되네?... 그냥 기존방법유지하되 렙업시에 캐릭터가 확실히 못움직이게 해보자
  --> 일단완료 렙업시에 작동하는 PlayerDataMgr스크립트의 IEnumerator playerLvUp()에서 게임UI 비활성화 슬롯UI 활성화를컨트롤하는 로직을 맨 위쪽으로 옮겨서 먼저 실행되게 해줌



7/27일 빌드 실험 전 한일
- 카메라에 화면비율고정 스크립트를 추가하여 9:20 비율로 화면고정 하기 --> 고라니tv 해상도 고정편 활용 완료
- 경험치로 환원목록 스킬슬롯에 추가하기 --> 완료
  : 스킬슬롯이 회전하다가 멈추고나서 스킬설명이 옆에 뜰때 경험치 환원텍스트가 쓰여진 버튼이 활성화되어야함
  : 환원버튼을 누르면 레벨업필요경험치의 25%가 채워지고 다시 버튼활성 및 위치가 초기화 되면서 슬롯UI가 꺼짐
                                          

7/27 빌드 실험 이후 디버그 목록
 1. 아머스킬 선택시 힐이펙트가 캐릭터를 따라오지 않음 --> 해결완료
 2. 대쉬사용조건인 드래그 값이 너무 작아서 의도치 않게 사용되버림 -- > 해결완료
 3. 대쉬사용중에 이동을 위한 터치가 중복적용되어 대쉬중 방향이 바뀌고 플레이어 속도가 가속이 됨 --> 아래의 방법으로 해결완료
 4. Ice2스킬 사용시에 튕김현상 발생 --> OnParticleCollision()에서 과부하를 발생시키는 것으로 추정


7/27일 빌드 실험 이후 한일
- 플레이어 Hp 옆에 대쉬 쿨타임 이미지 만들어주기 --> 완료 
  : 플레이어를 따라다니는 HPCanvas의 자식으로 DashImage를 만들어주고 
    Canvas의 GameUi스크립트에서 해당 DashImage를 컨트롤하기 위해 쿨타임덮개가 되는 이미지를 변수로 주어 할당하고
    쿨타임덮개를 움직여줄 함수도 선언한 이후 플레이어가 끌기터치로 대쉬를 할때 해당 함수를 사용하는 방식으로 구현
    더하여서 대쉬를 하고 대쉬가 쿨타임일 경우에만 쿨타임이 줄어드는 대쉬이미지를 보여주고 사용가능한 상태일때는 이미지를 비활성화
    그리고 플레이어스크립트의 Move()와 Turn()부분에 현재 플레이어 상태가 대쉬상태일때는 움직임과 회전을 봉쇄



7/28 한일
- 플레이어의 대쉬조건 수정, 모바일빌드 실험 --> 완료
- 게임오버판넬 생성후 플레이어 사망시 활성화되도록하고 Restrat버튼을 클릭하면 씬이 로드되어 재시작 하도록 임시구현 --> 완료

O디버그목록
 - 터치가 2개가 입력되면 움직이면서 공격하는 버그 발생 -> 터치2개 입력을 제한하자 --> 완료
 : 기존 OnPointerDown, OnDrag, OnPointerUp 인터페이스를 구현하여 터치 조이스틱을 구현하였던 것을
   업데이트문에서 Input.touchCount <2를 이용하여 모바일터치 조이스틱으로 구현해주었다
   동시에 조이스틱과 관련된 판넬이미지 혹은 이미지들의 컴포넌트 raycast Target 을 체크해제하고
   게임UI와 관련된 판넬이미지나 액티브스킬버튼, 셋팅버튼같은 UI 이미지들의 raycast Target 은 체크해주었다
   왜냐하면 액티브스킬버튼을 누를때는 조이스틱터치가 발생하지 않도록하기 위해서인데 
   이것은 if (Input.touchCount < 2 && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) 조건을 사용하여 구현하였다
   EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)가 fales라는 것은 raycast Target이 체크된 Ui가 아니라는 뜻이다


7/29 한일
- 힐이펙트가 플레이어를 따라오지않던 버그  -->완료 :  따로 HealEffectPos라는 스크립트를 만들어서 위치를 업데이트해주도록 힐이펙트프리팹에 넣어줌
- 아머스킬 로직 수정 --> 완료 풀피일때를 따로 구별해줌
- 대쉬중에는 총알 맞지 않도록 수정 -> 플레이어스크립트에서 플레이어의 현재상태에 따라 대쉬중에는 Layer를 변경해줌
- 골드경험치가 캐릭터와 트리거되지 않는 버그 --> 완료 : 기존 Vector3.Lerp를 사용했던 로직을 Vector3.moveTowards로 변경


7/30 한일
-닷지 사용중엔 액티브스킬 사용불능하도록 하기 --> 완료
-액티브스킬중에 닷지 사용시 모션캔슬 가능하도록 하기  --> 완료




8/2 한일
- 새로운캐릭터 추가 및 캐릭터 변경을 위한 스크립트 수정 및 추가
- 슬롯에서 환원버튼을 누른 이후 기본스킬레벨업을 하면 해당 스킬설명에 맞는 스피릿된 스킬네이밍을
  가져오지 못했던 버그 수정 --> 완료 
 :기존 다른스킬 버튼을 눌렀을때는 스킬 네이밍인덱스를 저장하는 리스트를 초기화해주는 코드가 있었는데 환원버튼 클릭시에는 해당 코드가 빠짐 
 :환원버튼 눌렀을때 스킬네이밍인덱스를 저장하는 리스트를 초기화해주는 코드를 추가

O기존에pulic 인스펙터창에 등록하는 방식으로 Player오브젝트 혹은 player스크립트를 사용한 스크립트 목록
1.Main Camera 오브젝트의 Camera Script스크립트 - PlayerObj변수 %%%
2.PlayerDataMgr 오브젝트의 PlayerDataMge스크립트 - PlayerSc변수 %%%
3.StageMgr오브젝트의 StageMgr스크립트 - PlayerObj 변수 %%%
4.MapStage의 자식인MapCondition오브젝트마다의 MapCondition스크립트 - PlayerSc변수 %%%
5.BeholderPBE몬스터 오브젝트의 MonsterA 부모인 MonsterBase스크립트 - PlayerObj변수 %%%
6.Canvas오브젝트의 Game Ui스크립트 - PlayerSc변수 %%%
7.Canvas의 자식 JoyTouchPanel오브젝트의 JoyStick스크립트 - PlayerSc변수   %%%
8.Canvas의 자식 SlotMachineManiger오브젝트의 SlotMachineManiger스크립트 - PlayerSc변수 %%%
9.HpCans오브젝트의 Hpbar스크립트 - Player 변수 %%%
10.플레이어오브젝트의 fire~Holy Spirit오브젝트의 PlayerSc변수 %%%


O기존 스크립트 내에서 PlayerSc playerSc를 사용했던 스크립트
1.GoldPreFap.cs- 2
2.ElementItem.cs - 1
3.ElementTurret.cs - 1
4.JoySctick.cs - 1
5.MonsterBase.cs- 4
6.HealEffectPos.cs - 1
7.HolySkill.cs - 1
8.PoolEffectDeActive.cs - 1
9.PlayerDataMgr.cs - 1
10.SpiritBase.cs - 1 
11.MapCondition.cs -1
12.CameraScript.cs -1
13.GameUi.cs -1
14.SlotMachineManiger.cs -1
15.Hpbar.cs - 2

O플레이어스크립트에서 public으로 직접 끌어땡긴 오브젝를 사용하는 변수 목록
1.MeleeEffectLv2 변수
2.MeleeTrail1Lv3변수
3.MeleeTrail2Lv3변수
4.FireSpiritObj변수
5.IceSpiritObj변수
6.LightningSpiritObj변수
7.DarkSpiritObj변수
8.HolySpiritObj변수


O상속구분
1.근본적인 로직은 같은데 로직안의 변수만 바뀌어야하는 경우 => PlayerBase에 로직을 두고 protected로 값이 비어있는 변수를 두어 하위스크립트에 변수만 할당
2.근본적인 로직을 달리해야할때 => PlayerBase에서 로직을 없애고 하위스크립트에 로직과 변수를 모두 할당




8/6할일
-shader graph를 활용한 캐릭터들의 melee공격의 잔상이펙트인 meleeSlash이펙트를 적용시킴
-macho캐릭에 적용

O할일
-위 meleeSlash이펙트를 zhoutai캐릭터에도 적용 + 근접공격 로직 채워주기


8/9 한일
 - 조우타이 근접공격 완성
 - 조우타이 액티브 스킬 진행중 1렙스킬은 범위 작고 지속시간3초 2렙스킬은 범위 커지고 지속시간4초 3렙스킬은 아직 안만듬


O디버그목록 --> 완료
 - 하나의 스킬혹은 두개의 스킬만을 모두 3레벨을 찎었을 경우 그 다음 슬롯머신이 돌아갈때 오류발생 .. 이미 만렙스킬이 또 나왓을경우 만렙스킬을 제외한 선택했던 스킬리스트에서 가져오게 되는데
   그 리스트가 비어있어서 발생하는 오류같음 --> 해결완료
 - 동전버그가 아직도 있음  ㅜㅜ  --> 해결완료  : 동전이 날라가는 위치가 플레이어 바닥쪾이여서 그런듯.. 위치를 플레이어 중앙쪾으로 날라가도록 조정
 - 진행중 warpGate를 통과해 게임맵 밖으로 나가는 버그 ㅜㅜ --> 해결완료 : warpGate에 들어가는 이벤트를 기존 trigger이벤트에서 collision인 충돌이벤트로 변경

8/10한일
- 자우타이 액티브스킬 마무리 --> 완료
- 자우타이 원거리공격을 도약으로 할건데 해당 스크립트를 짜는 중 스탑.. canAttackPoint를 자우타이에서도 애니메이션 검수를 통해 따로 찍어줘야 할 듯
- 도약을 할때 rigid.AddForce로 할지 rigid.velocity로 할지... 해당 코드를 업데이트문에서 돌리던가?...찾아보자


8/11한일
- 자우타이 원거리공격을 도약으로 만들기위해서 Shot애니메이션의 진행률포인트를 가져오는 함수를 사용, 도약할 타이밍을 진행률10%로 잡아줌 -->완료

- 도약시에 발동하는 Attack()함수에    StartCoroutine(ZhoutaiAttack());와   StartCoroutine(ShotAnimEndTrue())를 활용하여
 : 도약이 시작할떄 true가 되고 약0.5초후에 다시 false가 되는 bool isShotAnimEnd활용하여  AddForce로 도약이동을 만들어준다 --> 완료

- 도약시에는 이동이 불가하고 도약 애니메이션이 80프로정도 진행했을때 다시 이동이 가능하도록 할 것이며 도약애니메이션은 끝까지 재생되도록 하고싶다 --> 완료
 : 따라서 도약시작시 true가 되고 도약 애니메이션이 80프로 정도 됬을때 false가 되도록 하는 bool 변수를 joyStick 클래스에 만들어서 도약시에는 조이스틱터치가 먹히지 않도록 만들어주었고
   도약애니메이션인 Shot애니메이션에 Has Exit time을 체크해주어 애니메이션이 끝까지 재생되고 나서 다음 애니메이션으로 상태변화가 일어나도록 만들어 주었다. 

- 근접공격 사거리 meleeAtDst를 캐릭 고유 스텟으로 빼줌 --> 완료
   

-도약공격의 meleeAttack()에서 생성된 콜라이더는 몬스터가 맞지 않는 이상 그자리에 계쏙 존재하는 버그.., 바로 사라지도록 만들고, 이펙트도 다른 이펙트를 주고 싶다
 --> 완료 : 조우타이 전용 콜라이더인 ZhoutaiRangeCol 오브젝트 프리팹을 만들어주고 PlayerMelee스크립트를 달아준다 히트로직은
               PlayerMelee스크립트에 이넘으로 Range형식과 Melee형식을 구분지어 주고 Range형식은 생성하는 로직에서 사라지는 로직까지 연속적으로 구현해주도록하고
              Melee형식은 몬스터에 히트하면 사라지도록 몬스터의 OntirggerEnter로직을 따른다 외의 데미지 계산방식은 모두 몬스터의 OntriggerEnter에서 처리한다
               이처럼하면 Melee형식은 하나라도 몬스터맞는순간 사라지기에 단일공격이되고 Range형식은 일정시간 후에 사라지기에 복수공격이 된다

- 도약공격 이펙트를 3레벨로 나누어 준다



O디버그목록
- 동전버그 아직도 있음 ;; 플레이어쪾으로날아오다가 일정시간후에 사라지도록하자.. --> 일단 골드프리팹 스크립트를 while(playerSc.isMapClear && gameObject.activeSelf)으로 수정.. 지켜보자 --> 여전히 버그 발생..
- 조우타이의 shot스피드는 1로 유지하자 --> 완료


8/13할일
-씬을 하나 만들어서 캐릭터 선택창을 만들고 캐릭터 선택으로 인한 데이터를 파괴하지 않으면서 로딩씬을 거쳐서 인게임씬으로 넘어오는 것까지! --> 8/16 완료


 
8/17 -->완료
UI만들기에서
*부모가 자식들의 사이즈를 따라가게 만드는 Cotent Size Fitter 컴포넌트를 활용(Horizontal Layout Group등과 같이 사용)


8/18-->완료

-로비UI 완성 및 캐릭터선택 연결과 인게임이동 버튼 구현 완료

-레터박스용 블랙UI를 생성, 기존 몬스터HP UI를 생성할때 아래 코드를 참조하여 자식의 최상단에 위치하게하여
 레터박스용 블랙UI가 최하단에 위치하게하는 방식으로 몬스터HP를 가려줌(UI는 아래쪽에 위치할수록 UI가장 위쪽에 위치함)

GameObject를 생성하면 Herarchy에 들어가고, Canvas 의 Child로 추가된 GameObject 들은 제일 하위에 있는 Object 의 Image 가 가장 위에 보이게 됩니다. 그래서 Canvas 에 추가된 Object 순서를 바꾸고 싶다면 Sibling 순서를 바꿔줘야 하는데,
가장 위/아래로 이동시키려면 아래 API를 사용하면 됩니다.


transform.SetAsFirstSibling();
transform.SetAsLastSibling();


SetAsFirstSibling() 은 가장 아래에 그려지게
SetAsLastSibling() 은 가장 위에 그려지게.


8/19-->완료
- 플레이어 사망시 재시작버튼을 부활버튼으로 바꿔줌 -->완료 : 차후 부활 이펙트도 넣어줄 예정
- 3레벨을 찍은 스킬이 두개 이상있을때 다음슬롯에서 3레벨스킬을 제외한 다른스킬을 할당하는 과정에서 이미 3레벨을 찎은 스킬이 또 나오게 되던 경우를 수정해줌 => 특정값을 제외한 랜덤한 값 구하기 활용

8/23-->완료
- 기존 2번째 영혼스킬들을 버튼형 액티브스킬로 바꿔주기위해 영혼액티브스킬이 들어갈 스킬슬롯UI를 만들고, 슬롯머신에서 2번째 영혼스킬을 배울시에 하단의 스킬슬롯UI로 들어가도록 만들어줌
  , 동시에 영혼스킬종류에따라 스킬슬롯UI프레임 색도 같이 바꿔줌
- 4번째 스킬슬롯UI는 캐릭터 액티브스킬이 들어가게 하고 2번째 영혼액티브스킬은 최대 3개까지만 배울수 있도록하기 위해 4번째로 영혼액티브스킬을 슬롯머신에서 선택할시 "영혼액티브스킬은 최대3개만 습득 가능합니다"라는 팝업창을 띄워주도록 함

8/25 할일-->완료
- 스킬을 배운 영혼액티브스킬이 하단 UI에 올라와있게 되는데 해당 UI를 클릭시에 영혼이 스킬을 발사하도록 로직수정 -->진행중
    : 액티브스킬 쿨타임 및 쿨타임UI 구현(액티브스킬 연발사용 억제) --> 진행중
    : 패시브스킬도중에 액티브스킬을 사용해도 동시구형 가능하도록 구현



- 영혼액티브스킬을 기존 최대3개에서 최대2개로 조정하고 이후 나중에 영혼액티브스킬 최대보유량 증가 관련 아이템을 장착시 최대보유량이 +1 되는 형식을 구현
- 캐릭터액티브스킬UI와 차별성을 주기



​9/1-->완료
- 액티브스킬 돌릴때 시간텍스트 쿨타임은 문제가 없는데 실제 검정 이미지 쿨타임이 3초에 걸쳐 사라지는게 아니라 더 빨리 사라짐 ;; -> 완료
: //스킬쿨타임시간을 1초씩 줄여가면서 Text로 표시해주는 아래 함수때문에 상수로 고정되어야할 spritSkill2CoolTime 배열을 직접적으로 건드리기때문에
        //원래 스킬쿨을 저장
        float spiritSkillCool = spritSkill2CoolTime[index]; GameUi 스크립트 223줄에 이걸 추가했음 ㅎㅎ

9/6-->완료
- 영혼패시브 공격중에 영혼액티브 공격을 사용하면 영혼 액티브공격모션을 기다리다가 다 끝난 이후 영혼패시브공격이 다시 가동되도록 만듬 -> 완료

9/7 -->완료
- 모든 스킬 패시브와 액티브 스킬 구별 -->완료
- 차 후 어떤 아이템을 착용하면 잠겨있던 3번째 영혼애기브 스킬 선택창이 잠금해제 되도록 하기
: GameUi스크립트(하이라키창에서는 Canvas 오브젝트에 소속)에 영혼액티브 스킬을 배울 수 있는 최대 갯수를 나타내는 변수 int spiritActiveFullCnt;를 선언하고
 최대 액티브스킬 보유가능횟수가 기존2개에서 3개로 늘어나면 3번째 액티브스킬칸 잠금이미지를 비활성화하여 잠금해제 

if(GameUi.Instance.spiritActiveFullCnt==3)//
        {
            GameUi.Instance.spiritActiveBtnRockImg.gameObject.SetActive(false);
        } 
isSpritActiveFull = new bool[GameUi.Instance.spiritActiveFullCnt];//
아이템 착용시 위 로직을 적용시켜 줄예정 



9/9
***************앞으로 구현해야할 것들********************
(1) - 희귀20개, 영웅10개, 전설5개 등급의 장비Ui를 만들어 각 각의 장비마다 특수능력을 부여함
(2) - 로비의 장비템 관련 Tab에서 스테이지 진입시에 랜덤으로 등장할 장비템 10개를 로비에서 지정할 수 있는데 
       희귀 영웅 전설의 비율을 6:3:1로 하여 20개의 희귀장비템중 6개, 10개의 영웅장비템중 3개, 5개의 전설 장비템중 1개를 선택하도록 하고 스테이지 진입시에 확률적으로 선택한 장비템들 중 하나가 나오도록 할 예정   
(3) - 0스테이지, 5스테이지(천사),10스테이지(중보) ,15스테이지(천사),에서 장비템 기능 및 특정 스테이지에서 랜덤의 장비목록이 주어지고 그 중 하나를 장착 및 기존 장비와 교환가능하도록 npc 추가
       기본적으로는 (3)에서 선택한 10개의 장비중 확률적으로 나온 장비 1개만 선택할 수 있지만 천사방에서는 두개의 장비가 주어지고 그중 하나를 선택 및 교환할 수 있도록 할 예정
(4) - 기본적으로 캐릭터는 총 2개의 장비템을 장착할 수 있고 현재 장착중인 장비를 보여주는 settingUI를 추가 => TabUi를 만들어서 활용
(5) - 모든 스테이지에 몬스터를 생성



10/8-->완료
-로비창의 모든 소리를 제어할 AudioManiger 생성
-아티팩트를 관리할 ArtifactDB를 생성하여 생성자를 가진 Artifact클래스를 초기화해줌 => 희귀20개, 영웅10개, 전설5개 등급의 장비Ui를 만들어 각 각의 장비마다 특수능력을 부여함
-소지한 아티팩트, 착용중인 아티팩트등을 관리할 인벤토리와 관련된 HavingArtifactPanel생성
- HavingArtifactPanel의 자식으로 들어갈 각각의 아티팩트정보가 담긴 AritifactSlot 생성

10/12-->완료
- artifactSlots[i].ADDArtifact(ArtifactDB.Instance.artifactList[i]);으로 원하는 아티팩트 정보를 빈 아티팩트 슬롯에 등록할 수 있음
-WatchSpecification 함수를 통해서 소유중인 아티팩트를 클릭했을때 상세정보를 볼 수 있음
   => (상세 정보판넬을 띄울때 선택하 아티팩트의 이름 이미지 세부정보등을 전달해서 보여주고, 닫기or 등록 버튼을 누르기 전까지는 스크롤 기능을 제한해줌)

10/13-->완료
 - 아티팩트 셋팅창에 따로 스크립트를 추가(ArtifactSet)하여 탭기능 및 오디오 기능을 만들어줌(기존의 ArtifactSetManiger를 옮겨오고 기존의 아티팩트셋매니져 오브젝트는 삭제)
 - 아티팩트 셋팅창에 10개의 슬롯을 만들어주고 6:3:1 비율로 슬롯 등급을 색깔별로 가시화 해줌
 - 아티팩트 세부정보 창에서 등록하기를 눌렀을때 아티팩트 셋팅스크립트의 함수가 작동하여 셋팅창 슬롯이 비어있는지 확인하고 비어있다면 차례대로 등록되도록함
   (ArtifactSet스크립트에 등록하기 버튼관련 함수를 만들기위해 HavingArtifactPanel스크립트에서 관리하는 선택한아티팩트에 대한 정보를 가져옴)

10/14-->완료
 - 아티팩트 셋팅창의 슬롯마다 등급을 나누어 가시화해주었는데 지금까지는 등록하기를 누르면 앞에서부터 순서대로 등록이 된다
 - 총4개의 아티팩트셋팅창이 독립적으로 작용하여 각각 등록을 통해 다른 셋팅셋을 가지도록 만들어줌 (SetPanel 스크립트 추가 생성) SetPanel클래스를 객체로 하는 배열을 만들어줌

10/15 -->완료
 - 등급별로 등록가능제한횟수를 설정해두고 Text로 보여주자  
 - 이미 10개가 모두 등록되어있다면 같은등급에 한하여 기존 등록아티팩트와 교체할 수 있는 UI를 생성하고 교체하는 것까지 만들어주자  

10/18-->완료
-세팅창에서 착용중인 아티팩트 클릭시 세부정보 나오게 하기 + 스크롤 막기 + 등록하기 대신 삭제하기 버튼 생성하기
-교체하기 UI가 나왔다면 셋팅창에 존재하는 아티팩트를 눌렀을때 기존의 세부정보창이 뜨도록하는게 아니라 바로 교체목록 아티팩트와 교체되도록 만들어주자
  (SetPanel1안의 자식들인setArtifactslot각각의 버튼에 교체하기 관련된 함수를 추가해주고 교체하기창이 활성화 될 동안에는 기존 상위의 세부정보창을 보여주는 Onclick이벤트함수를 off로 스크립트 상에서 바꿔준다)

10/19-->완료
- 교체하기를 눌러서 교체한 이후 교체창이 닫히고 다시 셋팅창에 있는 아티팩트 이미지클릭시에 세부정보창이 나오는 것까지는 확인했으나
  이 후 세부정보창에서 삭제하기를 누르면 0번째 슬롯 아티팩트가 삭제됨:
  해결  => SetPanel스크립트 내부의 WatchSpecification함수에서 selectedArtifactSlotIndex = artifactSlotIndex;//선택한 아티팩트슬롯의 인덱스 를 //처리해놨었음..
- SetPanel1에만 적용되어있는 중임 => 모든 SetPanel에 적용완료
- 장착중인 아티팩트를 삭제하기위해 클릭하여 세부정보창을 띄우면 클릭한 아티팩트슬롯이 가지고 있는 아티팩트 등급정보가 바뀌어버리는 버그 
  : 해결 => 장착중인 아티팩트슬롯에는 Onclick이벤트 함수가 2개씩 붙어있는데(세부정보창 띄우기,교체하기) 두개의 이벤트함수중 한개만 런타임활성화가 되도록 해주어야 하기 때문에 두개의 이벤트함수의 활성화여부를 모두코드로 만져주어야함
 
10/21-->완료
- B,A등급 아이템 또한 임시보유중인아티팩트목록창에 나타나도록 만들어주고, B,A등급 아이템을 셋팅창에 등록할때 각 등급의 제한갯수 이상 등록이 불가하게만듬

10/25-->완료
- 각 등급의 제한갯수를 초과하여 같은 등급의 아티팩트를 등록하기버튼을 눌렀을때 같은등급제한횟수를 초과하여 등록할 수 없다는 에러패널이 활성화(교체하기버튼과 닫기 버튼 포함)
- 위 상황에서 교체하기 버튼을 누르면 교체하기UI가 나오도록 만듬 
- SetPanel스크립트 안의 교체하기 관련 코드를 ExchangePanelOn() 함수로 만들어줌

 10/26-->완료
- 교체할 대상은 같은 등급만 가능하도록 교체가능한 등급이 등록된 슬롯만 반짝거리도록 함 
   => //@@@까지 완료... 그런데 A등급으로 실험을 하고 있는데 반짝거리게 까지는 잘하고 있으나 실질적으로 교체하기를 눌렀을때 코루틴이 멈추게 했는데 파란색이 반짝거릴때 stopAllcourtine이 작동하면 
      여전히 파란색인 상태로 남아있음... 다시 원래색으로 바꾸게 하려면 또 조건문을 길게 사용해야하니... 차라리 각 슬롯위에 덮기용 오브젝트를 하나 만들어서 활성화 비활성화를 이용하는게 나을 거 같기도 함
   => 해결 : 덮기용 오브젝트를 슬롯에 만들어주었음

--***[버그] : 같은등급제한 횟수를 초과하여 등록하게 되어서 교체하시겠습니까를 물어보는 화면에서 셋팅창에 있는 아티팩트를 클릭하여 세부사항을 확인 한 이후 교체하기를 눌러서 교체를 하면 이전에 세부사항을 확인한 아티팩트로 바뀌어버림
   =>해결 :  아싸리 교체하기를 물어보는 ErrorPanel을 활성화 할때 셋팅창을 가려버려서 세부사항을 못보게 함

- 같은등급 이외의 등급 아티팩트와 교체하기 시도자체를 버튼 비활성화로 막아버림


11/1-->완료
 - 비어있는 아티팩트슬롯은 클릭이 불가능하도록 막아줌 =>완료

11/2-->완료
 - 기존아티팩트패널의 탭UI를 없애고 간단하게 상점패널, 캐릭터선택패널, 아티팩트패널, 월드패널, 잠금패널 로 만들어주기

11/4-->완료
 - 장착중인 아티팩트들의 정보가 인게임으로 씬전환될때 파괴되지않고 인게임내의 DonDestroy객체로 남아 있도록 만들어주기

11/8--> 완료(디자인 진행중)
 - 로비에서 장착중인아티팩트정보를 넘겨받은채로 인게임으로 넘어 왔을때 최초로 장착한 10개의 아티팩트중 2개가 랜덤으로 뽑혀서 선택지로 보여지고
   
11/9--> 완료
 - 위 후보군 아티팩트 둘 중 하나의 아티팩트를 선택했을때 해당 정보가 인게임의Setting메뉴를 클릭했을시 나오는 장착아티팩트목록에서 보여지도록 만들어주기
 - 랜덤선택지를 보여줄때는 아트팩트 이미지와 이름 설명 모두 보여주고
 - Setting메뉴에서는 장착아티팩트의 이미지만을 보여준다

11/12 --> 완료
 - 등록가능한 아티팩트를 2개로 만들어주고 나머지 2개의 창은 자물쇠로 잠궈준다
 - Setting메뉴에서의 장착아트팩트 이미지를 클릭시에 세부사항이 보이도록 세부사항 관련 UI를 만들어주고 세부사항UI를 닫는 버튼도 만들어준다


11/15--> 완료
 - 장착한 아티팩트가 이미 만땅으로 차있을때 후보군아티팩트 선택창에서 하나의 아티팩트를 선택하면 장착한 아티팩트와 교체하기를 할수있도록 교체하기 UI를 활성화한다
 - 교체하기 UI의 교체할 아티팩트 목록을 이미 장착중인 아티팩트슬롯의 정보에서 넘겨받아온다

 
11/16 ---> 완료
 - ArtifactSettingPanel 스크립트에 추가한 11/15자의 교체하기 UI를 활성화하고 이미 장착중인 아티팩트의정보를 가져와서 보여주는 로직부분을 후보군선택버튼 2개에 각각 삽입해 주었는데
    해당 로직은 공통되므로 함수화 시켜주자 
 - 장착중인 아티팩트이미지를 가져올때 자물쇠 이미지가 커진상태로 가져와지는데 크기가 적당히 조절되도록 만들어주자
 - 교체하기 UI에서 교체할 아티팩트를 클릭했을때 실제 셋팅창의 장착중인 아티팩트가 바뀌도록 로직을 구성해준다 + 교체하기UI창 닫아주기


11/17 ---> 완료
 - 교체하기UI창에서 자물쇠로 잠겨있는 이미지는 클릭할 수 없도록 만들어 준다
 - 교체하기UI창에서 장착중인 아티팩트를 클릭시 세부사항을 보여주는데 장착중인 아티팩트가 없거나(background이미지) 혹은 자물쇠로 잠겨있는(자물쇠 이미지)라면 클릭해도 무반응이되도록 만들어줌
 - 후보군 아티팩트 둘중 하나를 선택했을시에 후보군아티팩트선택UI창을 닫아준다
 - 테스트 편의성을 위해 자동으로 아티팩트 셋팅슬롯을 각 등급별 장착가능최대갯수에 맞게 채워주는 AutoSetting버튼을 만들고 로직을 구현


11/22 ---> 진행중
 - 장착슬롯에 어떠한 아티팩트(이름)이 들어가 있는지에 따라 실제로 인게임에서 그 효과가 발생될 수 있도록 아티팩트 이름과 관련지어 각각의 인게임효과를 발생시킬 데이터베이스를 만들어 주고 실제 적용까지 해본다
 - 아티팩트 효과로 영혼 액티브 쿨타임이감소 되었을때 소수점쿨타임이 1.0 아래로 떨어지면 소수점이하 자릿수가 더 생기는 현상 수정

12/8 
 -16개의 아티팩트장착 효과 구현
 - ******* IngameTest 를 검색하여 나오는 부분을 스크립트수정하면 인게임부터 시작하여 오류없이 테스트 가능 *****
                                -******* 인게임부터 시작이아닌 최초게임시작시부터 할때 *********_
 - ******* 미리 2개의 캐릭터모두 비활성화 한 상태에서 시작해야 버그 없음,, 테스트단계인 현재는 조우타이를 처음부터 활성화 해두고 시작하고 있음
 - ******* Canvas에서 SettingPanel을 활성화 시킨 상태에서 시작해야 버그 없음,, 

 ● 보완해야할 부분
 -##아티팩트 장착시 효과를 적용하는 부분은 완성되어가고있으나 다른 아티팩트로 교환하여 기존 아티팩트가 해제되었을때 그 효과를 잃어버리도록 코드를 추가할 예정
 - 패시브스킬 공격력증가 10%효과를 포함하여 비슷한 효과를 주는 아티팩트의 경우 현재 캐릭터데이터에있는 패시브스킬공격력자체를 건드려주게 되는데 이는 패시브스킬1레벨일때 해당아티팩트를 가진상황에서 2레벨로 업그레이드하면 문제가 생김
 - 여전히 몬스터 처치시 드랍되는 코인이 플레이어와 온트리거 되지 않는 경우가 발생.. 
 - 아머업그레이드시 잃은체력비례 회복과 동시에 최대체력도 증가하는데 최대체력 자료형을 flaot로 최근에 바꿔주었기 때문에 최대체력이 소수점이 되버리는데 이를 조정하여 최대체력은 int형으로 만들어주기
 - fire1,2스킬 ice1,2스킬 lightining1,2스킬 외의 스킬들은 아직 레벨이 증가함에 따라 데미지도 증가하는 로직을 넣지 않은 상태임(슬롯머신스크립트)
 - 보스를 아직 미구현해서.. 보스추가뎀지 같은 보스관련 아티팩트효과는 아직 미구현
 - 5초마다 5초간 공속 및 공격력 증가하는 아티팩트에서 가시성을 위한 이펙트를 구현해야할 듯

12/15
-액티브스킬쿨타임이 적용되지 않는버그 발생.. --> 12/16완료


12/20
 - lightning1스킬에 몬스터가 3타이상 피격시 경직효과 추가 --> 12/20 완료

12/27
 - 화염손길 아티팩트로 fire2스켈레벨을 올리면 다른건 괜찮은데 +1효과로 fire2스킬 레벨이 3인 경우에도 룰렛돌리면 fire2가 나오는거를 수정할 필요가 있음 
 
12/29
 - 불의권능아티팩트를 소지했을때 2번째 배우면 중복제거로직이 한번더 발생하도록했는데 한번 실행된 이후 게쏙 실행되는 버그 있음 -->12/31 완료