노드 그리드를 생성합니다.

GridGraph는 이름 그대로 노드를 그리드 패턴으로 생성합니다.

그리드 그래프는 이미 그리드 기반의 세계를 가지고 있을 때 매우 유용합니다. 그러나 자유형 세계에서도 잘 작동합니다.

 

특징

  • 어떤 씬이든 최소한의 설정만으로 좋은 그래프를 생성할 수 있습니다.
  • 예측 가능한 패턴.
  • 그리드 그래프는 페널티와 태그와 잘 작동합니다.
  • 런타임 중 그래프의 일부를 업데이트할 수 있습니다.
  • 그래프 업데이트가 빠릅니다.
  • 그래프 스캔이 비교적 빠릅니다.
  • 라인캐스팅을 지원합니다.
  • 퍼널 수정자를 지원합니다.
  • 2D 및 3D 물리학을 모두 지원합니다.
  • 등각 및 육각형 노드 레이아웃을 지원합니다.
  • 제공된 이미지에서 페널티 및 보행 가능 값을 적용할 수 있습니다.
  • 경사도에 따라 노드를 보행 가능 또는 불가능하게 만들 수 있어 지형에 적합합니다.
  • 단일 레이어만 지원하지만, 더 많은 레이어가 필요하면 LayerGridGraph를 사용할 수 있습니다.

 

Inspector

Shape

Unity 에디터에서 그리드 그래프 인스펙터의 레이아웃을 결정합니다.

그리드 그래프는 일반 그리드, 등각 그리드 또는 육각형 그리드로 설정할 수 있습니다. 각 모드는 약간 다른 인스펙터 레이아웃을 사용합니다. 인스펙터에서 모양을 변경하면 관련 필드가 자동으로 적절한 값으로 설정됩니다. 예를 들어, 모양을 육각형으로 설정하면 이웃 필드가 자동으로 여섯 개로 설정됩니다.

이 필드는 에디터에서만 사용되며 게임의 나머지 부분에는 전혀 영향을 미치지 않습니다.

인스펙터에서와 같이 그리드 모양을 변경하려면 SetGridShape 메서드를 사용할 수 있습니다.

참고
이 설정은 inspectorGridMode 멤버에 해당합니다.

 


2D

그래프가 2D 모드인지 여부를 가져오거나 설정합니다.

참고
이 속성은 단순히 편의를 위한 속성으로, 실제로는 그래프의 회전을 읽거나 수정합니다. 2D 평면에 맞춰진 회전이 그래프가 2D인지 여부를 결정합니다.
참고
그래프가 2D 물리학을 사용할지 여부는 `this.collision.use2D` (  GraphCollision.use2D )를 사용하여 설정할 수도 있습니다. 
참고
이 설정은 is2D 멤버에 해당합니다. 



Align to tilemap(grid)

지정된 타일맵 또는 그리드 레이아웃에 이 그리드를 정렬합니다.

게임에서 타일맵을 사용하여 렌더링하는 경우 그래프가 정확히 동일하게 배치되도록 하는 것이 매우 유용합니다. 경우에 따라 그리드 매개변수를 수동으로 맞추는 것은 상당히 까다로울 수 있습니다.

씬에서 타일맵이 감지되면 인스펙터에 타일맵에 정렬하는 버튼이 자동으로 표시됩니다. 타일맵이 감지되지 않으면 버튼이 숨겨집니다.

 

참고
Pathfinding on tilemaps
참고
이 설정은 AlignToTilemap 멤버에 해당합니다.



width

노드 단위의 그리드 너비.

그리드 그래프는 일반적으로 너비가 10~500 노드입니다. 그러나 기본적으로 최대 1024 노드 너비까지 가능합니다. 매우 높은 해상도의 그리드가 필요하다면 대신 리캐스트 그래프를 사용하는 것이 좋습니다.

이 값은 A* 인스펙터 -> 최적화 탭에서 ASTAR_LARGER_GRIDS가 활성화되지 않는 한 최대 1024로 제한됩니다.

참고
depth
SetDimensions
참고
이 설정은 width 멤버에 해당합니다.



Depth

노드 단위의 그리드 깊이(높이).

