오늘 공부할 내용
Nav Mesh Obstacles 컴포넌트를 이용해서 움직이는 장애물을 만들겠습니다. 움직이는 장애물이란 주로 열거나 닫을 수 있는 문, 차단막 등이 있습니다.
Nav Mesh Obstacles 설명
움직이는 장애물을 만들려면 오브젝트에 NavMeshObstacles 컴포넌트를 추가해야합니다.
Shape : 지오메트리 모양을 설정합니다. 박스와 캡슐 2개의 형태가 있습니다.
Center, Radius, Height 는 지오메트리의 위치, 넓이, 높이 값을 설정합니다.
Carve : 위 장애물의 모양만큼 의해 네비메시에 영향을 줄 지를 설정합니다. 활성화 되어 있으면 해당 오브젝트의 모양만큼 네비메시에 구멍이 뚫립니다. 비활성화 되어 있으면 콜라이더 박스처럼 됩니다. 이동하는 개체(에이전트)가 해당 오브젝트를 회피하는 동작을 최소화합니다.
Move Threshold : 움직이는 파인 구멍을 업데이트하는 임계 거리를 설정하는 데 사용합니다. 장애물이 Move Threshold에 설정한 거리보다 많이 움직인 경우 움직인다고 간주합니다.
Time To Stationary : 장애물이 정지되었다고 간주할 때까지 기다리는 시간(초)입니다.
Carve Only Stationary : 활성화하면 장애물이 정지되어 있을 때만 구멍을 팝니다.
움직이는 장애물 만들기
■ ObstacleMove.cs 작성
Scripts 폴더에 C# 스크립트 ObstacleMove.cs 를 만들고 아래 코드를 작성하세요.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObstacleMove : MonoBehaviour
{
// 이동 범위
[SerializeField]
private int moveRange = 5;
// 이동 속도
[SerializeField]
private float speed = 2;
// 이동 지연
[SerializeField]
private float moveMaxDelay, moveCurDelay = 5;
// 이동중인 거리
private float movingDistance = 0;
// 이동 가능 여부
bool isMove = true;
void Update()
{
if(isMove)
{
// 오브젝트 이동
transform.Translate(Vector3.left * speed * Time.deltaTime);
// 이동한 거리만큼 moveDistance 값 수정
movingDistance += speed * Time.deltaTime;
if (Mathf.Abs(movingDistance) > moveRange)
{
isMove = false;
transform.Rotate(new Vector3(0, 180, 0));
}
}
else
{
// 지연 시간 체크
moveCurDelay -= Time.deltaTime;
if(moveCurDelay <= 0)
{
// 지연시간이 종료되면 이동가능하게 변경
movingDistance = 0;
moveCurDelay = moveMaxDelay;
isMove = true;
}
}
}
}
#코드 설명
좌우로 움직이며, 목적지에 도착하면 지연 시간 이후에 다시 움직이도록 만들었습니다.
■ Sheep 오브젝트 배치
Prefabs\Characters\Sheep 을 Hierarchy 뷰로 드레그 앤 드롭합니다. Player 앞쪽에 배치시킵니다.
Rotation을 모두 0 으로 만들어주세요.
■ Sheep 에 컴포넌트 추가
Sheep 오브젝트에 Nav Mesh Obstacle 과 ObstacleMove.cs 를 컴포넌트로 추가합니다.
컴포넌트의 각 변수들에게 원하는 값을 입력하세요.
테스트하기
Nav Mesh Obstacle 의 값들을 변경해서 네비메시가 어떻게 변경되는지 확인해봅시다.
Youtube 영상
'Unity 자습서 > Navigation' 카테고리의 다른 글
유니티 Navigation Basics #3 - Off-mesh Links (점프, 낙하) (0) | 2019.02.08 |
---|---|
유니티 Navigation Basics #2 - Agent(이동 개체) 설정 (1) | 2019.01.31 |
유니티 Navigation Basics #1 - 이동 구역 설정하기 (0) | 2019.01.29 |
댓글