Untiy 程序生成一个扇形sprite
发表于2019-01-23
类似王者荣耀中近程职业与远程职业攻击范围是不同的,类似这种扇形的检测范围是根据什么来实现的呢?多数情况下还是需要策划同学来自行配置来控制扇形的范围。这才有了本篇要和大家分享的使用程序来成成扇形检测范围的纹理。
直接给出代码:
/// <summary> /// Generates the sprite. /// </summary> /// <param name="sr">SpriteRenderer.</param> /// <param name="size">扇形的半径.</param> /// <param name="range">扇形的展开范围(角度).</param> /// <param name="sectorColor">颜色.</param> 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; }
实现效果如下: