플레이어의 생명 변수 lives와 무적 변수 isInvincible을 선언한다.
최대 생명은 3이다.
아래 OnTriggerEnter2D에 if문을 추가한다.
태그가 Enemy일 경우 무적 상태가 아니면 생명이 1개 깎인다.
태그가 Food일 경우 최대 3개까지 생명이 오른다. (Mathf.Min 사용)
태그가 Golden일 경우 무적 상태(isInvincible)에 들어가고 일정 시간 후에 효과가 사라진다.
Create Empty로 Game Manager를 만든다.
생명 확인, 게임 인트로 화면, 게임 오버 시 재시작 등 모든 걸 관리할 것이다.
Game Manager는 누구든 접근할 수 있고, 오직 하나만 있어야 하므로 static으로 만든다.
Awake 메서드에 싱글톤 패턴을 사용한다.
게임 상태로 사용할 enum형 GameState를 만든다.
GameState 변수를 만들어 초기값은 Intro로 했다.
이걸 Player 스크립트와 공유하여 Playing 상태가 아니라면 점프를 못하도록 활용할 수 있다.
타이틀로 쓸 이미지를 Sprite Mode는 Single, Filter Mode는 Point, Compression은 None으로 한다.
2D 픽셀이기 때문에 Point와 압축없음이 필요하다.
타이틀 화면을 만들 차례다.
Create Empty로 IntroUI를 만들고 안에 타이틀과 버튼 이미지를 넣어준다.
X값은 0으로 하고 크기를 알맞게 조정한다.
IntroUI는 처음엔 비활성화로 체크 해제한다.
Reference 헤더를 붙여주고 IntroUI 변수를 선언한다.
Start 메서드에서 IntroUI의 SetActive를 true로 만든다.
이제 GameManager가 실행되면 IntroUI가 보이게 될 것이다.
스포너들을 활성화 하기 위해 변수를 추가한다.
Update 메서드에 State가 Intro일 때 스페이스바를 누르면 UI가 사라지고 State가 Playing으로 바뀌도록 한다.
또한 스포너들이 모두 활성화 되도록 한다.
인스펙터에서 스포너들을 체크 해제하여 비활성화 되도록 한다.
게임이 시작되면 활성화 될 것이다.
스포너가 활성화 됐을 때 스폰되도록 하기 위해 Start를 OnEnable로 바꾼다.
이제 스포너가 활성화되면 Invoke 메서드로 Spawn 함수를 호출하게 된다.
이제 플레이어의 생명을 Game Manager에서 관리하기 위해 lives 변수를 선언한다.
그리고 Player 스크립트의 lives 변수를 제거한 후 남은 함수에 있는 lives는 GameManager Instance를 통해 lives를 참조하도록 수정한다.
이제 KillPlayer 함수를 다른 곳에서 사용하기 위해 public으로 바꾸고 Hit 메서드를 수정한다.
GameManager 스크립트에 PlayerScript 변수를 추가한다.
State가 Playing일 때 lives가 0이 되면 PlayerScript의 KillPlayer 함수가 호출되고, 스포너가 비활성화 되고, State가 Dead로 바뀐다.
또한 State가 Dead일 때 스페이스바를 누르면 Scene이 다시 시작하게 만든다.
잊지 말아야 할 점은 스포너를 비활성화 해도 Spawn 메서드가 자기 자신을 계속 호출하고 있다.
플레이어가 사망했다면 스포너의 실행을 취소해야 한다.
OnDisable 메서드를 추가해서 CancelInvoke 함수를 호출한다.
출처: 김장 게임을 만들었다 😎 ㅋㅋ - YouTube
'유니티' 카테고리의 다른 글
[유니티] #1 광부 타이쿤 게임 만들기 (캐릭터 Bone 애니메이션) (0) | 2025.01.11 |
---|---|
[유니티6] #4 픽셀 Run 게임 만들기 (하이 스코어, 배포) (0) | 2025.01.08 |
[유니티6] #2 픽셀 Run 게임 만들기 (장애물) (0) | 2025.01.06 |
[유니티6] #1 픽셀 Run 게임 만들기 (배경, 스크롤링, 플레이어 애니메이션) (0) | 2025.01.02 |
[유니티] 초보자를 위한 플레이어 애니메이션 만드는 과정 (0) | 2024.07.17 |