目的

ClojureCLRのマクロをつかって、Visual Scriptingのかわりに、自分が理解しやすい言語を作って、プログラミングできるのでは?と思ったので、何も知らないけど、どうなるのかやってみる。この記事は、そのメモ。

結論:以下の記事は、C#からclojureをよびだそうとしてみた(文字通りの無謀な試み)がうまくいかなかった。が、以下のリポジトリでUnityとClojureの統合が試みられていることが分かった。

https://github.com/arcadia-unity/Arcadia

で、インストール方法の動画があった。OSX用の説明だったが、windows11で、現在もつかえるか検証する記事を別途作成しようと思った。

ClojureCLRの環境設定

Windows 11環境での最新の.NET向けのインストール手順です:

1. dotnet toolとしてインストールする方法(推奨):

ダウンロードするDLLの対応バージョンを調べるために、Unityで使っている.NETのバージョンを知る必要がある。

調べるコード

// DebugCheckScript.cs として保存
using UnityEngine;

public class DebugCheckScript : MonoBehaviour
{
    void Start()
    {
        Debug.Log($"Unity's .NET Version: {System.Environment.Version}");
    }
}

実行方法:

テストの実行:

これで現在のUnityプロジェクトで使用されている.NETのバージョンを確認できます。

自分はUnity2022でしたが、.NETは、4系でした。

Clojureの過去バージョンのファイルがあるところ

https://sourceforge.net/projects/clojureclr/files/

.NETが4系だったので、上記から。最新版だと、

clojure-clr-1.12.0-alpha11-Release-net4.6.2.zip

をダウンロードすればいいし、

安定板であれば、

clojure-clr-1.11.0-Release-net4.6.2.zip

をダウンロードする

間違った方法

以下は、現在インストールされている.NETのバージョンを考慮しないでインストールするやり方で、UnityにDLLをコピーしようとするとエラーになったやり方だ。以下はそうなるとは知らずに、書いた文章である。

powershellで以下を実行

# グローバルにClojure.Mainをインストール
dotnet tool install --global Clojure.Main

2. インストール後、REPLの起動: powershellで以下を実行.

Clojure.Main

REPLで終了する命令

(System.Environment/Exit 0)

または

 (Environment/Exit 0)

または

Ctrl + c

REPLでとりあえず試してみたコマンド

;; 基本的な計算
(+ 1 2 3)

;; 文字列出力
(println "Hello, ClojureCLR!")

;; 簡単な関数定義
(defn greet [name]
  (str "Hello, " name "!"))

;; 関数の実行
(greet "Unity")

参考にしたかもしれない記事

ClojureCLRあれこれ

10年以上前の記事か。。。 https://qiita.com/koji_yusa/items/9ca0f17677e8403cfb43

7つのパッケージしかなかったようですが、2025年2月時点では25のパッケージが出ていますので、AIにまとめさせました。

