untiy 程序生成一个扇形sprite

最近做一个潜入游戏其中有一些敌人面前会有一个扇形的检测范围,不同的敌人检测范围不同,需要策划同学来自行配置来控制扇形的范围。所以这里就选择了使用程序来成成扇形检测范围的纹理。

直接给出代码:

    /// 
    /// Generates the sprite.
    /// 
    /// SpriteRenderer.
    /// 扇形的半径.
    /// 扇形的展开范围(角度).
    /// 颜色.
    void GenerateSprite(SpriteRenderer sr, float size, float range,Color sectorColor) {
        float radius = size / 2;
        Texture2D t = new Texture2D((int)size,(int)size);
        Vector2 center = new Vector2(radius, 0);
        for (int w = 0; w < size; w++){  
            for (int h = 0; h < size; h ++){

                Color c;
                Vector2 v = new Vector2(w, h) - center;
                float alpha = 0f;

                float angle = GameCommon.GetAngle(Vector2.zero ,v);

                float dis = Vector2.Distance(v, Vector2.zero);
                if(angle > 90-range/2 && angle < 90 + range / 2 &&
                   dis > 20){
                    float rate = dis / size;
                    alpha = Mathf.Min(0.8f - rate*rate*rate,1);

                    if( Mathf.Abs(angle - (90 - range / 2)) < 1 || 
                       Mathf.Abs(angle - (90 + range / 2)) < 1){
                        alpha += 0.5f;
                    }
                    c = sectorColor * alpha * 0.8f;
                }else{
                    c = new Color(0, 0, 0, 0);
                }


                t.SetPixel(w,h,c);  
            }  
        }  
        t.Apply();  
  
        Sprite pic = Sprite.Create(t, new Rect(0, 0, size, size), new Vector2(0.5f, -0.2f));  
        sr.sprite = pic;  
    } 

效果:

untiy 程序生成一个扇形sprite_第1张图片

你可能感兴趣的:(unity)