(4) 카드 움직임 개선, 상점 기능#1
<카드 움직임 개선>
(1) 기본 시스템 개발 - 1 (카드관리, 카드 움직임, 핸드족보, 버리기버튼)
가장 먼저 해야할 것은 게임의 기본 베이스가 될 시스템을 개발하는것이다갤럭시볼을 만들땐 이것저것 완전 처음부터 시작했겠지만 이번엔 조금 더 진도를 팍팍 나가보겠다사실 개발이 어느정
sangeun00.tistory.com
예전에 올린 글을 보면 카드를 클릭하여 드래그를 하면 오로지 x축으로 왼쪽 오른쪽 이동만이 가능했다
하지만 더 자유로운 카드 이동을 위해서 y축 이동까지 지원해주도록 하겠다
if (isDragging)
{
// 마우스 위치로 카드 이동 (X, Y 모두 이동)
Vector3 currentMousePosition = mainCamera.ScreenToWorldPoint(Input.mousePosition);
Vector3 newPos = new Vector3(currentMousePosition.x + dragOffset2D.x, currentMousePosition.y + dragOffset2D.y, transform.position.z);
transform.position = newPos;
}
간단하다 그냥 x축 말고도 y축까지 드래그 도중에 이동할 수 있게 해주면 되는것
그때도 분명 이걸 했었다가 무슨 이유로 잠시 빼놨던것 같은데 왜 그랬을까...
void OnMouseUp()
{
if (isDragging)
{
isDragging = false;
isDragStarted = false;
// 카드 재배치 (드래그가 끝난 후에만 재배치)
// deckManager.RearrangeCards(this); // this 매개변수 제거
// 선택된 상태에 따라 Y 위치 결정
Vector3 targetPosition = originalPosition;
if (isSelected)
{
targetPosition.y = -2f; // 선택된 상태의 Y 위치
}
else
{
targetPosition.y = -2.5f; // 기본 Y 위치
}
// 부드러운 이동을 위해 DOTween 사용
StopCurrentAnimation();
transform.DOMove(targetPosition, 0.2f).SetEase(Ease.OutQuad)
.OnComplete(() => {
// 이동이 완료된 후 originalPosition 업데이트 (Y 위치는 유지)
originalPosition = transform.position;
});
}
당연히 클릭을 떼는 순간 원래 있는곳으로 x,y축이 돌아와야 하므로 부드럽게 제자리를 돌아오도록 해주었다
이제 y축으로도 자연스럽게 움직이며 드래그하는 카드의 x축 값에 따라 양옆의 카드들이
자연스럽게 이동하는것을 확인할 수 있다!
<보유 재화 표현>
원래는 조커 카드를 만들어주려고 했으나....
상점이동 > 조커 생성 > 조커 구매 > 조커 기능
이 순서대로 진행이 되기 때문에 무작정 조커를 만들기 보다는 이 순서대로 개발하는게 맞겠다 생각이 들었다
그러니 상점 기능부터 한번 만들어보도록 하자!
상점에서 가장 많이 사용되는것은 돈이자 변수 Money이기 때문에 우선 이 부분을 좀 다듬어 보겠다
public int money;
public TextMeshProUGUI moneyText;
....
moneyText.text = money.ToString("N0");
money라는 int 타입 변수를 moneyText 텍스트 파일 안에 보여주는 간단한 코드
여기서 ToString안에 있는 "N0"이란 숫자를 천 단위로 쉼표(,)를 넣어서 "1,000"처럼 표시해 주는 기능이다
난 여기에다 숫자 앞에 $ 달러싸인을 넣고 싶은데
moneyText.text = money.ToString("$" + "N0");
이렇게 원하지 않는 결과가 나와버리고 말았다.
이럴땐 크게 두가지 방법이 있는데
1. 통화 형식 사용하기
using System.Globalization;
....
moneyText.text = money.ToString("C0", CultureInfo.GetCultureInfo("en-US"));
이런 방법이 가능하다... 말그대로 US의 통화방식을 사용하도록 하는것...
주의할건 CultureInfo를 사용하고 싶다면 Globalization을 가져와야한다
그리고 이것만큼 비효율적인 방법이 없다.
2. 그냥 문장 앞에 "$" 붙이기
moneyText.text = "$" + money.ToString("N0");
이게 훨씬 더 간단하다.
사실 별거 아닌 내용이긴 한데 그냥 저런 통화 형식이 있다는걸 적어보고 싶어서 짚어본것이다
둘 중 어떤것을 사용하던 결과는 똑같이 이렇게 나온다
<상점 기능>
이제 본격적으로 상점 기능을 만들어보도록 하자
진짜 임시로 존재만 만들어둔 캐시아웃 박스와 상점 박스. 디자인부터 바꿔주도록 하겠다
근데 한가지 문제가 생겼다
실시간으로 드래그가 가능한 조커 카드는 오브젝트 요소인데
상점창은 UI 요소라는것.....
어떡해야하나 고민중이다. 조커카드를 UI 요소로 바꾸거나 상점창을 오브젝트 요소로 바꿔야하는데....
일단 후자로 하면 지금 여태 만든걸 싹 다 처음부터 다시 만들어야 하는데 그럼 내 정신이 나가버리지 않을까?
그렇다고 전자로 하기에는 게임 구현하는게 너무 어려워질것 같다...
일단 고민좀 해보면서 오늘글은 여기까지 써야겠다 아이고 머리야