Skip to content
yokoe edited this page Oct 26, 2010 · 6 revisions

アチーブメント

  • ゲーム内で特定の条件を達成したかどうかを管理する仕組みがアチーブメントです。
  • 例:3連勝すると、「3連勝」アチーブメントが解放され、新しいキャラを使用可能になる

アチーブメントの登録

  • ゲーム内でアチーブメントの機能を利用したい場合には、あらかじめPANKIAのウェブ上でアチーブメントを登録しておく必要があります。
  • PANKIAウェブにログインしたら、アチーブメントを使用したいゲームを選び、編集メニューの中から「Achievements」を選びます。
  • 「add a new achievement」から新しいアチーブメントの登録を行います。
  • Nameにはアチーブメントの名前(「3連勝」など)を、Descriptionにそのアチーブメントの説明文(「3回連続でCPUに勝利する」など)を記入します。
  • Valueには整数でそのアチーブメントの得点を入力してください。
  • Secret?にチェックを入れると、そのアチーブメントは達成するまでDashboardのアチーブメント一覧には表示されなくなります。
  • ゲームの特定のバージョンでのみ使用可能なアチーブメントを作りたい場合は、Min Version / Max Versionを設定してください。
  • Imageにアチーブメントごとのアイコンを設定することができます。
  • アチーブメントを登録するとIDが発行されます。このIDを使ってゲームからアチーブメントを解放したり、解放されたかをチェックすることができるようになります。
  • アチーブメントはゲーム全体での合計ポイントが1000点以下になるように調整してください。

アチーブメント定義ファイル

  • アチーブメントの管理は基本的にはPANKIAサーバー上で行われますが、PankiaNetフレームワークではオフラインのときでもアチーブメント機能を利用できるようになっています。
  • アチーブメント/リーダーボードを使用するためには、下記の定義ファイルを管理画面から出力してプロジェクトに追加してください。

定義ファイルの作成

  • PANKIAウェブのゲーム編集画面で、Basic Informationタブを開くとページ下部にexport to plistリンクが現れます。
  • このリンクをクリックすると、PNAchievementsAndLeaderboardsSetting.plist(Ver.2ではPNOfflineSettings.plistに変更になります)が生成されダウンロードされます。
  • このファイルをプロジェクトのResourcesディレクトリに含めてください。

アチーブメントの解放

  • アチーブメントを解放するには+[PankiaNet unlockAchievement:]を呼びます。
-(void)unlockSomeAchievement:(id)sender
{
	[PankiaNet unlockAchievement:10]; //ID10番のアチーブメントを解放します
}
  • アチーブメントが解放されると、画面上部のノーティフィケーションが表示されます。
  • この時ノーティフィケーションがタップされるとダッシュボードが起動して、そのアチーブメントの詳細を見ることができます。
  • タップしてもダッシュボードを開きたくない場合は、PankiaNetのデリゲート先クラスで- (BOOL)shouldLaunchDashboardWithAchievementsViewを定義してください。
- (BOOL)shouldLaunchDashboardWithAchievementsView
{
	return NO;  // ノーティフィケーションをタップされてもダッシュボードを起動しないようにします
}
  • ノーティフィケーションを表示させたくない場合は、PankiaNetのデリゲート先クラスで-(BOOL)shouldShowNotificationを定義してください。
-(BOOL)shouldShowNotification
{
	return NO;  // ノーティフィケーションを表示させないようにします
}

アチーブメント達成状況の取得

個別のアチーブメントの達成状況

  • アチーブメントが達成/解放されたかどうかを取得するには、+[PankiaNet isAchievementUnlocked:]を使用します。
- (void)checkSomeAchievementUnlocked:(id)sender
{
	BOOL isAchievementUnlocked = [PankiaNet isAchievementUnlocked:10]; //ID 10番のアチーブメントが解放されているか調べます
	if (isAchievementUnlocked)
	{
		NSLog(@"アチーブメントは解放されています。");
	}
	else
	{
		NSLog(@"アチーブメントはまだ解放されていません。");
	}
}

全体の達成状況

  • あるいは+[PankiaNet getUnlockedAchievement]を使用して、すでに達成/解放しているアチーブメントの一覧を取得することもできます。
  • この関数は非同期で動作します。解放済みアチーブメントの一覧の取得が完了すると、デリゲートメソッド-(void)fetchUnlockedAchievementsDone:(NSArray*)achievementsが呼ばれます。
-(void) fetchUnlockedAchievements: (id)sender
{
	[PankiaNet fetchUnlockedAchievements];
}
-(void)fetchUnlockedAchievements:(NSArray*)achievements{
	for (PNAchievement* achievement in achievements){
		NSLog(@"%@ が解放されています", achievement.achievementTitle);
	}
}