-
같은 맵 계속 반복 시키기(3D).Unity/제로부터 구현 2023. 12. 1. 20:30728x90
오늘의 구현.
만들어진 맵들을 돌려가며 반복적으로 생성시키기.
1. 변수
- 플레이어가 이동한 거리에 따라 지나친 맵은 삭제하고, 기존에 맵을 플레이어가 진행하는 방향쪽에 맵을 이어 붙일것 입니다.
- 필요한 변수는 플레이의 위치와, 반복 시킬 맵 프리팹, 지금은 플레이어가 앞으로만 진행할 것이기 때문에 z축의 증가량 만 확인 할 것 입니다.
- 생성할 맵의 길이로 플레이어가 어느정도 이동했을때 맵을 생성할지 정할 것 입니다.
- 진행 방향으로부터 처음 생성할 맵은 3개 이며, 플레이어가 이동할때마다 가장 먼저 생겨난 맵을 삭제하고 가장 먼곳에 맵을 생성 할 것 입니다.
public Transform player; public GameObject[] maps; private List<GameObject> activeMaps; private float spawnZ = 0.0f; private float mapLength; private int amntMapOnScreen = 3; int amntMapIdx;
2. 함수 만들기
- 맵생성 함수를 만듭니다.
- 맵을 돌아가면서 생성해줄 것 이기 amntMapIdx가 맵 프리팹의 길이를 넘지않게 해줍니다.
- 새로운 맵을 해당 오브젝트 자손으로 넣어줍니다.
- 맵의 위치를 지정해주고 다음 생성위치(spawnZ)에 맵의 길이를 더해줍니다.
- 활성화 된 맵을 List에 담아 줍니다.
- 가장 먼저 만들어진 맵을 삭제할 함수를 만들어 줍니다.
private void SpawnMap() { amntMapIdx %= maps.Length; GameObject go; go = Instantiate(maps[amntMapIdx]); go.transform.SetParent(transform); go.transform.position = Vector3.forward * spawnZ; spawnZ += mapLength; activeMaps.Add(go); amntMapIdx++; } private void DeleteMap() { Destroy(activeMaps[0]); activeMaps.RemoveAt(0); }
완성
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MapManager : MonoBehaviour { public Transform player; public GameObject[] maps; private List<GameObject> activeMaps; private float spawnZ = 0.0f; private float mapLength; private int amntMapOnScreen = 3; int amntMapIdx; private void Start() { activeMaps = new List<GameObject>(); mapLength = 40; for (int i = 0; i < amntMapOnScreen; i++) { SpawnMap(); } } private void Update() { if (player.position.z - mapLength/2 > (spawnZ - amntMapOnScreen * mapLength)) { SpawnMap(); DeleteMap(); } } private void SpawnMap() { amntMapIdx %= maps.Length; GameObject go; go = Instantiate(maps[amntMapIdx]); go.transform.SetParent(transform); go.transform.position = Vector3.forward * spawnZ; spawnZ += mapLength; activeMaps.Add(go); amntMapIdx++; } private void DeleteMap() { Destroy(activeMaps[0]); activeMaps.RemoveAt(0); } }
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
A* 알고리즘을 사용한 길찾기 구현 (0) 2023.12.07 Editor 구현하기 (1) 2023.12.05 1인칭 시점 구현하기 + 이동 (0) 2023.11.30 짝 맞추기 카드 만들기, 카드 섞기, 리소스를 사용한 스프라이트 설정 (0) 2023.11.28 3D 플레이어 이동 구현(마우스로 방향전환, 키보드로 방향전환) (1) 2023.11.24