Code to draw animated circle I used:
using SkiaSharp;
using UnityEngine.UIElements.Experimental;
namespace UnityEngine.UIElements
{
public class SkiaCanvas : VisualElement
{
public new class UxmlFactory : UxmlFactory<SkiaCanvas>
{
}
SKImageInfo info;
SKSurface surface;
SKCanvas canvas;
SKShader shader;
SKPaint gradientPaint;
Texture2D texture;
TextureFormat format;
ValueAnimation<float> animation;
public SkiaCanvas()
{
info = new SKImageInfo(256, 256, SKColorType.RgbaF32);
surface = SKSurface.Create(info);
canvas = surface.Canvas;
shader = SKShader.CreateSweepGradient(
new SKPoint(info.Rect.MidX, info.Rect.MidY),
new[] {SKColors.Gray, SKColors.WhiteSmoke},
null
);
gradientPaint = new SKPaint
{
Shader = shader,
StrokeWidth = 30,
Style = SKPaintStyle.Stroke,
IsAntialias = true
};
canvas.DrawCircle(128, 128, 98, gradientPaint);
texture = new Texture2D(info.Width, info.Height, TextureFormat.RGBAFloat, false, true);
style.backgroundImage = Background.FromTexture2D(texture);
animation = experimental.animation
.Start(0, Mathf.PI * 2, 1000, UpdateTexture)
.KeepAlive()
.Ease(Easing.Linear)
.OnCompleted(() => { animation.Start(); });
}
void UpdateTexture(VisualElement thisElement, float angle)
{
canvas.Clear();
canvas.ResetMatrix();
canvas.SetMatrix(SKMatrix.CreateRotation(-angle, 128, 128));
canvas.DrawCircle(128, 128, 98, gradientPaint);
var pixmap = surface.PeekPixels();
texture.LoadRawTextureData(pixmap.GetPixels(), pixmap.RowBytes * pixmap.Height);
texture.Apply(false, false);
MarkDirtyRepaint();
}
}
}
Also I uploaded skia libraries to easily drop them in project and execute example.
In case you are not okay downloading and executing some random dlls from random sources, link for nuget with SkiaSharp - NuGet Gallery | SkiaSharp 2.80.1.
My packages:
{
"dependencies": {
"com.unity.2d.sprite": "1.0.0",
"com.unity.collab-proxy": "1.2.16",
"com.unity.ide.rider": "1.1.4",
"com.unity.ide.vscode": "1.1.4",
"com.unity.test-framework": "1.1.9",
"com.unity.textmeshpro": "2.0.1",
"com.unity.timeline": "1.2.10",
"com.unity.ugui": "1.0.0",
"com.unity.ui.builder": "1.0.0-preview.3",
"com.unity.ui.runtime": "0.0.4-preview",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.cloth": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.screencapture": "1.0.0",
"com.unity.modules.terrain": "1.0.0",
"com.unity.modules.terrainphysics": "1.0.0",
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.umbra": "1.0.0",
"com.unity.modules.unityanalytics": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.unitywebrequesttexture": "1.0.0",
"com.unity.modules.unitywebrequestwww": "1.0.0",
"com.unity.modules.vehicles": "1.0.0",
"com.unity.modules.video": "1.0.0",
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
}
6214952–683198–SkiaSharp.zip (3.48 MB)