示例#1
0
    void InitialiseTile(FogTile tile, int size, string name, Color[] pixels, Transform parent)
    {
        var     renderer = this.GetComponent <SpriteRenderer> ();
        Vector2 pivot    = new Vector2(0.5f, 0.5f);
        var     rect     = new Rect(0, 0, size, size);

        tile.texture = new Texture2D(size, size);
        tile.texture.SetPixels(0, 0, size, size, pixels);
        tile.texture.filterMode = FilterMode.Bilinear;
        tile.texture.wrapMode   = TextureWrapMode.Clamp;
        tile.texture.Apply();
        tile.texture.name             = "Fog Texture " + name;
        tile.sprite                   = Sprite.Create(tile.texture, rect, pivot, renderer.sprite.pixelsPerUnit);
        tile.sprite.name              = "Fog Sprite" + name;
        tile.obj                      = new GameObject();
        tile.obj.name                 = "Fog" + name;
        tile.obj.transform.parent     = parent;
        tile.obj.transform.localScale = new Vector3(tileSize, tileSize, 0.0f);
        tile.obj.AddComponent <SpriteRenderer> ();
        tile.renderer                  = tile.obj.GetComponent <SpriteRenderer> ();
        tile.renderer.sprite           = tile.sprite;
        tile.renderer.name             = "Fog Renderer " + name;
        tile.renderer.sortingOrder     = renderer.sortingOrder;
        tile.renderer.sortingLayerName = renderer.sortingLayerName;
    }
示例#2
0
    void RemoveFog(Vector2 playerPosition, FogTile tile, float scale, int dimensions, float minReveal, float maxReveal)
    {
        if (tile.pixels == null)
        {
            tile.pixels = tile.texture.GetPixels32();;
        }

        float pixelSize = scale / (float)dimensions;
        float halfSize  = scale / 2.0f;

        Vector2 pixelPosition = new Vector2();

        // Pixels start at bottom left corner and move upwards
        Vector2 pixelStart = new Vector2(tile.obj.transform.position.x - halfSize,
                                         tile.obj.transform.position.y - halfSize);

        for (int r = 0; r < dimensions; ++r)
        {
            for (int c = 0; c < dimensions; ++c)
            {
                pixelPosition.x = pixelStart.x + (c * pixelSize);
                pixelPosition.y = pixelStart.y + (r * pixelSize);
                float distance = Vector2.Distance(pixelPosition, playerPosition);

                if (distance <= maxRevealRadius)
                {
                    byte alpha = (byte)Mathf.Clamp(ConvertRange(distance,
                                                                minReveal, maxReveal, 0.0f, 255.0f), 0.0f, 255.0f);

                    var pixelIndex = r * dimensions + c;
                    if (tile.pixels[pixelIndex].a > alpha)
                    {
                        tile.pixels[pixelIndex].a = alpha;
                    }
                }
            }
        }

        tile.texture.SetPixels32(tile.pixels);
        tile.texture.Apply();
    }