Priv's Blog
Programming Simple Functionality: Unit 3 - Sound and Effects) Lesson 3.2 - Make the World Whiz By 본문
Programming Simple Functionality: Unit 3 - Sound and Effects) Lesson 3.2 - Make the World Whiz By
Priv 2021. 7. 24. 18:07출처
1. 서언
(영상: 링크 참조)
2. 배경화면이 반복되도록 만드는 스크립트 작성하기
배경화면이 왼쪽으로 장애물과 같은 속도로 일정하게 반복하여 움직이도록 만들어서 월드를 달려 나가는 것처럼 보이도록 해야 합니다. 다행히도 여러분은 이미 왼쪽으로 움직이게 만드는 스크립트를 가지고 계시지만, 이를 반복하도록 만들기 위한 새로운 스크립트를 작성하셔야 합니다.
(영상: 링크 참조)
- RepeatBackground.cs라는 이름의 새로운 스크립트를 생성하시고, Background 오브젝트에 부착해주세요.
3. 배경화면 위치 재설정하기
배경화면을 반복하고 월드를 달려 나가는 듯한 연출을 만들려면 배경화면 오브젝트의 위치를 재설정하여 서로 완벽하게 맞물리도록 만들어야 합니다.
(영상: 링크 참조)
- 새로운 변수 private Vector3 startPos;를 선언해주세요.
- Start() 안에서 startPos 변수에 = transform.position;을 할당하여 실제 시작 위치로 설정해주세요.
- Update() 안에 특정 거리만큼 이동하면 위치를 초기화하는 if문을 작성해주세요.
4. 배경화면 반복을 collider를 사용하도록 수정하기
이제 배경화면이 매 초마다 반복되도록 만들었으나, 전환이 매우 부 자연스러워 보입니다. 몇 가지 새로운 변수들을 사용해 배경화면 반복을 보다 완벽하고 매끄럽게 보이도록 만들어야 합니다.
(영상: 링크 참조)
- Box Collider 컴포넌트를 Background 오브젝트에 부착해주세요.
- 새로운 변수 private float repeatWidth를 선언해주세요.
- Start() 안에 box collider의 가로길이를 가져와 2로 나눠주세요.
- repeatWidth 변수를 반복 함수(repeat function) 안에 넣어주세요.
5. 새로운 게임 오버 트리거 추가하기
플레이어가 장애물과 충돌했을 때, 모든 것을 멈추게 만드는 "Game Over" 상태로 바뀌도록 만들고자 합니다. 그렇게 하려면 플레이어가 충돌하는 모든 게임 오브젝트에 라벨을 붙여 식별할 수 있도록 만들어야 합니다.
(영상: 링크 참조)
- inspector 안에서 "Ground" 태그를 Ground 오브젝트에, "Obstacle" 태그를 Obstacle 프리팹에 추가해주세요.
- PlayerController 안에 새로 public bool gameOver;를 선언해주세요.
- OnCollisionEnter 안에 if else 문을 추가하여 "Ground" 또는 "Obstacle"와의 충돌을 감지하도록 만들어주세요.
- 만약 "Ground"와 충돌하면, isOnGround = true로, "Obstacle"과 충돌하면, gameOver = true로 설정해주세요.
6. gameOver에서 MoveLeft를 멈추도록 만들기
여러분이 추가한 gameOver bool 값이 작동하는 것처럼 보이지만, 배경화면과 오브젝트들이 플레이어가 장애물과 충돌했음에도 여전히 움직이고 있습니다. PlayerController와 상호작용하며 플레이어가 gameOver 상태가 되었을 때 작동을 멈추는 MoveLeft 스크립트가 필요합니다.
(영상: 링크 참조)
- MoveLeft.cs 안에, 새로 private PlayerController playerControllerScript;를 선언해주세요.
- Start() 안에, Player를 찾고 PlayerCotroller 컴포넌트를 가져와 초기화해주세요.
- translate 메서드를 if문 안에 기입하여 게임이 끝나지 않았는지를 확인하도록 만들어주세요.
7. gameOver에서 장애물 생성을 멈추도록 만들기
배경화면과 장애물들은 gameOver == true 상태일 때 움직임을 멈추지만, Spawn Manager는 여전히 장애물들의 무리를 만들어내고 있습니다! Spawn Manager 스크립트와 상호작용하여 게임이 종료되면 장애물 생성을 멈추도록 만들어야 합니다.
(영상: 링크 참조)
- SpawnManager.cs 안에서 MoveLeft.cs에서 하셨던 것과 동일한 방법으로 playerControllerScript에 대한 참조를 가져와주세요.
- gameOver == false 조건일 경우에만 오브젝트들을 인스턴스화하는 조건을 추가해주세요.
8. 경계선을 넘어간 장애물들 삭제하기
유닛 2에서 동물들이 그랬던 것처럼, 경계선을 넘어간 장애물들은 모두 삭제해야 합니다. 그렇지 않으면 장애물들이 저 멀리 떨어져 나갈 것입니다... 영원히 말이에요!
(영상: 링크 참조)
- MoveLeft에서 Update(); 안에 장애물의 위치가 LeftBound 변수 값보다 작을 때 장애물을 삭제하는 if문을 작성해주세요.
- 주석을 추가하여 여러분의 코드 가독성을 올려주세요.
9. 내용 복습
(영상: 링크 참조)
- 새로 배운 기능들
- 배경화면이 반복되는 것처럼 보이도록 연출하기
- 플레이어가 장애물과 충돌하면 배경화면이 멈추도록 만들기
- 플레이어가 장애물과 충돌하면 장애물 생성을 멈추도록 만들기
- 장애물이 화면 너머로 사라지면 삭제하기
- 새로 배운 개념과 기술들
- 배경화면 반복
- Collider 가로길이 얻기
- 스크립트 상호작용
- 동일 (==) 연산자
- 태그(Tags)
- CompareTag()
- 다음에 학습할 내용
- 여러분의 캐릭터는 속으로는 행복해할지는 몰라도, 겉모습은 너무 경직되어 보이므로, 다음 시간에는 애니메이션 작업을 진행해보겠습니다.