[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 |