골드메탈님 퍼즐게임 05 게임 오버
unity 유니티 공부 2025. 11. 13. 17:16 |
골드메탈님 퍼즐 5
https://www.youtube.com/watch?v=p-gsoqgn8C8&list=PLO-mt5Iu5TeajtA5UQT7_2UjB7_dkGagU&index=5
Mathf.Pow(2, level);
뜻 거듭제곱
레벨이 0이면 1
레벨이 1이면 2
레벨이 2이면 4
레벨이 3이면 8
레벨이 4이면 16
manager.score += Mathf.Pow(2, level);
근데 이럴 때 int 와 float 형 차이 오류 뜨면
manager.score += (int)Mathf.Pow(2, level);
이렇게 강제 int 형으로 형 변환

이 게임의 게임 오버 는 PlayGround 아래의 Line 에
동글이 넘칠 때 발동하게 할거임
박스 콜라이더 쓸 거임

Line 오브젝트의 Tag Finish 로 설정
void OnTriggerStay2D(Collider2D collision)
{
if (collision.tag == "Finish")
{
}
}
콜리전 충돌이 지속할 때 발동,
그리고
태그가 Finish 일 때 발동
private float deadTime;
시간을 다룰 거라서 소수점 변수 하나 생성
deadTime += Time.deltaTime;
게임이 실행되는 시간을 누적시키는 변수가 되겠다
시간제한 , 지속시간 을 체크하는 데 씀
변수 새로 만들기 = 선언 = 초기화 = 추가 =
Initialization
Add
Declaration
Appending
Assignment


게임매니저 에서 GameOver ( ) 함수를 만든후
동글 스크립트 에서 그 함수를 실행함
private SpriteRenderer spriteRenderer;
//스프라이트 담을 변수 추가
void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>();
}
// 스프라이트 변수 컴포넌트 초기화
if (deadTime > 2)
{
spriteRenderer.color = new Color(188f / 255f, 62f / 255f, 123f / 255f, 1f);
}
// 내가 지정한 빨간색으로 컬러 덧씌우기
테스트 해봤는데
동글이 빨간색으로 안 변한다

Rigid body 2d 컴포넌트를 보게 되면
Sleeping mode 가 있다
물리 연산을 멈추고 쉬겠다 라는 뜻임
이거 잘못 설정하면 색깔 안 바뀜

프리팹 폴더의 동글의 리지드바디 2디 컴포에서 Sleeping mode never sleep 으로 바꿔야 함
void OnTriggerExit2D(Collider2D collision)
{
if (collision.tag == "Finish")
{
deadTime = 0;
spriteRenderer.color = Color.white;
}
}
콜리전이 바깥으로 탈출할 때
태그가 finish 인 것은
deadtime (5초 경과후 게임오버) 지속시간을 0초로 초기화
Color.white 는 기본 색상으로 변경한다는 뜻임
if (isOver)
{
return;
}
if isOver == true)
{
return;
}
이프 안에 불 값은 기본 true 를 뜻함
리턴은 함수 종료
FindObjectsOfType 은 이제 안씀
FindObjectsByType 를 써야함
오류 뜸
Dongle[] dongles = GameObject.FindObjectsByType<Dongle>;
오류 뜸
Dongle[] dongles = GameObject.FindObjectsByType<Dongle>(FindObjectsSortMode.None);
이렇게 바꿔야 할듯? 아마?
dongles[index].Hide(Vector3.up * 100);
일부러 높은 값을 넣어서
저 위로 숨기는 꼼수
yield return new WaitForSeconds(0.1f);
뜻
현재 코루틴의 실행을 멈추고,
0.1초의 실제 게임 시간(Real Game Time)이 경과할 때까지 기다렸다가,
시간이 지나면 멈췄던 지점부터 다음 코드를 이어서 실행하세요.
dongles[index].rigid.simulated = false;
동글 들의 리지드바디(변수) 시뮬을 끄겠다
void NextDongle()
{
if (isOver)
{
return;
}
어쩌구 저쩌구
}
다음 동글 프리팹을 호출하는 함수 속
만약 isOver 끝이다 함수가 true 면?
return , 즉 조기 종료하고 끝내겠다
이러면 어쩌구 저쩌구 를 발동하지 않음
