C# では Luaでも Squirrelでもなく C# を使おうぜ☆(^~^)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Qiita と CoreServer に Lua(ルア) の記事を書いていたんだが
運営が気に入らんので消したんで Crieit に書き直すぜ☆
わたしは ルール としゃべってんのか、と思うときがあるよな☆ 態度が定義された人間相手の話しはつまらん☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Squirrel (スクワーレル)ではなく Lua でいいのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今どき Squirrel かだぜ☆ 流行ってる方使おうぜ☆」

Squirrel

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイトデザインが わかりづらいな……☆ Download は Webページの一番下にあるぜ☆
今どきは 最初にプログラムを触るときは Stable release (安定版) を選んでおくのが ふつう だろう☆」

The Squirrel

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 すると Source Forge(ソース・フォージ)に飛ばされるという……☆
ファイルをダウンロードできる物置サイトだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 .tar.gz ファイルをダウンロードしてしまったんだけど!
これ Linux 版じゃないの?!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 調べてみよう……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 C++言語ファイルが出てきた……☆ コンパイルして使えということかだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 今どきのゲーム屋は Unity勢 だろ☆
Unityに組み込めるのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Unity勢に要らね、と思われたら 流行らんよな、ゲーム屋界隈で☆
だいぶ前から ゲーム制作初心者にとっての メジャーな入り口だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Unityから見た グルー言語は C# か JavaScript の2択なんじゃないの?
Lua とか Squirrel とか使ってないんじゃないの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 NuGet で Squirrel をインストールできないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 調べてみよ……☆」

[Visual Studio 2019] - [ツール] - [NuGet パッケージ マネージャー] - [ソリューションの NuGet パッケージの管理] - [参照]

Squirrel

Squirrel.Windows

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 438K もダウンロードされているパッケージがあるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 開発者のPCにはインストールできるかもしれないが、
Unity での Squirrel の利用実績はどうなんだぜ☆?」

Squirrel

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑アセット・ストアには あるようだが……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 使って見りゃ分かるかだぜ☆ NuGet でインストールしてみようぜ☆?
Visual Studio 使ってて NuGet 使ってないやつなんか いないよな☆ 説明は不要だろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 using Squirrel; でコンパイル通るから もう使えるみたいだけど、何から始めたらいいの?」

Squirrel’s documentation

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑Document(ドキュメント)と書かれているものを探して、読めだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 おっ、読みやすい……、しかし Squirrel 書けるやつは プログラマーだよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 シナリオライターや、イラストレーター に使わせる スクリプト言語 ではないわね。
プログラミング未習得者が どれだけ 触れないか 見えてないのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 プログラマーが使う スクリプト言語 なんだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑Squirrel でスクリプトかいて、C# でどうやって実行すんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑グーグルは Squirrel の敵なのだろうか……、 SQuirreL ばっかり検索で出てくるぜ☆」

Squirrel Command Line

KIFUWARABE_80x100x8_01_Futu.gif
「 コマンドラインから実行するのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ゲーム本体のプロセスで動いている変数に干渉できないだろ☆」

Wiki

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どうやって スクリプト・ファイルを実行するのか……☆?」

Embedding Getting Started

KIFUWARABE_80x100x8_01_Futu.gif
「 C言語の例なら あるんだけどな☆」

test

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ここに並んでるのは C# じゃないの?」

Squirrel.Windows

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑じゃあ Zip でダウンロードして C# で実行してみようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 .sln ファイルがあるんで Visual studio 2019 で開いてみたが C++ の開発環境のインストールを求められるな☆
じゃあ インストールしよ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 マルチプラットフォームの Unity が何とも知らん C++ なんか対応するのかだぜ☆?」

Unity3D #1142

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑どうなんだろな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あっ、PCの再起動がいるじゃないか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ ソリューションをコンパイル……、あっ、エラーが8個もあるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Core.csproj というプロジェクトが無いみたいよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何だぜそれ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ソリューションは Visual Studio 2017 をターゲットにしてあるみたいだな……☆
プロパティを開いて Visual Studio 2019 に変えてやろう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Core.csproj はどうすんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 NuGet でインストールできないか調べてみようぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 色んな Core がある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Core を消すと、 using NuGet; がコンパイル・エラーになったぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 C# Mono か何かなんじゃないの?」

Install Process

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Setup.exe というのが どこかにあるらしい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どこにあんのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Core が無いと using SharpCompress.Compressors; もコンパイル・エラーになってるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 DeltaCompressionDotNet と、 Mono.Cecil と、 SharpCompress と、 Splat を NuGet でインストールしろということらしいが、
説明がない☆ 説明がないのは嫌☆ Squirrel とは仲良くなれる気はしない☆」

C# で使える一番いいグルー言語は C

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Lua も Squirrel も さくっと使えないんだな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 C# が一番いいグルー言語なんじゃないのか☆」

Roslyn for Scripting – C#プログラム内でC#で書かれたスクリプトを実行しよう

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんということだぜ☆ 時代は Roslyn なのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Microsoft.CodeAnalysis.CSharp.Scripting パッケージでもインストールするか……☆」

using Microsoft.CodeAnalysis.CSharp.Scripting; // Roslyn使うなら .Net Framework 4.6 以上☆(^~^)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 using して……☆」

            // C#を使った外部スクリプトのテストだぜ☆(^~^)
            CSharpScript.RunAsync("System.Console.WriteLine(\"Hello Roslyn For Scripting!!\");").Wait();

            Task<double> result = CSharpScript.EvaluateAsync<double>(@"
                var pi = 3.14;
                var r = 5;
                pi * r * r
                ");
            result.Wait();
            Console.WriteLine(result.Result);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コンパイルして実行……☆」

Output:

Hello Roslyn For Scripting!!
78.5

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あっ、動いた☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そのスクリプトは 呼び出し元の変数を使えるの?」

            // 次のテスト☆(^~^)
            {
                var textList = new List<String>();

                // 通常のインスタンスメソッド呼び出し
                textList.Add("プログラムから文字列追加");

                // スクリプトから、インスタンスを利用。
                CSharpScript.RunAsync("Add(\"スクリプトから文字列追加\");", globals: textList).Wait();

                // List<String>に格納されている文字列を出力
                foreach (var text in textList)
                {
                    Console.WriteLine(text);
                }
            }

Output:

プログラムから文字列追加
スクリプトから文字列追加

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 使えるようだが 仕組みが分からんな……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 this が textList を指しているんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 this 使ったら たいへん大事なエラーが起こってしまった☆」

<書きかけ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事