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>.snupkg
Godot.NET.Sdk.<version>.nupkg
Godot.SourceGenerators.<version>.nupkg
GodotSharp.<version>.nupkg
GodotSharp.<version>.snupkg
GodotSharpEditor.<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フォーラムにて質問を投稿してください!