그리드 그래프는 일반적으로 너비가 10~500 노드입니다. 그러나 기본적으로 최대 1024 노드 너비까지 가능합니다. 매우 높은 해상도의 그리드가 필요하다면 대신 리캐스트 그래프를 사용하는 것이 좋습니다.

이 값은 A* 인스펙터 -> 최적화 탭에서 ASTAR_LARGER_GRIDS가 활성화되지 않는 한 최대 1024로 제한됩니다.

참고
width
SetDimensions
참고
이 설정은 depth 멤버에 해당합니다.



Node size
월드 유닛에서 하나의 노드 크기.

그리드 레이아웃의 경우, 이는 그리드 사각형의 한 변의 길이입니다.

육각형 레이아웃의 경우, 이 값은 육각형의 특정 차원과 일치하지 않습니다. 대신, ConvertNodeSizeToHexagonSize 를 사용하여 이를 육각형의 차원으로 변환할 수 있습니다.

참고
SetDimensions
참고
이 설정은 nodeSize 멤버에 해당합니다.



Aspect ratio (isometric/advanced shape)
X축을 따라 그래프의 스케일링.

그리드의 X축과 Y축에 다른 스케일을 원할 때 사용해야 합니다.

이 옵션은 그래프 모양이 등각 또는 고급으로 설정된 경우에만 인스펙터에 표시됩니다.

참고
이 설정은 aspectRatio 멤버에 해당합니다.

 


Isometric angle (isometric/advanced shape)

등각 투영에 사용할 각도(도 단위).

2D 등각 게임을 만드는 경우 이 매개변수를 사용하여 그래프의 레이아웃을 게임에 맞게 조정할 수 있습니다. 이 매개변수는 그래프를 대각선 중 하나를 따라 스케일링하여 다음과 같은 결과를 만들어냅니다:

- 등각 그래프의 원근감 있는 보기.


- 등각 그래프의 탑다운 보기. 이 이미지는 완전히 2D로, 원근감이 없습니다.

 


자주 사용되는 값으로는  StandardIsometricAngleStandardDimetricAngle 이 있습니다.

일반적으로 사용하고자 하는 각도는 30도(또는 90-30 = 60도) 또는 atan(1/sqrt(2))으로 약 35.264도(또는 90 - 35.264 = 54.736도)입니다. 게임에 필요한 방향을 얻기 위해 그래프를 Y축을 중심으로 ±45도 회전할 수도 있습니다.

자세한 내용은 아래 위키피디아 페이지를 참조하세요.

 

참고 
http://en.wikipedia.org/wiki/Isometric_projection
https://en.wikipedia.org/wiki/Isometric_graphics_in_video_games_and_pixel_art
rotation
참고
이 설정은 isometricAngle 멤버에 해당합니다.



Center

월드 공간에서 그리드의 중심점.

그래프는 월드 내 어디에나 위치할 수 있습니다.

 

참고
RelocateNodes(Vector3,Quaternion,float,float,float)
참고
이 설정은 center 멤버에 해당합니다.

 


Rotation

그리드의 회전 각도(도 단위).

노드는 회전의 X 및 Z 축을 따라 배치됩니다.

2D 게임의 경우, 회전은 일반적으로 (-90, 270, 90)으로 설정됩니다. 그래프가 XY 평면과 정렬되면 인스펙터는 자동으로 2D 모드로 전환됩니다.

 

참고
is2D
참고
이 설정은 rotation 멤버에 해당합니다.



Connections

각 노드의 이웃 수.

노드당 연결 수는 네 개, 여섯 개, 여덟 개 중 하나입니다.

여섯 개의 연결은 주로 육각형 그래프를 위한 것입니다.

 

참고
이 설정은 neighbours 멤버에 해당합니다.



Cut corners

비활성화된 경우 장애물의 모서리를 자르지 않습니다.

이 설정이 true이고 neighbours가 Eight로 설정된 경우, 연결에 의해 장애물 모서리를 자를 수 있습니다.

 

참고
이 설정은 cutCorners 멤버에 해당합니다.



Max step height

두 노드 간 연결을 활성화하기 위한 최대 Y 좌표 차이.

값을 무시하려면 0으로 설정하세요.

