とても簡単にできた。主に以下の3工程になる。
あらかじめどんな実績を設定するか決めておき、Steamworksで定義する。表示名やアイコンは後回しでいいとして、API名だけでも設定しておく。API名は実績を呼び出す時に使う名前。
↓から.unitypackageをダウンロードし、自分のUnityプロジェクトにインポート。
https://github.com/rlabrecque/Steamworks.NET/releases
Steamworks.NETのインポートからC#の書き方を参考にしたブログ
http://ktstg.blog.shinobi.jp/Entry/1012/
Naninovelではカスタムコマンドという機能を使うことで、ゲームスクリプトの中で自由にC#を実行できる。
プロジェクトの任意の場所に新しいC#スクリプトを追加。名前をAchievement.csにした。
以下を宣言。
using Steamworks;
using Naninovel;
using Naninovel.Commands;
[CommandAlias(“achievement”)]と設定することで、@achievement というコマンドをNaninovelスクリプトの中で扱えるようになる。
さらにpublic StringParameter name;で、nameというパラメーターを引数として使えるようにする。
[CommandAlias("achievement")]
public class Achievement : Command
{
public StringParameter name;
public override UniTask ExecuteAsync (AsyncToken asyncToken = default)
{
if (SteamManager.Initialized)
{
if (Assigned(name))
{
SteamUserStats.SetAchievement(name);//実績解除
SteamUserStats.StoreStats();//これも必要
}
}
return UniTask.CompletedTask;
}
}
これにより、Naninovelスクリプトの中の好きな場所(たとえばエンディングを迎えたタイミング)で
@achievement name:実績のAPI名
を書くことで実績を解除できる。