🌱

Unity AIを使ってみた所感

に公開

はじめに

AIについてどう学んでいこうか悩んでる時に、そういえばUnity AIがベータ機能として出てたので勉強も兼ねた所感となります。

開発環境

  • Unity 6000.2.0b12

前置き

  • Unity自体の事前知識がある状態での学習となります。

Unity AIについて

  • Unity6.2のβに導入された生成AIツール
  • Unityと連携して、シーンの操作、画像生成、スクリプトの実装などがAIで出来るようになる
  • ポイントという要素があり、AIを利用することで消費される仕組み
  • β版だからか、最初から25000付与されており、画像生成1回で10減ってた
  • 規約として、商用や製品向けのプロダクトでは利用不可(正式導入されたら大丈夫だと思われる)
  • 詳しくは Unity Generators Manual

スプライト生成

テスト

簡単なボタン素材を生成してみる。
Unity上部の AI -> Generate New -> Sprite を選択し、UIを作成したいので、
Add More Controls To Prompt -> GameUI に、Prompt は以下に設定して Generate

設定 結果

背景が邪魔なので同じウィンドウ内にあるRemove BGで背景を消す。

良い感じに消してくれてる様子。
後はSpriteEditorでSpriteModeをMultipleにした後にSliceすれば使えそうだった。

結果

  • UI周りに対しては使えそうな内容だった
  • PromptもUI以外に、種類があるのも良かった
  • 背景除去やスケール調整などの機能もあったため、細かい修正も行えそう

サウンド生成

テスト

スプライト同様に AI -> Generate New -> Sound から作成。
wavファイルはアップロード出来なさそうなので成果物は割愛。

結果

  • 生成時に設定できるDurationの最低値が1にしか設定出来ないため、
    ボタンタップなどの極短なサウンドは生成出来なさそう
  • 生成自体は出来るが、無音の余白が出来るため、Trimで切るなど、ひと手間必要そう
  • ステージクリアや演出に使うサウンド等、数秒のものを作るには良さそう
  • 正直フリー素材で出回ってるサウンドのほうが色々丁度良さそうなので、
    サウンドが見つからない場合とかに使ったりしそう?

アシスタント

UIの作成

UIの素材をアタッチした状態で、/run UIのボタン配置をしてください
とお願いしたら、ボタン配置の処理を用意してくれたが、
/run この素材を使って良い感じにメニュー画面を作ってください
とお願いすると、ボタン配置のみだったため抽象的な内容だと難しいらしい。

シェーダー作成

今回はボタンが明滅するようなシェーダーの作成をお願いする。
アシスタントに /run このボタンを明滅させるシェーダーを書いてください で出力。
以下のコードが出来た。

TestShader.shader
// 2025/11/10 AI-Tag
// This was created with the help of Assistant, a Unity Artificial Intelligence product.

Shader "Custom/BlinkingButtonShader"
{
    Properties
    {
        _MainTex ("Main Texture", 2D) = "white" {}
        _BlinkColor ("Blink Color", Color) = (1, 1, 1, 1)
        _BlinkSpeed ("Blink Speed", Float) = 1.0
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" }
        LOD 200

        Pass
        {
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _BlinkColor;
            float _BlinkSpeed;

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // Sample the main texture
                fixed4 col = tex2D(_MainTex, i.uv);
                
                // Calculate the blink effect based on time
                float blink = abs(sin(_Time.y * _BlinkSpeed));
                
                // Blend between the main texture color and the blink color
                col.rgb = lerp(col.rgb, _BlinkColor.rgb, blink);
                return col;
            }
            ENDCG
        }
    }
    FallBack "Transparent/Diffuse"
}

このシェーダーファイルを保存して、任意のマテリアルに設定すれば反映された。

感想

  • 画像生成は十分使えそうな内容だったため、使ってみても良さそう
  • コード生成についても、簡単な処理であれば使う価値はある
  • アシスタントは抽象的な質問だと難しいため、細かく指示する必要がある様子
  • 簡単なボタン配置などについてはUnityに既に機能として実装されてるのでそっちを使ったほうが早い
    • 初心者の方には使えそうだが、Unityの機能を覚えたほうが後々良い気もするので、悩ましい所
  • β版の関係でポイントが枯渇しなかったが、正式リリースでどういったフローになるかは気になった
91works Tech Blog

Discussion