[Godot] TileMap Physics Layers Custom Data Layers
Godot 2023. 10. 1. 20:33 |반응형
타일맵에 Collision Layer, Collision Mask를 설정하고 게임 실행 중 코드에서 Custom Data에 따라 적절히 바꿀 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using Godot;
public partial class player : Node2D
{
[Export]
CharacterBody2D character;
public override void _Ready()
{
//character = GetNode<CharacterBody2D>("CharacterBody2D");
}
public override void _Process(double delta)
{
Vector2I mousePosition = GetNode<TileMap>("TileMap").LocalToMap(GetViewport().GetMousePosition());
// 마우스 커서 위치를 타일맵 좌표로 변환한다.
int layers = GetNode<TileMap>("TileMap").GetLayersCount();
// 타일맵 레이어 갯수를 가져온다.
for (int layer = 0; layer < layers; layer++)
{
TileData td = GetNode<TileMap>("TileMap").GetCellTileData(layer, mousePosition);
// 마우스가 위치한 타일의 타일 데이터를 가져온다.
if (td != null)
{
GD.Print($"Layer: {layer}");
GD.Print($"CustomData: {td.GetCustomData("extraData")}");
// TileMap - Inspector - Custom Data Layers 에서 추가한 변수를
// TileSet탭 - Tiles탭 - Select - Custom Data 에서 세팅한 값.
//GetNode<TileMap>("TileMap").TileSet.SetPhysicsLayerCollisionLayer(layer, 8);
//GetNode<TileMap>("TileMap").TileSet.SetPhysicsLayerCollisionMask(layer, 16);
// extraData 값을 확인하고 그에 맞게 레이어 값을 바꿀 수 있다.
//int groundLayer = 1;
//int buildingLayer = 2;
//character.SetCollisionLayerValue(groundLayer, false);
//character.SetCollisionMaskValue(buildingLayer, true);
// 아니면 상화에 따라 캐릭터의 collision layer/mask 값을 바꿀 수 있다.
// 주의할 점은 SetCollisionXXXValue()의 레이어 값은 1~32이므로 미리 변경하고 싶은
// 레이어 번호를 변수에 저장하고 사용하자. 0 이 들어가면 안된다.
}
else
{
GD.Print("NULL");
}
GD.Print($"Collision Layer:" +
$"{GetNode<TileMap>("TileMap").TileSet.GetPhysicsLayerCollisionLayer(layer)}");
GD.Print($"Collision Mask:" +
$"{GetNode<TileMap>("TileMap").TileSet.GetPhysicsLayerCollisionMask(layer)}");
// 1번 레이어(마스크) value: 1
// 2번 레이어(마스크) value: 2
// 3번 레이어(마스크) value: 4
// 4번 레이어(마스크) value: 8
// ... 9번 레이어(마스크) value: 256 ...
}
}
}
|
스크립트를 작성한다.
반응형
'Godot' 카테고리의 다른 글
[Godot] 2D Navigation Basic Setup (0) | 2023.10.06 |
---|---|
[Godot] Wall Jump 벽 점프 (0) | 2023.10.02 |
[Godot] RayCast2D C# Example (0) | 2023.09.27 |
[Godot] Area2D Gravity 중력 (0) | 2023.09.27 |
[Godot] AddChild(), RemoveChild() (0) | 2023.09.26 |