이 설정은 예를 들어, 그래프가 단차와 계단 주변에서 어떻게 생성되는지에 영향을 미칩니다.

 

참고
maxStepUsesSlope
버전
이전에는 maxClimb로 불렸습니다.
참고
이 설정은 maxStepHeight 멤버에 해당합니다.



Account for slopes

경사도를 maxStepHeight 에 반영합니다.

이 옵션을 활성화하면 지형의 노말을 사용하여 인접한 노드 간의 단계 크기를 더 정확하게 추정합니다.

이 옵션이 비활성화되면 두 노드 간의 계산된 단계는 Y 좌표 차이로 결정됩니다. 특히 가파른 경사에서 시작할 때 부정확할 수 있습니다.



아래 이미지에서 램프 근처에서 발생하는 예를 볼 수 있습니다. 맨 위의 이미지는 램프가 그래프의 나머지 부분과 연결되지 않아 원하는 결과가 아닙니다. 중간 이미지는  maxStepUsesSlope 를 비활성화한 상태에서  maxStepHeight  를 높이려고 시도한 예입니다. 그러나 이 경우 너무 많은 연결이 추가되어 에이전트가 측면에서 램프로 올라갈 수 없게 됩니다. 마지막 이미지에서는 maxStepUsesSlope 를 원래 값으로 복원하고 maxStepUsesSlope를 활성화한 예입니다. 이 구성은 램프를 더 스마트하게 처리합니다. 모든 값은 예시 값일 뿐이며, 씬에 따라 다를 수 있습니다.

 

참고
maxStepHeight
참고
이 설정은 maxStepUsesSlope 멤버에 해당합니다.




Max slope

노드가 보행 가능하도록 하는 최대 경사도(도 단위).

 

참고
이 설정은 maxSlope 멤버에 해당합니다.



 

Erosion iterations

그래프를 침식할 횟수.

그래프는 장애물에 추가 마진을 추가하기 위해 침식될 수 있습니다. 특히 그래프에 단차가 포함되어 있고, 침식 없이 보행 가능한 노드가 가장자리에 너무 가까운 경우에 매우 유용합니다.

아래 이미지는 0, 1, 2 회의 침식 반복을 보여줍니다:

 

참고
침식 반복 횟수가 많으면 런타임 중 그래프 업데이트 속도가 느려질 수 있습니다. 이는 경계 노드의 가능한 변경을 고려하기 위해 업데이트되는 영역이 침식 반복 횟수의 두 배로 확장되어야 하기 때문입니다.
참고
erosionUseTags
참고
이 설정은 erodeIterations 멤버에 해당합니다.




Erosion → Erosion Uses Tags

침식에 보행 가능성을 대신하여 태그 사용.

노드를 보행 불가능으로 표시하는 대신 태그를 사용하여 침식이 이루어집니다. 노드는 erosionFirstTag로 시작하여 증가하는 순서로 태그가 지정됩니다. 효과를 확인하려면 태그 모드로 디버그하십시오. 이 옵션을 활성화하면 Seeker 컴포넌트의 Valid Tags 필드를 사용하여 다양한 AI가 벽에 얼마나 가까이 접근할 수 있는지 설정할 수 있습니다.

 

참고
erosionFirstTag
참고
이 설정은 erosionUseTags 멤버에 해당합니다.



Use 2D physics

Unity 2D 물리 API 사용.

이 옵션을 활성화하면 2D 물리 API가 사용되며, 비활성화하면 3D 물리 API가 사용됩니다.

이 설정은 콜라이더 유형을 3D 버전에서 해당하는 2D 버전으로 변경합니다.(  type 참조) 예를 들어, 구 모양이 원으로 변경됩니다.

2D 물리가 사용될 때는 heightCheck 설정이 무시됩니다.

 

참고
http://docs.unity3d.com/ScriptReference/Physics2D.html
참고
이 설정은 collision.use2D 멤버에 해당합니다.




Collision testing

 

Collider type

사용할 충돌 형태.

 

참고
ColliderType
참고
이 설정은 collision.type 멤버에 해당합니다.



Diameter

충돌을 확인할 때 캡슐 또는 구의 지름.

