Priv's Blog
Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.2 - Food Flight 본문
Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.2 - Food Flight
Priv 2021. 2. 14. 14:22출처
1. 서언
(영상: 링크 참조)
2. 발사체가 앞으로 날아가도록 만들기
여러분이 먼저 해야 할 일은 발사체가 앞으로 날아갈 수 있도록 만들어서 플레이어가 이를 발사할 때 Scene을 가로질러 날아가도록 만드는 것입니다.
(영상: 링크 참조)
-
"MoveForward" 스크립트를 새로 만드시고, food 오브젝트에 부착하신 뒤에 해당 스크립트 파일을 열어주세요.
-
public float speed; 로 변수를 새로 선언해주세요.
-
Update() 내에 transform.Translate(Vector3.forward * Time.deltaTime * speed); 를 추가하시고 저장해주세요.
-
Inspector에서 발사체의 speed 변수를 설정하시고 테스트해주세요.
public float speed = 40.0f;
void Update()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
3. 발사채를 프리팹으로 만들기
이제 여러분의 발사체가 원하는 데로 작동하므로, 모든 기능을 포함한 발사체 오브젝트를 프리팹으로 만들어 언제 어디서나 재사용할 수 있도록 해야 합니다.
(영상: 링크 참조)
-
"Prefaps" 폴더를 새로 만드시고, 여러분의 음식을 폴더 내로 드래그하신 뒤, 오리지널 프리팹을 선택해주세요.
-
PlayerController.cs 내에 public GameObject projectilePrefab; 변수를 새로 선언해주세요.
-
hierarchy 내에서 Player를 선택하시고, 오브젝트를 여러분의 Prefaps 폴더에서 오브젝트를 Inspector 내의 새로운 Projectile Prefab box로 드래그해주세요.
-
발사체를 런타임 때 scene으로 드래그하여 발사체가 날아가는지 확인해주세요.
4. 스페이스 바 입력 감지하기
이제 여러분이 만든 발사체 프리팹이 PlayerController.cs에 할당되었으므로, 플레이어가 스페이스 바를 이용해 발사체를 필요할 때 발사할 수 있도록 만들어야 합니다.
(영상: 링크 참조)
-
PlayerController.cs 내의 Update()에 스페이스 바 입력을 검사하는 if문을 추가해주세요:
if (Input.GetKeyDown(KeyCode.Space)) { -
if문 안에 // Launch a projectile from the player 라는 주석을 추가해주세요.
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Launch a projectile from the player
}
}
5. 스페이스 바를 눌러 발사체 발사하기
플레이어가 스페이스 바를 눌렀는가를 감지하는 코드는 작성했으므로, 이제 스페이스 바가 눌렸을 때 실제로 생성될 발사체가 필요합니다.
(영상: 링크 참조)
-
if문 안에 Instantiate 메서드를 사용하여 플레이어의 좌표(location)와 프리팹의 회전 각도(rotation)에 맞춰 발사체가 생성되도록 만들어주세요.
if (Input.GetKeyDown(KeyCode.Space))
{
// Launch a projectile from the player
Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
}
6. 동물들을 프리팹으로 만들기
발사체는 현재 프리팹이지만 동물들은 어떤가요? 동물들 또한 게임 도중에 인스턴스화 될 수 있도록 프리팹으로 만들어야 합니다.
(영상: 링크 참조)
-
모든 동물들의 Y축을 180도 회전하여 얼굴이 아래를 향하도록 만들어주세요.
-
hierarchy 내의 세 동물을 모두 선택하고 Add Component > Move Forward를 추가해주세요.
-
동물들의 speed 값을 수정하시고 어떻게 보이는지 테스트해주세요.
-
세 동물들을 Prefabs 폴더로 드래그하시고, "오리지널 프리팹"을 선택해주세요.
-
게임이 진행되는 동안 scene 뷰 내에 프리팹들을 드래그하여 테스트해주세요.
7. 화면 밖으로 벗어난 발사체 삭제하기
여러분이 발사체를 생성할 때마다, 발사체가 플레이 영역을 지나 영원히 날아가게 됩니다. 게임의 성능을 향상하기 위해, 발사체들이 플레이 영역을 벗어나면 삭제되도록 만들어야 합니다.
(영상: 링크 참조)
-
"DestroyOutOfBounds" 스크립트를 생성하시고 발사체 오브젝트에 적용해주세요.
-
private float topBound 변수를 새로 생성하시고 초기값을 = 30; 으로 설정해주세요.
-
상단 경계면을 넘어서면 오브젝트가 삭제되도록 코드를 작성해주세요.
if (transform.position.z > topBound) {
Destroy(gameObject); } -
Inspector 내의 Overrides 드롭-다운 메뉴에서 Apply all을 클릭하셔서 프리팹에 적용해주세요.
private float topBound = 30;
void Update() {
if (transform.position.z > topBound) {
Destroy(gameObject);
}
}
8. 화면 밖으로 사라진 동물들 삭제하기
여러분이 화면 밖으로 사라진 발사체들을 삭제하셨다면, 동물들도 동일하게 처리해주어야 합니다. 여러분도 동물들이 유니티 에디터의 끝없는 심연 속에서 길을 잃고 헤매는 것은 원치 않으시겠죠...
(영상: 링크 참조)
-
else-if 문으로 오브젝트가 lowerBound 아래에 있는지 검사하도록 만들어주세요.
else if (transform.position.z > topBound) -
모든 동물들의 스크립트에 적용해주시고, 프리팹들을 Override 해주세요.
private float topBound = 30;
private float lowerBound = -10;
void Update() {
if (transform.position.z > topBound) {
Destroy(gameObject);
}
else if (transform.position.z < lowerBound) {
Destroy(gameObject);
}
}
9. 내용 복습
(영상: 링크 참조)
- 새로 배운 기능들
-
플레이어가 스페이스 바를 눌러 발사체 프리팹을 발사할 수 있도록 만들기
-
발사체와 동물들이 스크린 너머로 사라지면 scene에서 삭제하기
- 새로 배운 개념과 기술들
-
프리팹 생성
-
프리팹 오버라이드(Override)
-
키 입력 테스트
-
오브젝트 삭제(Destroy)
-
Else-if 문
- 다음 시간에 학습할 내용
-
모든 동물 프리팹들을 scene에 드롭하는 것 대신, 평원을 달리는 동물들의 무리를 만들어보겠습니다!