728x90
무한맵
원래 Tilemap으로 맵을 생성하려 했으나,,
2D때와는 다르게 3D에서 사용하려니 맘대로 잘 안되었다ㅜㅡㅠ
그래서 Plane을 바닥에 깔아서 맵을 생성하고 Player가 이동할 때 마다 Trigger 체크를 한 후
Plane의 위치를 옮겨가며 무한으로 맵을 만들어주기로 하였다!
맵(Plane) 생성
1) 카메라 영역을 고려하여 적당한 크기로 Plane의 Scale을 조절
2) Trigger 감지를 위해 'Is Trigger' 체크
3) Plane을 복사하여 4개를 Player를 중심으로 배치
Plane 재배치 스크립트 작성
**무한맵 원리 : Trigger와의 충돌에서 벗어나면 Player의 이동 방향에 따라 Plane을 옮겨준다!
(스크립트 작성은 이전에 했던 똑같은 장르의 '언데드 서바이벌'의 맵 재배치 스크립트를 참고하였다.)
Plane이 총 가로2, 세로2 이므로 옮길때는 크기에 x2를 해준만큼 옮겨야함!!
Reposition 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Reposition : MonoBehaviour
{
[SerializeField]
private Transform playerTrans;
//Trigger 체크(충돌에서 벗어나면 실행)
private void OnTriggerExit(Collider collision)
{
//..tag가 "Area" 아니면 함수 탈출
if (!collision.CompareTag("Area"))
return;
//..player 위치, 현재 위치
Vector3 playerPos = this.playerTrans.position;
Vector3 myPos = this.transform.position;
//..둘 사이(Player, Plane)의 거리 구하기(x,y)
float dirX = playerPos.x - myPos.x;
float dirZ = playerPos.z - myPos.z;
//..거리값을 절대값으로 변환
float diffX = Mathf.Abs(dirX);
float diffZ = Mathf.Abs(dirZ);
//..거리에 따라 값(방향) 지정하기(오른쪽 : 1, 왼쪽 : -1)
dirX = dirX > 0 ? 1 : -1;
dirZ = dirZ > 0 ? 1 : -1;
//이동시키기
//..switch ~ case : 변수의 값에 따라 다른 로직 실행
switch (transform.tag)
{
case "Ground":
//..대각선으로 이동시
if (Mathf.Abs(diffX - diffZ) <= 0.1f)
{
transform.Translate(Vector3.forward * dirZ * 400);
transform.Translate(Vector3.right * dirX * 400);
}
//..좌우로 이동시
else if (diffX > diffZ)
{
transform.Translate(Vector3.right * dirX * 400);
}
//..상하로 이동시
else if (diffX < diffZ)
{
transform.Translate(Vector3.forward * dirZ * 400);
}
break;
}
}
}
작성한 스크립트를 Plane들에게 추가
Trigger 체크를 위해 Player에 'Area'라는 빈오브젝트 생성 후
Box Collider 컴포넌트 및 'Area' 태그 추가
** Collider 크기 = Plane의 크기
실행 결과
'3D 콘텐츠 제작 > [위저드 히어로] 제작 일지' 카테고리의 다른 글
[위저드 히어로05] 근거리 원거리 무기 및 플레이 영상 (0) | 2023.10.10 |
---|---|
[위저드 히어로 04] HUD 만들기 & 레벨업 시스템 (0) | 2023.10.05 |
[위저드 히어로 03] 오브젝트 풀링으로 몬스터 생성 & 몬스터 레벨 적용 (0) | 2023.09.27 |
[위저드 히어로 01] 플레이어 이동 및 카메라 조정 (0) | 2023.09.24 |
[위저드 히어로] 제작 일정 (0) | 2023.09.22 |