충돌을 확인할 때 시스템은 노드의 위치에서 특정 형태와 겹치는 콜라이더가 있는지 확인합니다. 형태는  type 필드에 의해 결정됩니다.

지름이 1인 경우, 형태의 지름은 노드의 너비와 같으며, 즉 nodeSize 와 동일합니다.

type 이 Ray로 설정된 경우, 이 설정은 아무런 영향을 미치지 않습니다.

 

참고
이 설정은 collision.diameter 멤버에 해당합니다.



Height/length

충돌을 확인할 때 캡슐의 높이 또는 광선의 길이.

type이 Sphere로 설정된 경우, 이 설정은 아무런 영향을 미치지 않습니다.

 

경고
Unity의 캡슐 콜라이더 및 캐릭터 컨트롤러와 달리, 이 높이는 캡슐의 끝 구체를 포함하지 않고 오직 실린더 부분만 포함합니다. 이는 주로 역사적인 이유 때문입니다.
참고
이 설정은 collision.height 멤버에 해당합니다.




Offset

충돌 확인을 수행할 지면 위의 높이.

예를 들어, 지면이 y=0에서 발견되었고, collisionOffset = 2, type = Capsule, height = 3으로 설정된 경우, 물리 시스템은 아래쪽 구의 중심이 y=2에 있고, 위쪽 구의 중심이 y=2+3=5에 있는 캡슐 내에 콜라이더가 있는지 확인합니다.

type이 Sphere인 경우, 구의 중심은 y=2에 위치하게 됩니다.

 

참고
이 설정은 collision.collisionOffset 멤버에 해당합니다.

 


Obstacle layer mask

장애물로 취급할 레이어.

 

참고
이 설정은 collision.mask 멤버에 해당합니다.



Preview

충돌 테스트 옵션의 미리보기를 표시합니다.



왼쪽에서는 노드 그리드가 있는 그래프의 탑다운 뷰를 볼 수 있습니다. 오른쪽에서는 그래프의 측면 뷰를 볼 수 있습니다. 아래쪽의 흰 선은 그래프의 기본이며, 작은 점으로 노드 위치가 표시됩니다. 2D 물리를 사용하는 경우, 탑다운 뷰만 표시됩니다.

녹색 형상은 충돌 검사용으로 사용될 형상을 나타냅니다.

 

참고
이 설정은 GridGraphEditor.collisionPreviewOpen 멤버에 해당합니다.



Height testing

 

Ray length

높이를 확인할 때의 시작 높이('인스펙터에서의 ray length').

아래 이미지가 시각화하는 것처럼, 다양한 광선 길이는 광선이 다른 것에 맞도록 할 수 있습니다. 거리는 그래프 평면에서 위쪽으로 측정됩니다.

 

참고
이 설정은 collision.fromHeight 멤버에 해당합니다.



Mask

높이 확인에 포함될 레이어.

참고
이 설정은 collision.heightMask 멤버에 해당합니다.



Thick raycast

두꺼운 레이캐스트를 토글합니다.

 

참고
https://docs.unity3d.com/ScriptReference/Physics.SphereCast.html
참고
이 설정은 collision.thickRaycast 멤버에 해당합니다.



Unwalkable when no ground

높이 레이캐스트로 지면을 찾지 못했을 때 노드를 보행 불가능하게 만듭니다.

높이 레이캐스트가 꺼져 있으면 이 설정은 아무런 영향을 미치지 않습니다.

 

참고
이 설정은  collision.unwalkableWhenNoGround 멤버에 해당합니다.



Rules

Grid Graph Rules에서 사용 가능한 규칙 목록을 확인하세요.

 

 

Other settings

Show surface

그래프의 표면을 표시합니다.

각 노드는 사각형으로 그려집니다 (예: 육각형 그래프 모드가 활성화된 경우 제외).

 

참고
이 설정은 showMeshSurface 멤버에 해당합니다.



Show outline

 

Unity 에디터에서 그리드 노드의 윤곽선을 표시합니다.

 

참고
이 설정은 showMeshOutline 멤버에 해당합니다.



Show connections

Unity 에디터에서 그리드 노드 간의 연결을 표시합니다.

 

참고
이 설정은 showNodeConnections 멤버에 해당합니다.



