공격취소되엇다면, 다시 공격할수잇도록[ ]
내턴일때만 공격(화살표 나올수잇도록) [ ]
튻수능력(데미지를 1씩만 받습니다등)
<일단 이건 나중에 생각하자[ ]
근데 화살표로 공격되게하면,
치유하는 하수인은, 어케 하지, <이건 뭐 전투의 함성이니깐,,
(그리고 자기턴 한턴 지난 다음부터는 무조건 공격만 되게하고, )
전함은 그 낸턴이니깐, 회복시킬수있는건가
[ ]
나중에 '돌진(Rush/Charge)' 능력을 가진 카드를 만들고 싶다면, 소환할 때 minion.canAttack = true;라고만 해주면 됩니다.
공격하고 되돌아옴<아마 예외처리 많이 필요하겟지
이미 필드에 잇는 하수인을 한번 클릭하면 화살표가 나오게 하고싶은데, 그리고 목적지를 선택하면 그곳으로 돌진햇다가, 원래 자리로 돌아오는,
필드마법(아군 전체 생명력 +1/2)[ ]
📌 일단, 화살표가 어떻게 생기는지 원리부터
(화살표로 적 클릭하면 공격하도록 하려면 )
1단계: "활을 집어 들기" (클릭 시작)
- 상황: 내가 조종하는 미니언(하수인)을 마우스로 '딸깍' 클릭합니다.
- 하는 일:
- 숨겨져 있던 화살표 이미지를 화면에 나타나게 합니다.
- 컴퓨터에게 **"이제부터 화살표가 마우스를 따라다녀야 해!"**라고 신호를 줍니다 (isTargeting = true).
2단계: "조준하고 시위 당기기" (매 순간 업데이트)
마우스를 움직일 때 화살표가 실시간으로 길어졌다 짧아졌다 하며 마우스를 따라가는 단계입니다. 세 가지 계산을 아주 빠르게(초당 60번 이상) 반복합니다.
- 뿌리 고정: 화살표의 시작점은 항상 내 하수인 위치에 딱 붙어 있습니다.
- 방향 돌리기 (회전): 마우스가 어디에 있든 화살표 머리가 마우스를 향하게 휙휙 돌립니다. (수학적으로 Atan2라는 공식을 써서 각도를 잽니다.)
- 길이 늘리기 (신축): 하수인과 마우스 사이의 거리가 멀어지면 화살표 이미지를 쭉~ 늘립니다. 마치 고무줄처럼요. (sizeDelta라는 값으로 이미지의 길이를 조절합니다.)
3단계: "화살 쏘기 또는 포기하기" (결정)
조준이 끝났을 때의 행동입니다.
- 공격 (좌클릭): 마우스 위치에 적(영웅이나 상대 하수인)이 있다면?
- "너 맞았어!"라고 신호를 보냅니다 (TakeDamage).
- 상대방 체력이 깎입니다.
- 취소 (우클릭): "아, 공격 안 할래." 하고 우클릭을 누르면?
- 나타났던 화살표를 다시 숨기고 모든 상태를 초기화합니다.
하지만 나중에 '필드 장부'가 필요해질 때가 있을까요?
나중에 게임이 복잡해져서 다음과 같은 효과를 만들고 싶다면 **'필드 리스트'**도 관리해야 할 수 있습니다.
- 예시 1 (광역기): "모든 적 하수인에게 데미지 2를 줍니다." -> 필드 리스트를 훑으며 데미지를 줘야 함.
- 예시 2 (전체 버프): "내 모든 하수인에게 공격력 +1을 줍니다." -> 내 필드 리스트를 훑어야 함.
만약 나중에 이런 기능을 넣게 된다면, 그때는 FieldManager 같은 걸 만들어서:
- 소환될 때: fieldList.Add(this)
- 죽을 때: fieldList.Remove(this)
하는 로직이 추가되겠지만, 지금은 하이라키(부모-자식 관계)만으로도 충분합니다.
📌 일단 공격하면 데미지 주고 하수인의 공격력, 생명력 바뀌도록[ 완료 ]
<이것 자체는 hp-=enemyAttackPower하면됨
📌 그전에 적 캐릭터 인식이 안되는 문제부터 있엇음

