반응형
SMALL
- 아이템 비교기능 추가
- 필드에서 생성된 아이템을 길게 클릭시 팝업
- 이후 인벤토리의 현재 장비들과 비교하여 더 높은 등급 혹은 낮은 등급 혹은 같은 등급들만 있을시를 상정하여 비교. 이후 다운 화살표와 업 화살표로 유저에게 직접 인벤토리를 열지 않아도 비교할수 있는 기능을 추가
- 기존 장비들보다 더 높은 등급들만 있을시 업 화살표
- 기존 장비들과 동일한 등급의 장비일시 아무런 표시 없음
- 기존 장비들보다 낮은 등급의 무기일시 다운 화살
코드
private void CheckGrade(string name)
{
var list = default(List<string>);
EventDispatcher.Instance.Dispatch<List<string>>(EventDispatcher.EventName.UICurrentInventoryList, out list);
// 아이템이 꽉차지 않았거나 아예 없을 때
if (list.Count == 0 || list.Count != InfoManager.instance.inventoryInfo.InventoryCount)
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
return;
}
bool hasWood = false;
bool hasIron = false;
bool hasGold = false;
bool hasDiamond = false;
foreach (var item in list)
{
if (item.Contains("Wood"))
{
hasWood = true;
}
else if (item.Contains("Iron"))
{
hasIron = true;
}
else if (item.Contains("Gold"))
{
hasGold = true;
}
else if (item.Contains("Diamond"))
{
hasDiamond = true;
}
}
// 아이템 종류에 따라 활성화 상태 설정
if (name.Contains("Wood"))
{
if (!hasWood) // 우드가 없을때
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(true);
}
else
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(false);
}
}
else if (name.Contains("Iron"))
{
if (!hasWood && !hasIron) // 우드와 아이언이 없을때
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(true);
}
else if (!hasGold && !hasDiamond && !hasIron) // 전부 우드일때
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else if(hasWood) // 우드가 하나라도 있을때
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else // 그 외
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(false);
}
}
else if (name.Contains("Gold"))
{
if (!hasWood && !hasIron && !hasGold) // 다이아 만 있을때
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(true);
}
else if (!hasGold && !hasDiamond) // 다이아와 골드가 없을때
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else if (hasWood || hasIron) // 우드와 아이언만 있을떄
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(false);
}
}
else if (name.Contains("Diamond"))
{
if (!hasDiamond) // 다이아 몬드가 없을떄
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else if (hasDiamond && (hasGold || hasWood || hasIron)) // 다이아 몬드가 하나라도 있을때
{
this.imgPlus.SetActive(true);
this.imgminus.SetActive(false);
}
else if (!hasGold && !hasWood && !hasIron) // 다이아몬드만 있을떄
{
this.imgPlus.SetActive(false);
this.imgminus.SetActive(false);
}
}
}
- 인벤토리 로직 변경
- 이벤트 디스패쳐를 이용하여 활성화되지 않은객체에서 코루틴을 사용하는 것이 안되기 때문에 한 프레임을 건너 뛰어야 하는 애로사항이 발생하여 UI인벤토리 디렉터에게 메서드를 추가하여 코루틴실행 및 인포 저장
- 이제 언제든 무기를 버리거나 혹은 아이템을 구매시에 인벤토리에서 저장 로직을 구현, 성소(마을) 에서의 유저 행동은 전부 기록되어 무기를 버리거나 혹은 구매하거나 혹은 다시 주워도 그대로 저장, 다음 던전을 들어가기 전까지 유지
코드
public void startCoCoInvenInfoSave()
{
this.StartCoroutine(this.CoInvenInfoSave()) ;
}
private IEnumerator CoInvenInfoSave()
{
yield return null;
var list = default(List<string>);
EventDispatcher.Instance.Dispatch<List<string>>(EventDispatcher.EventName.UICurrentInventoryList, out list);
InfoManager.instance.UpdateEquipmentInfo(list);
}
그외 재화 UI 가시성 상향 및 애니메이션 추가
코드
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinSpinner : MonoBehaviour
{
public void Init()
{
this.transform.DOLocalRotate
(new Vector3(0, 360f, 0f), 2f * 2, RotateMode.LocalAxisAdd)
.SetEase(Ease.Linear)
.SetLoops(-1);
}
private void OnDisable()
{
this.transform.DOKill();
}
}
유저가 행동하는 것 하나하나 전부 빈틈없이 로직을 구현하려다 보니 빠진 구멍을 메우고 구명이 있는 로직을 매꾸느라 생각보다 고민을 많이 하게 되었다.
앞으로 퀄업 기간을 조금 더 거치겠지만 이렇게 유저에게 불합리하거나 불편한 부분들을 하나하나 씩 개선해 나가야 겠다.
반응형
LIST
'프로젝트 > 건즈앤 레이첼스' 카테고리의 다른 글
[유니티 프로젝트] 유니티 기종별 UI 해상도 대응 (화면 베젤과 UI 간의 간격 자동 조절(expand 옵션 과 앵커 활용) (0) | 2023.05.27 |
---|---|
유니티 2D 글로우 효과 쉽게 적용하기! + 회복 이펙트 추가 (0) | 2023.05.25 |
[유니티 프로젝트] UNIRX 를 이용한 월드 아이템 팝업 구현 (0) | 2023.05.23 |
[유니티 프로젝트] 미니맵 기능 추가 및 필드 재화 & 에테르 재화 연출 및 획득 연출 & 인벤토리 아이템 획득 연출 (0) | 2023.05.21 |
[유니티 프로젝트]2023.05.17 플레이어 hit 연출, 아이템 획득 연출 추가, UniRX 및 DoTween 사용 (0) | 2023.05.18 |