* 目的 [#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の設定項目は、[編集] - [環境設定] - [外部ツール] - [外部のスクリプトエディター]で変更できる