왜 이 방식이 더 좋은가요?
- Camera-Overlay 완벽 대응: Physics2D는 월드 좌표와 Z축 값을 신경 써야 하지만, RaycastAll은 화면에 보이는 UI 레이어 순서대로 감지하므로 헷갈릴 일이 없습니다.
- Collider가 필요 없음: 적 카드에 BoxCollider2D를 붙이지 않아도, 이미지의 **Raycast Target**만 켜져 있으면 감지됩니다.
- 유연함: 하수인뿐만 아니라 영웅 초상화, 버튼 등 모든 UI 요소를 동일한 방식으로 체크할 수 있습니다.
2. 코드에서 꼭 체크해야 할 점 (주의사항)
이 코드가 정상 작동하려면 유니티 에디터에서 다음을 확인하세요:
- 공격 대상(적 하수인, 적 영웅)의 Image 컴포넌트:
- Raycast Target 옵션이 반드시 체크(ON) 되어 있어야 합니다.
- 화살표 이미지(UI_Arrow):
- 화살표 이미지는 마우스 위치 바로 아래에 있게 됩니다. 이 화살표가 마우스 클릭을 가로막으면 적 하수인이 클릭되지 않을 수 있습니다.
- 따라서 화살표(UI_Arrow)의 Image 컴포넌트에서는 Raycast Target을 꺼야(OFF) 합니다. (혹은 화살표의 Canvas Group에서 Block Raycasts를 끕니다.)
- Canvas의 Graphic Raycaster:
- 카드가 들어있는 Canvas 오브젝트에 Graphic Raycaster 컴포넌트가 붙어 있어야 합니다. (기본적으로 붙어 있습니다.)
RaycastAll은 이름 그대로 마우스 위치에 겹쳐 있는 모든 UI를 위에서부터 아래로 꼬챙이처럼 뚫고 지나가며 리스트에 담아줍니다.
이때 리스트에 들어가는 순서와 처리 방법은 다음과 같습니다.
1. 리스트에 담기는 순서 (정렬 기준)
RaycastAll이 반환하는 List<RaycastResult>는 **눈에 보이는 우선순위(Sorting Order)**가 높은 순서대로 0번, 1번, 2번...에 들어갑니다.
- Canvas Sorting Order: 숫자가 높은 캔버스가 먼저 담김.
- Hierarchy 순서: 같은 부모 아래에 있다면, 아래쪽에 있는 오브젝트가 먼저 담김 (UI는 아래에 있을수록 화면상 위에 보이기 때문).
- Z값: Screen Space - Camera나 World Space라면 카메라와 가까운 것이 먼저 담김.
2. 여러 개 겹쳤을 때의 해결책: "필터링"
겹쳐 있는 것 중 내가 원하는 것만 골라내는 것이 핵심입니다. 작성하신 코드의 foreach 문이 바로 그 역할을 하고 있습니다.

다른 함수 이용하니깐 해결됫네
📌 현재 딱 한번만 공격가능[ 완료 ]
📌 낸턴에는 공격못하고, 그다음 턴에 공격할수잇게 하려면 turn manager이랑 연동해야할것같은데 [ 완료 ]
- 낼 때는 공격권을 뺏고 (false)
- 내 턴이 시작될 때 공격권을 다시 준다 (true)
📌 (아직 공격력 0인 하수인도 공격할수있음)[ ]
왜 TurnManager보다 MinionAttack이 좋은가요?
만약 TurnManager에서 턴 시작 시 공격력이 0인 하수인의 공격권을 뺏어버리면 다음과 같은 문제가 생깁니다.
- 버프 상황: 턴 시작 시에는 공격력이 0이었는데, 주문 카드나 다른 하수인의 효과로 이번 턴에 공격력이 1 이상이 되어도 공격을 못 하게 됩니다.
- 실시간 반영: 하스스톤 같은 게임은 공격력이 실시간으로 변하기 때문에, **"공격을 시도하는 그 시점"**에 공격력이 있는지 확인하는 것이 가장 정확합니다
'개발 > 하스스톤+전장' 카테고리의 다른 글
| 하스+전장) draggable .cs, carddraw.cs 해석 (1) | 2026.01.27 |
|---|---|
| 하스+전장) 인터페이스,제네틱 쓰는 이유 (0) | 2026.01.26 |
| 하스+전장) 성능개선(하이아키에서 찾기> list로 찾기) (0) | 2026.01.25 |
| 하스스톤+전장)하수인 공격할수잇게 (1) | 2026.01.14 |
| 하스스톤+전장) 코드, 메커니즘 이해2/ 영웅추가 (0) | 2026.01.14 |