2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rive Unityのカスタム描画

2
Posted at

はじめに

本記事はQualiArts Advent Calendar 2025の11日目の記事になります。

去年は使用方法を紹介した記事を書きましたが、本日は続編として内部の描画APIを使って自由に描画する方法を紹介します。

Riveの概要

公式ページには様々な実用例が載っていますが、UIやグラフィックのアニメーションとインタラクションを作成するソフトウェアです。

こちらの記事を読めば、最低限の雰囲気がわかるかと思います。

Procedural Rendering

test1.png

Riveのカスタム描画機能(Procedural Rendering)は、描画スタイルのデータとパスのデータを指示してRive内部のエンジンに描画してくれる機能です。

ウェブの世界だと、CanvasRenderingContext2Dのように2dの描画ができます。

最低限実装

RiveはRenderTextureに描画するため、UGUIや3D空間のメッシュにも使えます。
プロジェクトの描画パイプラインによってカスタマイズはできますが、今回は一番最低限のシンプル実装を紹介します。

3d空間にQuadを生成します

Screenshot 2025-12-11 at 3.57.24 PM.png

QuadにRivePanelRiveTextureRendererをアタッチします

Rive Panel

描画するビューポット

Rive Texture Renderer

Rive PanelをRenderTextureに描画するコンポーネント
UnityのRendererがついているGameObjectにアタッチする

描画内容を作成します

Riveは描画内容をWidgetと呼びます。
今回はProcedural Rive Widgetを使うため、以下のようにGameObjectを作成します。

Screenshot 2025-12-11 at 4.15.46 PM.png

カスタム描画の処理スクリプトはProceduralDrawingというクラスを継承して作成します。

public class DrawingTest1 : ProceduralDrawing
{
    public override void Draw(IRenderer renderer, AABB frame, RenderContext renderContext)
    {
        // ここに描画を登録する
    }
}

先ほど作成したGameObjectにアタッチして、Procedural Rive Widgetに紐付けます。

Screenshot 2025-12-11 at 4.20.11 PM.png

最後は、簡単な図形を描いて確認しましょう。

public class DrawingTest1 : ProceduralDrawing
{
    public override void Draw(IRenderer renderer, AABB frame, RenderContext renderContext)
    {
        // 描画スタイルの指定
        var paint = new Paint
        {
            Color = new Color(0xFFFF0000),
            Join = StrokeJoin.Round,
            Thickness = 20.0f
        };

        // パスの指定
        var path = new Path();
        path.MoveTo(200, 200);
        path.LineTo(400, 200);
        path.LineTo(400, 400);
        path.LineTo(200, 400);
        path.Close();

        // 確定する
        path.Flush();

        // 描画コマンドとして登録する
        renderer.Draw(path, paint);
    }
}

実行結果

これでカスタム描画ができました!

Screenshot 2025-12-11 at 4.25.20 PM.png

描画のスタイル指定

Paintというクラスは様々な設定をカスタマイズできます。
簡単にいくつか紹介します。

色の指定:

こちらの色指定はUnityEngineのColorクラスではなく、Rive自前のクラスになります。
SerializeFieldに対応していないので、UnityEngine.ColorRive.Colorの変換Utilityを用意して適切に変換すると良いでしょう。

var paint = new Paint
{
    Color = new Color(0xFFFF0000),
};
0xFFFF0000 0xFF00FF00 0xFF0000FF
Screenshot 2025-12-11 at 4.46.02 PM.png Screenshot 2025-12-11 at 4.45.24 PM.png Screenshot 2025-12-11 at 4.45.43 PM.png

PaintingStyle

線だけ描画するか、色塗りするかを指定できます。

var paint = new Paint
{
    Style = PaintingStyle.Stroke
};
PaintingStyle.Stroke PaintingStyle.Fill
Screenshot 2025-12-11 at 4.50.41 PM.png Screenshot 2025-12-11 at 4.46.02 PM.png

Stroke関連

Thickness
線の太さ(幅)
値:float型

StrokeJoin
線を描画する際の接合部(角)の描画方法
値:Miter Round Bevel

StrokeCap
線の端点(始点・終点)の描画方法
値:Butt Round Square

Gradient

線形グラデーションと円形グラデーションがあります

var paint = new Paint()
{
    Gradient = new LinearGradient(
        new Vector2(200, 200), // 開始位置の座標
        new Vector2(400, 400), // 終了位置の座標
        new List<Color>() { new Color(0xFFFF0000), new Color(0xFF0000FF) } , // グラデーションカラー
        new List<float>() { 0f, 1f } // グラデーションカラーの位置 [0f(始点) ~ 1f(終点)]
    )
};
LinearGradient RadialGradient
Screenshot 2025-12-11 at 5.39.07 PM.png Screenshot 2025-12-11 at 5.40.58 PM.png

ちなみにStyle = PaintingStyle.Strokeを指定していれば、線だけにグラデーションを適用することも可能です。

パスの指定

Pathというクラスを使えば、ペンを操作しているようにパスを処理できます。
以下のメソッドはパスの基本操作になります。

MoveTo

(x, y) 座標へ作成済みのサブパスの始点を移動します。

public void MoveTo(float x, float y)

LineTo

現在のサブパスの終点を指定した (x, y) 座標へ直線で接続します。

public void LineTo(float x, float y)

QuadTo

現在のパスに 2 次元のベジェ曲線を追加します。

public void QuadTo(float cx, float cy, float x, float y)

CubicTo

現在のパスに 3 次元のベジェ曲線を追加します。

public void CubicTo(float ox, float oy, float ix, float iy, float x, float y)

Close

ペンの場所を現在のサブパスの最初の位置に戻します。現在の位置から最初の位置まで直線を引くことになります。パスの図形が閉じていたり、まだ 1 点だけだったりする場合は、このメソッドは何も実行しません。

public void Close()

Reset

全ての操作をリセットします。

public void Reset()

Flush

描画処理を確定し、そのあとResetが呼ばれます。

public void Flush()

まとめ

これでRive Unityのカスタム描画ができるようになりました。
ウェブのCanvasRenderingContext2Dと比べてまだ機能はすべて揃っていないですが、現時点でも自由に描画ができると思います。

まだEarly Accessですが、最近はScripting機能が登場し、かつてのFlashを彷彿とさせ、とてもワクワクしています。AIエージェントも使える予定なので、今後は期待できるかもしれないですね。

以上、11日目の記事でした。引き続きカレンダー投稿を宜しくお願いします。

おまけ

有名なGhostscript_Tiger.svgをRiveで描画した時の様子です。

tiger.gif

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?