Priv's Blog
Programming Simple Functionality: Unit 4 - Gameplay Machanics) Lesson 4.2 - Follow the Player 본문
Programming Simple Functionality: Unit 4 - Gameplay Machanics) Lesson 4.2 - Follow the Player
Priv 2021. 7. 24. 18:10출처
1. 서언
(영상: 링크 참조)
2. 적과 Physics material 추가
이제 카메라 회전과 플레이어 움직임이 정상적으로 작동되고 있습니다. 이제 적을 설정하고 플레이어를 저 멀리 튕겨내 버리는 특별한 새로운 물리 요소를 추가해주어야 합니다!
(영상: 링크 참조)
- 새로운 Sphere 오브젝트를 생성하시고, 이름을 "Enemy"로 바꾸신 뒤, 위치를 잡아주세요. 그리고 오브젝트에 텍스처를 드래그하여 적용해주세요.
- 새로운 RigidBody 컴포넌트를 추가하시고, XYZ 스케일을 조정 후 테스트해주세요.
- 새로 만든 "Physics Materials" 폴더 안에서, Create > Physics Material 클릭 후, 이름을 "Bouncy"로 바꿔주세요.
- Bounciness 값을 "1"로 올려주시고, Bounce Combine을 "Multiply"로 변경해주신 뒤, 여러분의 플레이어와 적에 적용하셔서 테스트해주세요.
3. 플레이어를 따라가도록 만드는 enemy 스크립트 생성하기
이제 적이 플레이어를 밀쳐낼 수 있는 힘을 가지게 되었습니다. 하지만, 이는 플레이어가 접근하는 경우에만 가능합니다. 여러분은 적이 플레이어의 위치를 따라 섬 위에서 쫓아오도록 만들어야 합니다.
(영상: 링크 참조)
- "Enemy"라는 이름의 새로운 스크립트를 생성하시고, Enemy 오브젝트에 부착해주세요.
- Rigidbody enemyRb;, GameObject player;, public float speed; 까지 총 3가지의 새로운 변수를 선언해주세요.
- enemyRb = GetComponent<Rigidbody>(); 와 player = GameObject.Find("Player");로 초기화해주세요.
- Update() 안에서 AddForce 함수를 사용해 플레이어와 적 사이의 직진 거리를 향해 힘을 가하도록 만들어주세요.
4. lookDirection 변수 제작하기
이제 적이 플레이어를 향해 굴러가지만, 여러분의 코드는 조금 지저분합니다. 새로운 벡터 변수를 추가하여 코드를 좀 더 깔끔하게 정리해보겠습니다.
(영상: 링크 참조)
- Update() 안에, 새로운 Vector3 lookDirection이라는 변수를 선언해주세요.
- Vector3 lookDirection = (player.transform.position - trasnform.position).normalized;를 작성해주세요.
- AddForce 함수 호출 부분을 lookDirection 변수로 수정해주세요.
5. 적을 위한 Spawn Manager 제작하기
이제 적들이 여러분이 원하는 대로 완벽하게 움직이므로, 적들을 프리 팹으로 바꾸고 이를 인스턴스화하기 위한 Spawn Manager를 제작할 차례입니다.
(영상: 링크 참조)
- Enemy 오브젝트를 Prefabs 폴더로 드래그하여 새로운 프리팹을 생성하시고, scene에 있는 기존의 Enemy 오브젝트는 삭제해주세요.
- "Spawn Manger"라는 이름의 새로운 오브젝트를 생성하시고, 새로운 "SpawnManager" 스크립트를 부착하신 뒤에 스크립트 파일을 열어주세요.
- public GameObject enemyPrefab 변수를 새로 선언하시고, inspector 안에 프리팹을 할당해주세요.
- Start() 안에, 새로운 enemyPrefab를 미리 할당된 좌표로 초기화해주세요.
6. 생성 좌표 랜덤화하기
게임이 시작되면 적이 생성되지만, 항상 같은 위치에 적이 생성되고 있습니다. 여러분에게 친숙한 Random 클래스를 사용하여, 적들이 생성되는 좌표를 랜덤화할 수 있습니다.
(영상: 링크 참조)
- SpawnManager.cs의 Start() 안에 새로운 난수, X와 Z를 생성하도록 만들어주세요.
- 생성한 난수 X와 Z 좌표를 가지고 Vector3 spawnPos 변수를 새로 선언해주세요.
- 새로운 spawnPos 변수를 Instantiate 호출 안에 통합시켜주세요.
- 하드-코딩된 값들을 spawnRange 변수로 바꿔주세요.
- Start 버튼을 눌러 여러분의 프로젝트가 제대로 작동되는지 다시 실행해주세요.
7. 생성 좌표를 반환하는 메서드 만들기
랜덤 생성 좌표를 생성하는 코드는 완벽하게 작동되고 있으며, 앞으로 이 코드를 지금보다 더 많이 사용할 것입니다. 스크립트를 정리하고 코드를 이후에도 사용하기 위해서는 사용자 정의 함수에 코드를 저장해야 합니다.
(영상: 링크 참조)
- 새로운 함수, Vector3 GenerateSpawnPosition() { }를 생성해주세요.
- spawnPosX 와 spawnPosZ 변수를 새로운 메서드 안에 복사/붙여넣기 해주세요.
- 여러분의 새로운 메서드에 return randomPos; 를 추가해주세요.
- Instatniate 호출 부분 코드를 여러분의 새로운 GenerateSpawnPosition() 함수로 바꿔주세요.
8. 내용 복습
(영상: 링크 참조)
- 새로 배운 기능들
- 섬 위의 무작위 좌표에 적 생성하기
- 플레이어 주변을 적이 따라가도록 만들기
- 공들이 서로 튕겨지도록 만들기
- 새로 배운 개념과 기술들
- Physics Materials
- 3D 공간 안에서의 벡터 정의
- 값 정규화
- 값을 반환하는 메서드
- 다음 시간에 학습할 내용
- 다음 시간에는 파워업을 사용하여 적들과 맞서 싸울 수 있는 방법을 만들어보겠습니다!