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

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

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

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

Unity3D

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Unity

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

Q&A

1回答

1125閲覧

保存したプレイヤーデータが反映されない

hikaaaaaaaa

総合スコア19

C#

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

Unity3D

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Unity

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

0グッド

0クリップ

投稿2020/04/24 12:44

unity3Dでゲームを作成しています。

ゲーム内で使えるキャラクターを11体用意し、ショップ内で買えるように設定をし、そのキャラクターの選択のボタンを押すとタイトルに戻り、そのキャラクターが反映されるというスクリプトを組んだのですが、必ずCharacetrs[0]が反映されてしまいます。

ちなみにコンソール内にはDebug.Log(CnNumber)には0、Debug.Log(choname)は空白になってしまいます。
chNames内は別のスクリプトにて配列をストリング型で作成をしております。
おそらく、キャラクターの選択を行うショップのスクリプトの変数の受け渡しがうまくいっていないことが原因だと考えております。

何かアドバイスをいただけますと幸いです。よろしくお願いいたします。

タイトルに組んでいるコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.Linq; 6using UnityEngine.SceneManagement; 7using System; 8 9 10 11public class HomeSceneManager : MonoBehaviour 12{ 13 14 public GameObject[] Characters = new GameObject[11]; 15 16 public CharacterManager CharacterManagerScript; 17 18 19 20 21 void Awake() 22 { 23 24 PlayerPrefs.SetInt("coin", 100000); 25 26 } 27 28 void Start() 29 { 30 int CnNumber; 31 CnNumber = CharacterManagerScript.CharacterCN; 32 33 string choname = CharacterManagerScript.CHONAME; 34 35 36 if (PlayerPrefs.GetString("char") == "" || PlayerPrefs.GetString("char") == "people") 37 { 38 PlayerPrefs.SetString("char", "man-basketball-player"); 39 40 41 42 Instantiate(Characters[0], new Vector3(0.0f, 0.0f, 0.0f), 43 Quaternion.identity); 44 } 45 46 else 47 { 48 PlayerPrefs.GetString("char", choname); 49 50 Instantiate(Characters[CnNumber], 51 new Vector3(5.0f, 0.0f, 0.0f), 52 Quaternion.identity); 53 Debug.Log(CnNumber); 54 Debug.Log(choname); 55 56 57 58 59 60 } 61 62 63 64 } 65 66 67 68 69 70} 71

ショップシーン内のキャラクターを選択した際の保存スクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5using UnityEngine.SceneManagement; 6using UnityEngine.UI; 7 8public class CharacterManager : MonoBehaviour 9{ 10 public string choName; 11 public string CHONAME 12 { 13 get { return this.choName; } //取得用 14 private set { this.choName = value; } //値入力用 15 } 16 17 18 19 public int CharacterNm; 20 public int CharacterCN 21 { 22 get { return this.CharacterNm; } //取得用 23 private set { this.CharacterNm = value; } //値入力用 24 } 25 26 27 28 29 30 31 32 // キャラクターを購入済みの場合のみ処理 33 // 選択したキャラクターの名前をPlayerPrefsにcharとして保存 34 public void Select(int cN) 35 { 36 if (PlayerPrefs.GetInt(ShopSceneManager.chNames[cN]) == 0) 37 { 38 // Debug.Log("cannot use!"); 39 return; 40 } 41 choName = ShopSceneManager.chNames[cN]; 42 PlayerPrefs.SetString("char", choName); 43 CharacterNm = cN; 44 SceneManager.LoadScene("TitleScene"); 45 46 47 48 } 49} 50

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

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

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

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

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

fiveHundred

2020/04/24 13:06

PlayerPrefs.SetStringの後に「PlayerPrefs.Save();」を入れるとどうなりますでしょうか?
hikaaaaaaaa

2020/04/24 13:12

ご回答ありがとうございます。 変わらずにDebug.Log(CnNumber)には0、Debug.Log(choname)は空白になってしまいました。
vo3

2020/04/25 02:41

if (PlayerPrefs.GetInt(ShopSceneManager.chNames[cN]) == 0) { // Debug.Log("cannot use!"); return; } ここのログのコメントを解除しても、このログは出ないでいいですか? あと PlayerPrefs.GetString("char", choname); の第二引数はデフォルト値であって、"char"の値を受け取っていないようですが。
hikaaaaaaaa

2020/04/25 04:11

vo3樣 コメントありがとうございます。 ログの部分はコメント解除後もログは出ませんでした。 どのようにすれば値を受け取るようになりますか?
guest

回答1

0

前提をいくつか踏まえたうえでとなります。
HomeSceneManager.Start()が実行される前に、CharacterManagerScript.CharacterCNの値が設定されていなければ、何をどうやっても Debug.Log(CnNumber); は0だと思います。
そして、CharacterManagerScript.CharacterCNが設定されるのは提示されたコード上ではCharacterManagerScript.Select(int cN)だけになっています。
もし順番が間違っていたらそこの修正が必要です。

Debug.Log(choname);が空白なのもCharacterManagerScript.CHONAMEの値が未設定ならば同様です。
しかし、

public void Select(int cN) { PlayerPrefs.SetString("char", choName); }

をやっているので、HomeSceneManager.Start()内のif分岐はelse側に行きます。
そちら側に行ってますが、PlayerPrefs.GetString("char", choname);とだけしていて値を一切受け取っていないので、chonameは最初のCharacterManagerScript.CHONAMEのままです。
受け取るには変数で、今回のDebug.Logを満たすのであれば、chonameで受けてください。

PlayerPrefs.GetStringのヘルプです。

投稿2020/04/25 05:43

vo3

総合スコア321

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問