[💬]
아까 코드 고쳐달라던 사람 봐봐
구급상자(vgundam14)
2025-02-27 13:03:00
추천 1
using System
.Collections
.Generic
;
using UnityEngine
;
public class table_script
: MonoBehaviour
{
public Dictionary
<int, int> collisionInfo
= new();
public List
<sample_script
> collidedCardList
= new();
// 충돌 시 호출되는 함수
private void OnTriggerEnter2D(Collider2D other
)
{
sample_script sampleScript
= other
.GetComponent<sample_script>();
if (sampleScript
!= null)
{
int number
= sampleScript
.number
;
// 이미 충돌 정보가 존재하지 않으면 추가
if (!collisionInfo
.ContainsKey(number
))
{
collisionInfo
.Add(number
, 1);
Debug
.Log($
"충돌 정보 저장: number={number}, quantity=1");
}
else
{
// 충돌 정보가 있으면 수량 증가
collisionInfo
[number
]++;
Debug
.Log($
"충돌 정보 갱신: number={number}, quantity={collisionInfo[number]}");
}
if (other
.gameObject
.CompareTag("cards"))
{
//이름을 저장하는게 아니라 스크립트(오브젝트) 자체를 저장
//보니까 모든 카드엔 sample_script 가 달려있는 것 같아서 여기로 옮김
collidedCardList
.Add(sampleScript
);
Debug
.Log($
"충돌 카드 저장: {other.gameObject.name}");
}
}
}
// 충돌 종료 시 호출되는 함수
private void OnTriggerExit2D(Collider2D other
)
{
sample_script sampleScript
= other
.GetComponent<sample_script>();
if (sampleScript
!= null)
{
int number
= sampleScript
.number
;
if (collisionInfo
.ContainsKey(number
))
{
collisionInfo
[number
]--;
// 수량이 0이 되면 제거
if (collisionInfo
[number
] == 0)
{
collisionInfo
.Remove(number
);
Debug
.Log($
"충돌 정보 제거: number={number}");
}
else
{
Debug
.Log($
"충돌 정보 갱신 (감소): number={number}, quantity={collisionInfo[number]}");
}
if (other
.gameObject
.CompareTag("cards"))
{
collidedCardList
.Remove(sampleScript
);
Debug
.Log($
"충돌 카드 삭제: {sampleScript.gameObject.name}");
}
}
}
}
// 조합 시도하는 함수
public void Combination()
{
Debug
.Log("조합 시작");
Object
[] prefabs
= Resources
.LoadAll("Cards/Objects", typeof(GameObject
));
foreach (Object prefab
in prefabs
)
{
Debug
.Log($
"조합 시도: {prefab.name}");
if (prefab
is GameObject cardPrefab
)
{
object_script needsScript
= cardPrefab
.GetComponent<object_script>();
if (needsScript
!= null && needsScript
.Needs_number
!= null && needsScript
.Needs_quality
!= null)
{
for (int i
= 0, iMax
= needsScript
.Needs_number
.Count
; i
< iMax
; i
++)
{
int number
= needsScript
.Needs_number
[i
];
// 충돌 정보가 있는지 확인
if (collisionInfo
.ContainsKey(number
))
{
if (i
< needsScript
.Needs_quality
.Count
&& collisionInfo
[number
] >= needsScript
.Needs_quality
[i
])
{
Debug
.Log($
"성공: {cardPrefab.name}");
// 조합 성공 시 카드 생성
GameObject newCard
= Instantiate(cardPrefab
, transform
.position
+ new Vector3(10, 0, 0), Quaternion
.identity
);
newCard
.transform
.SetParent(transform
.parent
);
// 조합에 사용된 카드 제거
RemoveCollidedCards(needsScript
);
return;
}
}
else
{
Debug
.Log($
"{cardPrefab.name} prefab에 충돌 정보가 없습니다.");
}
}
}
else
{
Debug
.LogWarning($
"{cardPrefab.name} prefab에 object_script 컴포넌트가 없거나 Needs_number/Needs_quality 리스트가 설정되지 않았습니다.");
}
}
}
Debug
.Log("조합 실패");
}
// 충돌한 카드를 제거하는 함수 (collidedObjectNames 사용, Needs와 Quality 참조)
private void RemoveCollidedCards(object_script needsScript
)
{
if (needsScript
== null || needsScript
.Needs_number
== null || needsScript
.Needs_quality
== null)
{
Debug
.LogError("needsScript가 제대로 설정되지 않았습니다.");
return;
}
//제거 해야 할 카드 목록 변수 선언
List
<sample_script
> cardsToRemove
= new();
for (int i
= 0, iMax
= needsScript
.Needs_number
.Count
; i
< iMax
; i
++)
{
int number
= needsScript
.Needs_number
[i
];
int quality
= needsScript
.Needs_quality
[i
];
int count
= 0;
// collidedObjectNames에서 number와 일치하는 카드 찾기
foreach (sample_script card
in collidedCardList
)
{
if (card
!= null && card
.number
== number
)
{
//찾은 카드 저장
cardsToRemove
.Add(card
);
count
++;
if (count
>= quality
)
{
break;
}
}
if (count
>= quality
)
{
break;
}
}
}
// 찾은 카드들 제거
for (int i
= 0, iMax
= cardsToRemove
.Count
; i
< iMax
; i
++)
{
sample_script card
= cardsToRemove
[i
];
if (card
!= null)
{
int number
= card
.number
;
if (collisionInfo
.ContainsKey(number
))
{
collisionInfo
[number
]--;
if (collisionInfo
[number
] == 0)
{
collisionInfo
.Remove(number
);
}
}
Debug
.Log($
"충돌 정보 제거: number={number}");
collidedCardList
.Remove(card
);
Destroy(card
.gameObject
);
}
}
}
}
대충 이렇?게 하면 될 것 같은데 함 츄라이 츄라이
댓글 1