Initial penalty

모든 노드에 적용할 기본 페널티.

 

참고
Graph Updates during Runtime
GraphNode.Penalty
Working with tags
참고
이 설정은 NavGraph.initialPenalty 멤버에 해당합니다.

 

 

 

Updating the graph during runtime

 

IUpdatableGraph 인터페이스를 구현하는 모든 그래프는 런타임 중에 업데이트할 수 있습니다. 그리드 그래프의 경우, 전체 재스캔과 같은 지연을 유발하지 않고 그리드의 일부분만 업데이트할 수 있기 때문에 매우 유용한 기능입니다.

예를 들어, 씬에 장애물을 새로 생성했으며 그 장애물이 생성된 그리드를 업데이트하려면 다음과 같이 할 수 있습니다:

 

AstarPath.active.UpdateGraphs(obstacle.collider.bounds);


여기서 `obstacle`은 방금 인스턴스화된 GameObject입니다.

보시다시피, `UpdateGraphs` 함수는 `Bounds` 매개변수를 받아서 모든 업데이트 가능한 그래프에 업데이트 호출을 보냅니다.

그리드 그래프는 해당 경계 상자 내에서 모든 것이 변경될 수 있다고 가정하고, 영향을 받을 가능성이 있는 모든 노드를 다시 계산합니다. 따라서 경계 상자로 덮인 노드들보다 조금 더 많은 노드를 업데이트할 수 있습니다.

 

참고
런타임 중 Graph Types 업데이트에 대한 자세한 내용은 Graph Updates during Runtime 를 참조하세요.



Hexagonal graphs

그래프는 간단한 설정으로 육각형 그래프처럼 작동하도록 구성할 수 있습니다. 그리드 그래프에는 Shape 드롭다운이 있습니다. 이를 'Hexagonal'로 설정하면 그래프가 육각형 그래프처럼 작동합니다. 종종 그래프를 +45도 또는 -45도 회전하고 싶을 것입니다.

 

 

참고
가장 가까운 노드에 스냅하는 것은 실제 육각형 그래프에서 기대하는 것과 정확히 일치하지 않지만, 거의 차이를 느끼지 못할 정도로 유사합니다.

 

 

코드를 사용하여 구성

그리드 그래프는 코드를 통해 런타임에 완전히 추가 및 구성할 수 있습니다.

// 모든 그래프 데이터를 보유합니다.
AstarData data = AstarPath.active.data;

// 그리드 그래프를 생성합니다.
GridGraph gg = data.AddGraph(typeof(GridGraph)) as GridGraph;

// 일부 값을 사용하여 그리드 그래프를 설정합니다.
int width = 50;
int depth = 50;
float nodeSize = 1;

gg.center = new Vector3(10, 0, 0);

// 위의 값으로 내부 크기를 업데이트합니다.
gg.SetDimensions(width, depth, nodeSize);

// 모든 그래프를 스캔합니다.
AstarPath.active.Scan();

 

참고
Creating graphs during runtime

 

 

나무 콜라이더

 

Unity는 게임이 시작될 때만 나무 콜라이더를 런타임에 생성합니다. 이러한 이유로, 그리드 그래프는 플레이 모드가 아닌 경우 나무 콜라이더를 감지하지 않지만 게임이 시작되면 감지하게 됩니다. 그래도 나무 콜라이더를 감지하지 못하면 나무에 실제로 콜라이더가 부착되어 있는지, 그리고 나무 프리팹이 올바른 레이어에 있는지 확인하십시오(해당 레이어는 'Collision Testing' 마스크에 포함되어야 합니다).

 

참고
그리드 그래프 설정의 'Height Testing' 및 'Collision Testing' 섹션에 대한 문서는 GraphCollision 을 참조하십시오.

LayerGridGraph



'유니티 에셋 > A* Pathfinding project pro' 카테고리의 다른 글

Class LayerGridGraph Extends GridGraph, IUpdatableGraph  (0) 2024.06.28
Class DynamicGridObstacle Extends GraphModifier  (0) 2024.06.26
Classes  (0) 2024.05.29
Groups  (0) 2024.05.29
Deprecated List  (0) 2024.05.29

+ Recent posts