골드메탈님 퍼즐게임 03
unity 유니티 공부 2025. 11. 9. 14:29 |
https://www.youtube.com/watch?v=RvDaDt-469E&list=PLO-mt5Iu5TeajtA5UQT7_2UjB7_dkGagU&index=3
덩어리 합치기
OnCollisionStay2D
물리 충돌 중일 때 발동 함수
우리는 벽, 바닥 충돌이 아닌
동글 끼리 부딪칠 때만 발동하게 하려 함
그래서 if 문을 씀
if (
level == other.level
&& ! isMerge
&& ! other.isMerge
&& level <7
)
지금 이 동글이 옆에 다른 동글 하나랑 레벨이 같을 때,
근데 합쳐지는 중이 아니어야 함
옆에 다른 동글도 합쳐지는 중이 아니어야 함
레벨은 7 미만 이어야 함
&& 넣어서 길게 만드는 이유
버그를 피하기 위해서임
float meX = transform.position.x;
float meY = transform.position.x;
float otherX = other.transform.position.x;
float otherY = other.transform.position.y;
// 나와 상대편 위치 가져오기

이거 또는 저거
구현할 때
묶고 싶다면 소괄호 ( ) 를 사용해서 구분하자
public void Hide()
{
isMerge = true;
rigid.simulated = false;
circle.enabled = false;
}
동글이 흡수될 때
흡수되는 쪽을 가린다 는 로직
public void Hide(Vector3 targetPos)
{
}
여기서
Vector3 형식의 targetPos 를 새로 변수로 만들었다
라는 뜻임
isMerge = false;
gameObject.SetActive(false);
Hide 의 마무리로 머지도 펄스,
오브젝트 도 비 활성화 함
IEnumerator LevelUpRoutine()
{
yield return new WaitForSeconds(0.2f) ;
anim.SetInteger("Level", level + 1);
yield return new WaitForSeconds(0.3f);
level++;
애니메이션으로 레벨업 하고
실제 레벨업 도 함
따로따로 텀을 두고 설정 해야 애니가 재생이 됨
+
보정하기

Project Settings - Physics 2D - Auto Sync Transforms
물리 기반 게임이면 여기에 체크 온
실제 물리 계산과
보여지는 물리 화면이 일치하게 보정 시키겠다는 뜻
+
Dongle.cs 는 인스펙터 창에서 변수 못 지정하는데
타 스크립트 의 변수를 쓰는법?
GameManager.cs 파일에서
lastDongle.manager = this;
Dongle.cs 파일에서
public GameManager manager;
이렇게 연결 지을 수 있다 함.
this → “지금 이 스크립트(GameManager 자신)”
Dongle이 GameManager를 알 수 있게 하는 코드
(두 스크립트 간 변수 뛰어넘기 이긴 한데..)
(복잡해서 잘 모르겠음)
+
Mathf.Max(level, manager.maxLevel );
괄호 안 두 값 중 큰 거만 쓰겠다
+
동글 끼리 흡수 할 때
if (meY < otherY
|| (meY == otherY && meX > otherX)
)
이러면 너무 빡빡하니까
if (meY < otherY
|| (meY == otherY && meX > otherX)
|| (Mathf.Abs(meX - otherX) <= 0.7f) // 0.f 는 좌표 보정. 더 잘 흡수되게
|| (Mathf.Abs(meY - otherY) <= 0.7f)
)
이렇게 || OR 문구를 더 넣어서
추가 보정을 넣었다
이러면 서로 거리차가 나더라도
약간 더 잘 흡수가 잘되게 됨
