private void Awake()

    {

        for (int i = 0; i < TileBitMaskIndex.Length; i++)

            TileBitMaskSet.Add(TileBitMaskIndex[i], i);

    }


    int[] TileBitMaskIndex =

    {

        9,1,3,16,32,210,

        8,0,2,64,128,200,

        12,4,6,132,160,33,

        13,5,7,68,80,17

    };


void SetSprite()

    {

        int Bit_UL = 0;

        int Bit_UR = 0;

        int Bit_DL = 0;

        int Bit_DR = 0;

        if (isGround)

        {

            Bit_UL = 200;

            Bit_UR = 200;

            Bit_DL = 200;

            Bit_DR = 200;

        }

        else

        {

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(1)) && GameManager.Data.Tiles[Pos.GetAroundPos(1)].isGround)

            {

                Bit_UL += 1;

                Bit_UR += 1;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(2)) && GameManager.Data.Tiles[Pos.GetAroundPos(2)].isGround)

            {

                Bit_UR += 2;

                Bit_DR += 2;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(4)) && GameManager.Data.Tiles[Pos.GetAroundPos(4)].isGround)

            {

                Bit_UL += 8;

                Bit_DL += 8;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(7)) && GameManager.Data.Tiles[Pos.GetAroundPos(7)].isGround)

            {

                Bit_DR = 2;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(8)) && GameManager.Data.Tiles[Pos.GetAroundPos(8)].isGround)

            {

                Bit_DL = 8;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(3)) && GameManager.Data.Tiles[Pos.GetAroundPos(3)].isGround)

            {

                Bit_UL += 4;

                Bit_UR += 4;

                Bit_DL = 210;

                Bit_DR = 210;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(5)) && 

GameManager.Data.Tiles[Pos.GetAroundPos(5)].isGround && (Bit_UL == 0 || Bit_UL == 4 || Bit_UL == 32))

            {

                Bit_UL += 128;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(6)) && 

GameManager.Data.Tiles[Pos.GetAroundPos(6)].isGround && (Bit_UR == 0 || Bit_UR == 4 || Bit_UR == 16))

            {

                Bit_UR += 64;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(7)) && 

GameManager.Data.Tiles[Pos.GetAroundPos(7)].isGround && (Bit_UR == 0 || Bit_UR == 1 || Bit_UR == 64))

            {

                Bit_UR += 16;

            }

            if (GameManager.Data.Tiles.ContainsKey(Pos.GetAroundPos(8)) && 

GameManager.Data.Tiles[Pos.GetAroundPos(8)].isGround && (Bit_UL == 0 || Bit_UL == 1 || Bit_UL == 128))

            {

                Bit_UL += 32;

            }

        }

        UL.sprite = AssetManager.TileBitMaskSet.ContainsKey(Bit_UL) ? AssetManager.SpriteSet[SPRITE.TileChip][AssetManager.TileBitMaskSet[Bit_UL]] : null;

        UR.sprite = AssetManager.TileBitMaskSet.ContainsKey(Bit_UR) ? AssetManager.SpriteSet[SPRITE.TileChip][AssetManager.TileBitMaskSet[Bit_UR]] : null;

        DL.sprite = AssetManager.TileBitMaskSet.ContainsKey(Bit_DL) ? AssetManager.SpriteSet[SPRITE.TileChip][AssetManager.TileBitMaskSet[Bit_DL]] : null;

        DR.sprite = AssetManager.TileBitMaskSet.ContainsKey(Bit_DR) ? AssetManager.SpriteSet[SPRITE.TileChip][AssetManager.TileBitMaskSet[Bit_DR]] : null;

    }



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8177a16fb3dab004c86b6f9d6f040c009803c911b33143016fd976b20b91b3a09c6c78645ff3a8e4fdaf22dfd15b9d210c0bd46e0b <비트마스킹 참고


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8177a16fb3dab004c86b6f9d6f040c009803c911b33143016fd976b20b91b3a09c6c78645ff3a8e4fdf872245b445713543133d7d6 <결과물


내가만든 비트마스킹 사용한 타일맵 알고리즘인데 존나쉽게 만든거니까 응용해서 쓰든 공부해서쓰든 맘대로 하셈