C#対応版spine-godotのセットアップ
October 2nd, 2023
このブログ記事ではspine-godotでC#を使い始めるために必要なステップと、GDScriptを使用する場合とどのように異なるのかを簡単に説明します。
インストール方法
C#に対応しているビルド済みのGodot4.1エディタとエクスポートテンプレートバイナリはspine-godotランタイムのドキュメントからダウンロードできます。基本的なインストール方法についてはドキュメントに従ってください。

C#プロジェクトのセットアップ
C#対応のGodotエディタバイナリを使用する場合、新しいGodotプロジェクトをセットアップする際に、追加のステップを踏む必要があります。
1. Godotプロジェクトの作成
まず、ダウンロードしたC#対応のGodotエディタバイナリを使用して新しいGodotプロジェクトを作成します。

「Failed to load .NET runtime」エラー
Godotエディタが.NETランタイムのロードに失敗すると、起動時に以下のようなエラーメッセージが表示されます:

これが表示された場合、メッセージ内で説明されている通り、6.0以降の.NET SDK以降をMicrosoftの公式ダウンロードサイトからインストールしてGodotを再起動してください。
2. godot-nugetフォルダの作成
Godotを一度閉じて作成したプロジェクトのフォルダを開いてください。そしてルートディレクトリに godot-nuget という新しいフォルダを作成します。

3. C#アセンブリのコピー
次に、Godot C# アセンブリを godot-nuget フォルダにコピーします。WindowsまたはLinuxを使用されている場合、必要なアセンブリはダウンロードしたGodotエディタのZIPファイル内で見つけられます:
- Windows:
godot-editor-windows-mono.zip\GodotSharp\Tools\ - Linux:
godot-editor-linux-mono.zip/GodotSharp/Tools/

macOSを使用している場合:
- macOS: Finder上で
Godot.appを右クリックして、Show Package Contents(パッケージの内容を表示)を選択してContents/Resources/GodotSharp/Tools/を開きます。

以下のファイルを godot-nuget フォルダにコピーします:
GodotSharpEditor.<version>.snupkgGodot.NET.Sdk.<version>.nupkgGodot.SourceGenerators.<version>.nupkgGodotSharp.<version>.nupkgGodotSharp.<version>.snupkgGodotSharpEditor.<version>.nupkg
<version>の部分はダウンロードしたGodotのバージョンによって異なります。例: 4.1.1.

4. nuget.configファイルの作成
最後に、プロジェクトのルートディレクトリに以下の内容で nuget.config という新しいファイルを作成します:
<packageSources>
<!-- package source is additive -->
<add key="godot-nuget" value="./godot-nuget" />
</packageSources>
</configuration>

これは godot-nuget ディレクトリをNuGetパッケージのパッケージソースとして設定します。これにより、NuGetパッケージレジストリから公式のGodot C#アセンブリを取得する代わりに、spine-godotランタイム用のC#バインディングが含まれている godot-nuget ディレクトリのアセンブリが使用されるようになります。
これで再びGodotでプロジェクトを開くと、GDScriptの代わりに、Godotおよびspine-godotのC# APIを使用することができます!

スケルトンをC#でアニメーションさせる
こちらはSpineSpriteノードにアタッチされたC#スクリプトでSpineスケルトンをアニメーションさせる簡単なコードの例です:
C#:
using System;
public partial class SpineSprite : SpineSprite {
public override void _Ready () {
GetAnimationState().SetAnimation("run", true, 0);
}
}
GDScriptで書かれた同じコードと比較すると、各APIがPascalCaseを使用し、C#のコード規約に従って最後にセミコロンを必要とする以外は、ほとんど違いはありません。
GDScript:
func _ready():
get_animation_state().set_animation("run", true, 0)
GDScriptでは、@onreadyアノテーションを使って関数の外側でスケルトンを取得できますが、C# ではクラス定義の中でAPIを呼び出すことはできないので、関数の中で取得する必要があります。以下は、スケルトンを反転させアニメーションをキューするためのコードをC#で書いた場合とGDScriptで書いた場合の比較です:
C#:
using System;
public partial class SpineSprite : SpineSprite {
private SpineSkeleton spineSkeleton;
private SpineAnimationState spineSpriteAnimState;
public override void _Ready () {
spineSkeleton = GetSkeleton();
spineSpriteAnimState = GetAnimationState();
spineSkeleton.SetScaleX(-1);
spineSpriteAnimState.SetAnimation("idle", true, 0);
spineSpriteAnimState.AddAnimation("run", 2, true, 0);
}
}
GDScript:
@onready var spineSkeleton : SpineSkeleton = get_skeleton()
@onready var spineSpriteAnimState : SpineAnimationState = get_animation_state()
func _ready():
spineSkeleton.set_scale_x(-1)
spineSpriteAnimState.set_animation("idle", true, 0)
spineSpriteAnimState.add_animation("run", 2, true, 0)
GDScriptからC#へのAPIのマッピング方法の詳細については、Godot C#のドキュメントを参照してください。
C#用の例
C#対応版spine-godotのための例を確認したり試したりするには:
- spine-runtimes Gitリポジトリをクローンするか、最新バージョンをZIPとしてダウンロードして解凍してください。
spine-runtimes/spine-godot/example-v4-csharp/フォルダを開いて、project.godotファイルをクリックして開きます。

FileSystemドックのexamplesフォルダ以下で、C#を使った様々なサンプルシーンやスクリプトを見つけることができます。

C#対応版のspine-godotを使用していて何か困ったことがありましたら、遠慮なくSpineフォーラムにて質問を投稿してください!