
初心者です。unityで次のサイトを参考にして2Dのゲームを作成しています。
Unityでゲームを作ろう!2Dアクションゲーム「ユニティちゃんの2Dアクション」
上のサイトの、「クリア&ゲームオーバー処理の作り方(1):GameManager等の変更」のところで発生した、以下のエラーを解決したいです。
「Assets\Coin.cs(23,9): error CS0122: 'BaseItemObject.gameManager' is inaccessible due to its protection level」
Coin.csを以下に示します。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4public class Coin : BaseItemObject 5{ 6 [SerializeField] 7 AudioClip getSe = null; 8 bool get = false; 9 SoundManager soundManager; 10 protected override void Start() 11 { 12 base.Start(); 13 soundManager = GameObject.FindGameObjectWithTag("GameController").GetComponent<SoundManager>(); 14 } 15 public override void GetItem() 16 { 17 if (get) 18 { 19 return; 20 } 21 22 get = true; //取得済みフラグをONにする 23 gameManager.CorrectedCoins++; 24 25 26 //SEが設定されていたら音を鳴らす 27 if (getSe != null) 28 { 29 soundManager.PlaySeByName(getSe.name); 30 } 31 DestroyItem(); 32 } 33 void OnTriggerEnter2D(Collider2D collision) 34 { 35 if (collision.gameObject.CompareTag("Player")) 36 { 37 GetItem(); 38 } 39 } 40}
自分で調べたところ、宣言の仕方によってBaseItemObjectのgameManagerにアクセスできていないのではないか?と思い、BaseItemObject.csを確認しました。そのコードを下に示します。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class BaseItemObject : MonoBehaviour 6{ 7 GameManager gameManager; 8 9 protected virtual void Start() 10 { 11 gameManager = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameManager>(); 12 InitItem(); 13 } 14 15 protected virtual void InitItem() 16 { 17 } 18 19 public virtual void GetItem() 20 { 21 } 22 23 public virtual void DestroyItem() 24 { 25 Destroy(gameObject); 26 } 27 28} 29
BaseItemObjectはpublic classで宣言されており、なぜアクセスできなくなっているのかわかりません。
このエラーの原因と、解決方法を教えてくださるとありがたいです。
よろしくお願いします。


回答4件
あなたの回答
tips
プレビュー