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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

2328閲覧

Unity5 C# PlayerPrefs.SetInt, PlayerPrefs.GetInt が有効にならない

toricotori

総合スコア14

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2017/10/30 15:56

unity5にてキャラクター選択スクリプトを作っています。
選択画面にて任意のボタンを選択すると、プレイ画面に移行し、
該当のキャラクターがステージ上に表示される挙動を目指したいです。
書いたスクリプトは以下の通りです。

<選択画面>

C#

1public class charaSelect : MonoBehaviour { 2 3 Button m; 4 Button f; 5 6 void Start () 7 { 8 Cursor.visible = false; //マウスカーソルを非表示 9 Cursor.lockState = CursorLockMode.Locked; //マウスカーソルを固定 10 PlayerPrefs.DeleteKey ("chara"); 11 m = GameObject.Find("M_button").GetComponent<Button>(); //男性キャラ選択ボタン 12 f = GameObject.Find("F_button").GetComponent<Button>(); //女性キャラ選択ボタン 13 m.Select (); //最初は男性キャラ選択ボタンを選択した状態 14 } 15 16 17 void Update () 18 { 19 if (Input.GetKeyDown (KeyCode.LeftArrow)) //矢印キーで選択 20 { 21 m.Select (); 22 PlayerPrefs.SetInt("chara", 1); //charaに1をセット 23 } 24 else if (Input.GetKeyDown (KeyCode.RightArrow)) //矢印キーで選択 25 { 26 f.Select (); 27 PlayerPrefs.SetInt("chara", 2); //charaに2をセット 28 } 29 if (Input.GetKeyDown (KeyCode.Space)) //スペースキーで決定しプレイ画面へ 30 { 31 SceneManager.LoadScene ("play"); 32 } 33 } 34}

<プレイ画面>(空のゲームオブジェクトに割り当てています)

C#

1public class startChara : MonoBehaviour { 2 3 public GameObject M; 4 public GameObject F; 5 int state = PlayerPrefs.GetInt ("chara"); 6 7 8 void Start () 9 { 10 switch (state) 11 { 12  //charaが1のとき=男性キャラ選択ボタンを押したとき男性キャラを表示 13 case 1: 14 M.SetActive (true); 15 break; 16 //charaが2のとき=女性キャラ選択ボタンを押したとき女性キャラを表示 17 case 2: 18 19 F.SetActive (true); 20 break; 21 22 default : 23 break; 24 } 25 }

プレイ画面では最初キャラ両方を非表示にしています。
スクリプトを実行すると、プレイ画面に移行した際、両方非表示のままで、charaにセットした値が有効になっていないようです。
選択画面に問題(PlayerPrefs.SetInt)があるのか、プレイ画面に問題(PlayerPrefs.GetInt)があるのか……
ご教授いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のようなメッセージは表示されませんでしたでしょうか?

GetInt is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'startChara'.

See "Script Serialization" page in the Unity Manual for further details.

インスタンス変数の初期化時やコンストラクタ中でPlayerPrefsにアクセスしようとするのはまずいようですので(Unityの場合、そもそもMonoBehaviourのコンストラクタ中で何か複雑なことをするのは推奨されないみたいですね)、Startの中で値を取得してみてはどうでしょう。

C#

1using UnityEngine; 2 3public class startChara : MonoBehaviour { 4 5 public GameObject M; 6 public GameObject F; 7 int state; // 初期化タイミングでのGetIntはやめて... 8 9 void Start () 10 { 11 state = PlayerPrefs.GetInt("chara"); // ここで設定値を取得してみる 12 13 switch (state) 14 { 15 //charaが1のとき=男性キャラ選択ボタンを押したとき男性キャラを表示 16 case 1: 17 M.SetActive (true); 18 break; 19 //charaが2のとき=女性キャラ選択ボタンを押したとき女性キャラを表示 20 case 2: 21 F.SetActive (true); 22 break; 23 default : 24 break; 25 } 26 } 27} 28

投稿2017/10/30 22:17

Bongo

総合スコア10807

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

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

toricotori

2017/10/31 14:02

エラーがまさにその通りでした。 解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問