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


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

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

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


* ClojureCLRの環境設定 [#ne37fae1]
Windows 11環境での最新の.NET向けのインストール手順です:

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


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

*** 調べるコード [#h0eeb472]
 // DebugCheckScript.cs として保存
 using UnityEngine;
 
 public class DebugCheckScript : MonoBehaviour
 {
     void Start()
     {
         Debug.Log($"Unity's .NET Version: {System.Environment.Version}");
     }
 }

*** 実行方法: [#w86bcf55]

- Hierarchy ウィンドウで右クリック
- Create Empty を選択
- 作成したGameObjectの名前を「DebugCheck」などに変更
- Inspector ウィンドウの Add Component ボタンをクリック
- 作成した「DebugCheckScript」を選択


*** テストの実行: [#j2a03404]
- Unity エディタの再生ボタン(Play)を押す
- Console ウィンドウに.NETバージョンが表示されます

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

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


*** Clojureの過去バージョンのファイルがあるところ [#md00802a]
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

をダウンロードする


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

powershellで以下を実行
 # グローバルにClojure.Mainをインストール
 dotnet tool install --global Clojure.Main

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

 Clojure.Main

*** REPLで終了する命令 [#u337ed5f]
 (System.Environment/Exit 0)
または
  (Environment/Exit 0)
または
 Ctrl + c

*** REPLでとりあえず試してみたコマンド [#z99e6867]
 ;; 基本的な計算
 (+ 1 2 3)
 
 ;; 文字列出力
 (println "Hello, ClojureCLR!")
 
 ;; 簡単な関数定義
 (defn greet [name]
   (str "Hello, " name "!"))
 
 ;; 関数の実行
 (greet "Unity")


* 参考にしたかもしれない記事 [#r2c1a3ae]

** ClojureCLRあれこれ [#s1629b4e]
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.Build | ClojureCLR の実行ファイルをダウンロードしてプロジェクトに追加するビルドタスクを追加します。 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Build) |
| clojure.clr.interop | Clojure.CLR の相互運用ユーティリティ | [NuGet](https://www.nuget.org/packages/clojure.clr.interop) |
| ClojureCLR.Lib | ClojureCLR.Lib | [NuGet](https://www.nuget.org/packages/ClojureCLR.Lib) |
| ClojureCLR.Source | ClojureCLR のソースコード | [NuGet](https://www.nuget.org/packages/ClojureCLR.Source) |
| Clojure.CLR.FSharp | Clojure CLR のための F# 相互運用機能を提供します。 | [NuGet](https://www.nuget.org/packages/Clojure.CLR.FSharp) |
| Clojure.CLR.NUnit | Clojure.CLR NUnit ユーティリティ | [NuGet](https://www.nuget.org/packages/Clojure.CLR.NUnit) |
| Clojure.CLR.Tests | Clojure.CLR テストユーティリティ | [NuGet](https://www.nuget.org/packages/Clojure.CLR.Tests) |
| Clojure.CLR.Tools | Clojure.CLR ツール | [NuGet](https://www.nuget.org/packages/Clojure.CLR.Tools) |
| Unclr | ClojureCLR のためのユーティリティライブラリ | [NuGet](https://www.nuget.org/packages/Unclr) |
| ClojureCLR.Depot | ClojureCLR モジュールのリポジトリ | [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.Topshelf | Topshelf を使用して ClojureCLR コードを Windows サービスとして実行するためのシンプルなラッパー。 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Topshelf) |
| ClojureCLR.ConsoleTest | ClojureCLR.ConsoleTest | [NuGet](https://www.nuget.org/packages/ClojureCLR.ConsoleTest) |
| ClojureCLR.WPF | ClojureCLR.WPF | [NuGet](https://www.nuget.org/packages/ClojureCLR.WPF) |
| Clojure.CLR.TypeProvider | Clojure CLR のための型プロバイダー | [NuGet](https://www.nuget.org/packages/Clojure.CLR.TypeProvider) |
| ClojureCLR.Reactive | ClojureCLR 用の Reactive Extensions | [NuGet](https://www.nuget.org/packages/ClojureCLR.Reactive) |
| clojure-clr-contrib | Clojure CLR 用のコミュニティが提供するライブラリ | [NuGet](https://www.nuget.org/packages/clojure-clr-contrib) |
| ClojureCLR.Extras | ClojureCLR のためのユーティリティ関数のコレクション | [NuGet](https://www.nuget.org/packages/ClojureCLR.Extras) |
| ClojureCLR.Logging | ClojureCLR 用のロギングの抽象化と実装 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Logging) |
| ClojureCLR.Dynamic | ClojureCLR 用の動的相互運用機能 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Dynamic) |
| ClojureCLR.Schema | ClojureCLR 用のスキーマ検証および生成 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Schema) |
| ClojureCLR.Spec | ClojureCLR 用の Spec ライブラリ | [NuGet](https://www.nuget.org/packages/ClojureCLR.Spec) |
| ClojureCLR.Async | ClojureCLR 用の非同期プログラミング構造 | [NuGet](https://www.nuget.org/packages/ClojureCLR.Async) |
| clojure.clr.test-adapter | Clojure CLR 用のテストアダプター | [NuGet](https://www.nuget.org/packages/clojure.clr.test-adapter) |

だから何?

* UnityプロジェクトでClojure CLRを設定する手順 [#k7bb59c8]
** DLLの準備 [#n4b91bb0]
*** UnityプロジェクトのAssets/Pluginsフォルダを作成 [#v020a989]
 Assets/
   Plugins/
     ClojureCLR/
*** 必要なDLLの配置 [#dc1a8108]
 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フォルダを丸ごとコピーする [#tbef9883]

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


** githubのclojureのwiki [#jbc56054]
https://github.com/clojure/clojure-clr/wiki

* その他 [#o1907275]
Unityの外部IDの設定項目は、[編集] - [環境設定] - [外部ツール] - [外部のスクリプトエディター]で変更できる
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS