質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3040閲覧

「Steam実績を既に持っているか」のデータを取得したい

Unity_ichigo

総合スコア23

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/06/03 05:21

編集2019/06/04 15:18

前提・実現したいこと

現在自作ゲーム内にSteam実績を実装していますが、
ゲーム内から特定の条件を達成しているのか確認する際に
Steam実績を持っているかどうかで判断すればいいんじゃないかと思いました。
しかし、Steam実績を既に持っているかを確認するAPIがわかりません
実績を獲得するところまではうまくできました。

詳しい方、教えてもらえると嬉しいです。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Steamworks; 5 6public class Guntama : MonoBehaviour 7{ 8 9 public GameObject teki3; 10 11 public string playerName; 12 public bool kaizyo = false; 13 14 15 16 17 void Start() 18 { 19 if (SteamManager.Initialized) 20 { 21 playerName = SteamFriends.GetPersonaName(); 22 SteamUserStats.ResetAllStats(true); 23 } 24 } 25 26 27 28 public void OnTriggerEnter(Collider col) 29 { 30 if (col.tag == "teki3" & teki3 != null) 31 { 32 kaizyo = SteamUserStats.GetAchievement("ACHIEVEMENT_yuuyake", out kaizyo); 33 Debug.Log("今の実績は" + kaizyo); 34 } 35 36 37 if (col.tag == "Untagged") 38 { 39 this.GetComponent<SphereCollider>().enabled = false; 40 Debug.Log("違う"); 41 } 42 43 } 44}
ちなみに以下のところをコメントアウトすると普通にFalseになります // kaizyo = SteamUserStats.GetAchievement("ACHIEVEMENT_newGun", out kaizyo);

悩んでること

kaizyoは常にTrueになります
実績を獲得していないのにです

補足情報(FW/ツールのバージョンなど)

Unity2018

Visual Studio 2015

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moredeep

2019/06/03 06:29

GetPlayerAchievementsで判断できると思うのですが。 > 実績を取るコマンドでは判定できませんでした... どう実装してみたのか、どういう結果を望んでいて、実際はどういう結果だったのか等々詳しく書いてください。
Unity_ichigo

2019/06/03 15:15 編集

そうなんですね! 実際は実績がもう一回呼び出されるだけでした... if(GetPlayerAchievements == true){ 処理 } でもできませんでした。 おそらく、GetPlayerAchievementsはWebAPIなのだと思います。
Unity_ichigo

2019/06/03 14:27

できませんでした...
sakura_hana

2019/06/04 02:40

https://teratail.com/help/question-tips こちらを参考に、もう少し具体的に質問文を編集してください。 「できませんでした」とは「エラーが出る」なのか「エラーは出ないがそのif文に入らない(つまりGetPlayerAchievementsは常にfalseである)」なのか「if文には入るがその後の処理が実行されない」なのかによって話が変わります。 Debug.Logを仕込む等して「少なくともこの部分が問題である」ぐらいの特定はされていると解決しやすいです。こちらも参考に→ http://tsubakit1.hateblo.jp/entry/2015/12/02/212958 ぱっと見ではSteamのSDKの導入すら出来ていないか、根本的な使い方を理解していないのではと思いますので、調べたこと・試したこと(自分でやったこと)も記載するといいかと思います。
Unity_ichigo

2019/06/04 15:11

エラーは出ませんが達成していない実績でも常にtrueになってしまいます 実績を取得するところまでは問題なくできます
guest

回答2

0

ベストアンサー

単純にoutの使い方の問題じゃないかなと思います。

C#

1bool isSuccess = SteamUserStats.GetAchievement("ACHIEVEMENT_yuuyake", out kaizyo); 2if (isSuccess) { 3 Debug.Log("今の実績は" + kaizyo); 4} else { 5 Debug.Log("実績取得に失敗しました"); 6}

こうでいいんじゃないかと。(もちろんif文にSteamUserStats.GetAchievement〜を直接突っ込んでもいいかと)

kaizyo = SteamUserStats.GetAchievement("ACHIEVEMENT_yuuyake", out kaizyo);
こうしてしまうと、
1.kaizyoの中にoutの結果(=この実績を達成しているかどうか)が入る
2.kaizyoの中にSteamUserStats.GetAchievement(~)の結果(=実績達成状況の取得に成功したかどうか)が入る
という順番で発生するので「2は常に成功している=kaizyoが常にtrueになる」のだと思います。

投稿2019/06/05 00:23

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2019/06/05 00:24

入力中にmoredeepさんが回答してました、だだ被り申し訳無い……
Unity_ichigo

2019/06/05 09:46

いえいえ、回答ありがとうございます! おかげさまでゲームが完成しそうです! 本当にありがとうございました!
guest

0

GetAchievementメソッド第二引数が実績の値で、戻り値は恐らく取得成否です。実績値を取得後、戻り値(実績取得は出来ている場合true)で上書きしているため、常にtrueになっているのではないかと。

if (col.tag == "teki3" & teki3 != null) { var ret = SteamUserStats.GetAchievement("ACHIEVEMENT_yuuyake", out kaizyo); if (ret) { Debug.Log("実績取得成功"); Debug.Log("今の実績は" + kaizyo); } else { Debug.Log("実績取得失敗"); } }

投稿2019/06/05 00:07

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Unity_ichigo

2019/06/05 09:47

的確な回答助かりました! 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問