こんにちは! 今回はUnityデスクトップマスコットキャラクターをつくってみましょう。実はUnityはゲーム開発だけではなく、デスクトップアプリや常駐ツールのような用途にも柔軟に使うことができます。

3D表現や入力制御、外部ライブラリとの連携まで1つの環境で完結できるのは、Unityならではの強みですね。サンプルコードも一緒に紹介するので、Unityでこんなアプリもつくれるんだなと、参考になれば嬉しいです!

記事の目次

    黒河 建

    ボーンデジタルのテクニカルサポート担当。前職ではIT企業にて基幹システムの導入に従事。現在はRevitを中心に、建築業界向けのサポート業務を担当している。
    X:@BD_SoftwareDiv

    ※本記事は、月刊『CGWORLD + digital video』vol.331(2026年3月号)掲載の連載「TECH ROOM:このソフト、どこまでやれる?」を再編集したものです。

    INFORMATION

    Unity(ユニティ)


    ゲームや映像、建築、XRなど幅広い分野で使われるリアルタイム3D開発プラットフォーム。直感的なエディターとC#による開発環境を備え、複数のプラットフォームへ効率良くコンテンツを展開できる。個人から大規模チームまで、アイデアを素早く形にする制作環境を提供。

    www.borndigital.co.jp/product/unity

    Step① デスクトップにオブジェクトを表示してみよう!

    今回は「ユニティちゃん」をモデルにした、AIデスクトップマスコットの制作を追っていきます。まずは画面透過処理を行い、オブジェクトのみをデスクトップ上に表示する処理をつくるところからです。

    今回は「Windows API (WinAPI)」を利用するため、Windows上でしか動作しない点はご容赦ください。画面透過の処理については、下記URLのページでも詳しく記載があります。透過処理のスクリプトもしっかり記載されていますので、合わせて参考にしてみてください。

    「【Unity】ビルドしたウインドウを透明化する方法を紹介します!」(うにぉらぼ)
    unixo-lab.com/unity/transparent_window.html

    ▲まずは新規Unityプロジェクトを作成したら[Hierarchy→MainCamera]を選択し、Inspectorから[Rendering→Post Processing]のチェックを外します。[Environment→Background Type]は「Solid Color」に変更し、色は「黒(#000000)」に設定。後のコードで黒色を指定して透過処理を行うためです
    ▲[Output→HDR Rendering]も「Off」に設定します
    ▲[Edit→Project Settings→Player→Resolution and Presentation]にあるResolution内の[Fullscreen Mode]を「Windowed」に変更し、Standalone Player Options内の[Use DXGI flip model swapchain for D3D11]のチェックを外します。パフォーマンスに関する警告が表示されますが、アプリのウインドウ制御に必要な設定です
    ▲[Player→Other Settings→Rendering]にある[Auto Graphics API for Windows]のチェックを外し、その下の[Graphics API for Windows]のリストの「Direct3D11」を、一番上に変更します(※エディタの再起動が必要です)
    ▲[Project Settings→Other Settings→Configuration→Active Input Handling]を「Both」に設定します(※エディタの再起動が必要です)。それから、ウインドウの透過処理を行うScriptを作成します。ソースコードはサンプルをご参照ください!
    サンプルコード「TransparentBuildController.cs」
    ▲作成したScriptを実行するため、以下の手順でGameObjectを配置します。Hierarchy上で右クリックし、[Create Empty]を選択します。本例では、名前は「TransparentBuildController」とします
    ▲透過処理を行うC#サンプルコードを、GameObject側のTransparentBuildControllerにアタッチします
    ▲Scene上に任意のオブジェクトを配置し(カメラに映るようにします)、プロジェクトをビルド後、「.exe」を実行してオブジェクト以外が透過されているかを確認します。赤い枠で囲まれている箇所が、「.exe」を起動したものになります

    Step② UnityからローカルLLMにアクセス!

    キャラクターを透過処理させて表示するだけでは味気ないので、ここにローカルLLMを利用して、不定期に呟くような処理を追加してみましょう。

    今回はユーザーからの入力や会話などのインタラクティブな処理は行いません。ローカルLLMを実装すると、外部サーバとの通信を行わず、全ての文章生成処理がローカル環境内で完結します。まずは、環境構築を行なっていきましょう。

    ▲[Edit→Project Settings→Package Manager]を開き、[Scoped Registries]にてName・URL・Scope(s)を画像通りに設定して保存
    ▲続いて [Player→Other Settings→Configuration]にある[Api Compatibility Level]を「.NET Framework」に変更します
    ▲[Window→Package Management→Package Manager]を開き、[My Registries→OpenUPM]を選択して[Python.Runtime→pythonnet]をインストールします。「pythonnet」は、C#(.NET)からPythonを直接呼び出したり、逆にPythonから.NETライブラリを使えるようにするためのブリッジライブラリです。その後、Pythonのダウンロードページから「Windows embeddable package」をダウンロードします。pythonnet3.0.5では3.7~3.13までをサポートしていますが、ここでは3.12.7をダウンロードしましょう
    ▲ダウンロードしたZipを解凍後、Unityプロジェクトを開き、「Assets/StreamingAssets」フォルダ(ない場合は作成)へ、解凍した「python-3.12.7-embed-amd64」を配置します
    Unityプロジェクトのディレクトリ>cd Assets/StreamingAssets/python-3.12.7-embed-amd64
    
    // pipの導入
    curl -L https://bootstrap.pypa.io/get-pip.py | .\python

    ▲フォルダ内にある「python312._pth」をテキストエディタで開き、「# import site」の「#」を消去して、保存します。その後、CLIツールを開き、Unityプロジェクトのディレクトリに移動後、上のコードを順に実行します

    // カレントディレクトリは "\Assets\StreamingAssets\python-3.12.7-embed-amd64"
    .\Scripts\pip install <ダウンロードした.whlファイルのPath>
    
    //入力例: .\Scripts\pip install "C:\Users\<Username>\Downloads\llama_cpp_python-0.3.2-cp312-cp312-win_amd64.whl"

    ▲GitHubページから「llama_cpp_python-0.3.2-cp312-cp312-win_amd64.whl」をダウンロードします。ダウンロード後に、再度CLIツールで上のコマンドを実行します

    ▲本例では、Hugging Faceから.ggufファイル「Llama-3-ELYZA-JP-8B-GGUF」をダウンロードします。.ggufファイルのものであれば、モデルは変更可能です
    ▲ダウンロード後、UnityプロジェクトのAssets/StreamingAssetsへ配置します。今回は、GGUFフォルダを作成してそこに配置しています

    Step③ Pythonを通してローカルLLMを動作!

    ここまでのセットアップが完了したら、Pythonを利用しローカルLLMを動作させるScriptを作成します。Python実行のためのC#スクリプトとPythonスクリプトを記述する必要がありますので、サンプルコードをぜひ確認してみてください。あとは、作成したスクリプトをGameObjectにアタッチするだけです!

    ▲ポイントは、PythonのローカルLLM実行スクリプトを読み込み、モデル推論を行うことです。下にサンプルコードをアップしているので、ご参照ください

    C#サンプルコード①:「LocalLLMManager.cs」
    C#サンプルコード②:「PythonRuntimeInitializer.cs」
    Pythonサンプルコード:「localLlmPython.py」

    ▲作成したScriptを実行するため、GameObjectを配置していきます。Hierarchy上で右クリックし、Create Emptyを選択します。本例では、名前を「LocalLLMManager」としています
    ▲作成したローカルLLMを動作させるC#サンプルコードを、GameObject側のLocalLLMManagerへアタッチします
    ▲ここまでの手順で、オブジェクト以外を透過する処理と、Console上にメッセージを自動的に表示する処理が実装できました。もし、ビルド版でメッセージを画面上に表示させたい場合は、UI上にメッセージを表示するように実装してみてください
    ▲今回はご紹介できませんでしたが、モーションも追加するとよりマスコット感が増すので、こちらもぜひ試してみてください!

    次回予告|TouchDesigner

    次回は、TouchDesignerを取り上げます。プログラミングの知識がない方でも「映像、3Dグラフィックス、音、センサー入力、外部デバイス」などを直感的に組み合わせることができるソフトです。

    インタラクティブなコンテンツやVJに使用されるソフトというイメージだけをもっている方も多いかと思うので、簡単な作例を使って制作の実演をしてみたいと思います。慣れてくると様々なアイデアが浮かんでくる楽しいソフトなので、魅力をお伝えできれば嬉しいです。お楽しみに!

    INFORMATION

    月刊『CGWORLD +digitalvideo』vol.331(2026年3月号)


    特集:デジタルファッション制作ハンドブック2026
    定価:1,540円(税込)
    判型:A4ワイド
    総ページ数:112
    発売日:2026年2月10日

    詳細・ご購入はこちら

    SUPPORT ROOM

    ■気になるソフトウェアがある方
    製品の購入や導入におけるご質問はこちらからお寄せください。

    ■すでにソフトウェアを活用中の方
    使用におけるお困りごとやご質問はこちらからお寄せください。

    TEXT_中島真之介/Shinnosuke Nakajimama(ボーンデジタル)、黒河 建/Takeru Kurokawa(ボーンデジタル)
    EDIT_李 承眞/Seungjin Lee(CGWORLD)、高橋拓也/Takuya Takahashi(CGWORLD)