パッケージ名説明 (NuGet? からの抜粋)NuGet? リンク
---------
ClojureCLR.NET Framework 上で動作する Clojure[NuGet?](https://www.nuget.org/packages/ClojureCLR)
ClojureCLR.BuildClojureCLR の実行ファイルをダウンロードしてプロジェクトに追加するビルドタスクを追加します。[NuGet?](https://www.nuget.org/packages/ClojureCLR.Build)
clojure.clr.interopClojure.CLR の相互運用ユーティリティ[NuGet?](https://www.nuget.org/packages/clojure.clr.interop)
ClojureCLR.LibClojureCLR.Lib[NuGet?](https://www.nuget.org/packages/ClojureCLR.Lib)
ClojureCLR.SourceClojureCLR のソースコード[NuGet?](https://www.nuget.org/packages/ClojureCLR.Source)
Clojure.CLR.FSharpClojure CLR のための F# 相互運用機能を提供します。[NuGet?](https://www.nuget.org/packages/Clojure.CLR.FSharp)
Clojure.CLR.NUnitClojure.CLR NUnit ユーティリティ[NuGet?](https://www.nuget.org/packages/Clojure.CLR.NUnit)
Clojure.CLR.TestsClojure.CLR テストユーティリティ[NuGet?](https://www.nuget.org/packages/Clojure.CLR.Tests)
Clojure.CLR.ToolsClojure.CLR ツール[NuGet?](https://www.nuget.org/packages/Clojure.CLR.Tools)
UnclrClojureCLR のためのユーティリティライブラリ[NuGet?](https://www.nuget.org/packages/Unclr)
ClojureCLR.DepotClojureCLR モジュールのリポジトリ[NuGet?](https://www.nuget.org/packages/ClojureCLR.Depot)
clojure-clr.sdk.NET 用の clojure.clr.sdk ツールとライブラリが含まれています[NuGet?](https://www.nuget.org/packages/clojure-clr.sdk)
ClojureCLR.TopshelfTopshelf を使用して ClojureCLR コードを Windows サービスとして実行するためのシンプルなラッパー。[NuGet?](https://www.nuget.org/packages/ClojureCLR.Topshelf)
ClojureCLR.ConsoleTest?ClojureCLR.ConsoleTest?[NuGet?](https://www.nuget.org/packages/ClojureCLR.ConsoleTest)
ClojureCLR.WPFClojureCLR.WPF[NuGet?](https://www.nuget.org/packages/ClojureCLR.WPF)
Clojure.CLR.TypeProvider?Clojure CLR のための型プロバイダー[NuGet?](https://www.nuget.org/packages/Clojure.CLR.TypeProvider)
ClojureCLR.ReactiveClojureCLR 用の Reactive Extensions[NuGet?](https://www.nuget.org/packages/ClojureCLR.Reactive)
clojure-clr-contribClojure CLR 用のコミュニティが提供するライブラリ[NuGet?](https://www.nuget.org/packages/clojure-clr-contrib)
ClojureCLR.ExtrasClojureCLR のためのユーティリティ関数のコレクション[NuGet?](https://www.nuget.org/packages/ClojureCLR.Extras)
ClojureCLR.LoggingClojureCLR 用のロギングの抽象化と実装[NuGet?](https://www.nuget.org/packages/ClojureCLR.Logging)
ClojureCLR.DynamicClojureCLR 用の動的相互運用機能[NuGet?](https://www.nuget.org/packages/ClojureCLR.Dynamic)
ClojureCLR.SchemaClojureCLR 用のスキーマ検証および生成[NuGet?](https://www.nuget.org/packages/ClojureCLR.Schema)
ClojureCLR.SpecClojureCLR 用の Spec ライブラリ[NuGet?](https://www.nuget.org/packages/ClojureCLR.Spec)
ClojureCLR.AsyncClojureCLR 用の非同期プログラミング構造[NuGet?](https://www.nuget.org/packages/ClojureCLR.Async)
clojure.clr.test-adapterClojure CLR 用のテストアダプター[NuGet?](https://www.nuget.org/packages/clojure.clr.test-adapter)

だから何?

UnityプロジェクトでClojure CLRを設定する手順

DLLの準備

UnityプロジェクトのAssets/Pluginsフォルダを作成

Assets/
  Plugins/
    ClojureCLR/

必要なDLLの配置

Assets/Plugins/ClojureCLR/
  - Clojure.dll
  - Microsoft.Dynamic.dll
  - Microsoft.Scripting.dll

power shellでDLLを探すコマンド

Get-ChildItem -Path $env:USERPROFILE\.dotnet -Recurse -Filter "Clojure.dll"

利用する環境に応じてdllがあることがわかる。自分の場合は同名のDLLが3つでてきた。

後でわかったことだが、ここで出てくるバージョン名と、インストールしてある.NETのバージョンがあっていないと、Unloading broken assembly なんとか、エラーがでて、DLL消して、ちゃんとしたDLLを探してダウンロードしなくてはいけないということが分かった。

上記でバージョンがわかる(今回はnet6.0)ので、それに合わせてさらにその中のDLLの確認するコマンドを実行してみる

Get-ChildItem -Path "C:\Users\kh\.dotnet\tools\.store\clojure.main\1.11.0\clojure.main\1.11.0\tools\net6.0\any" -Filter "*.dll"

anyフォルダを丸ごとコピーする

dllファイル1つに対して、.metaファイルが自動生成されますが、Unityが管理するためのものなので、削除しないようにしましょう。

githubのclojureのwiki

https://github.com/clojure/clojure-clr/wiki

その他

Unityの外部IDの設定項目は、[編集] - [環境設定] - [外部ツール] - [外部のスクリプトエディター]で変更できる

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-02-11 (火) 13:43:10 (34d)