Unityで落ち物カウントゲームを作っています。
シーンは3つあり、
StartScene
, MainScene
, GameOverScene
です。
今回の質問はMainScene
にてゲームをプレイして、その際のスコアを格納している変数(これはScoreController.cs
に記述)をGameOverScene
で呼び出して結果画面として表示する(これはResult.cs
に記述)と言った状況です。
以下のようなスクリプトを書いております。
Csharp
1// ScoreController.cs 2 3using UnityEngine; 4using UnityEngine.UI; 5using System.Collections; 6 7public class ScoreController : MonoBehaviour { 8 9 public int score = 0; 10 GameObject scoreText; 11 12 13 public void AddScore(){ 14 this.score += 1; 15 } 16 17 void Start () { 18 this.scoreText = GameObject.Find ("Score"); 19 DontDestroyOnLoad(this); 20 } 21 22 /* 23 public int getScore(){ 24 return score; 25 } 26 */ 27 28}
AddScore
メソッドのトリガーとなっているのは、落ち物をキャッチする(得点を認める動作)別ファイル(HatController.cs
)の関数OnTriggerEnter2D
が動作した時です↓
C#
1// HatController.cs 2 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6 7public class HatController : MonoBehaviour 8{ 9 ... 10 11 12 void OnTriggerEnter2D(Collider2D coll) { 13 GameObject.Find("Canvas").GetComponent<ScoreController>().AddScore(); 14 Destroy(coll.gameObject); 15 } 16 17 18 19}
ここからが本題ですが、ScoreController.cs
で更新した変数score
を以下のスクリプトResult.cs
で呼び出したいのです。
C#
1// Result.cs 2 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6using UnityEngine.UI; 7 8public class Result : MonoBehaviour 9{ 10 GameObject resultScore; 11 void Start() 12 { 13 int result = ScoreController.score; 14 this.resultScore = GameObject.Find ("Result"); 15 resultScore.GetComponent<Text>().text = "SCORE: " + result.ToString("D4"); 16 } 17 18} 19
しかし、Unity画面でエラーメッセージAssets/Scripts/Result.cs(11,22): error CS0120: An object reference is required for the non-static field, method, or property 'ScoreController.score'
と表示されてしまいます。
static変数などを使えば良いなど調べてやってみることはやってみたのですが、staticを使うとHatController.cs
からScoreController.cs
のAddScore
のトリガーを引けなかったりします。
こちらのサイトの内容などはすでにやってみましたができません。
対処法ご存知の方がいらっしゃいましたら教えてください!
追記(10/2 13:30)
以下のようにScoreController.cs
とResult.cs
を書き換えたところ、エラーは無くなりましたがMainScene
にてスコアが反映されず、またGameOverScene
にてスコア文字列が出てこなくなってしまいました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。