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

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

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

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

受付中

「アクセスできない保護レベルになっている」というエラーの原因と解決方法

Satsuki_
Satsuki_

総合スコア5

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

4回答

0評価

0クリップ

409閲覧

投稿2022/05/15 07:34

初心者です。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#

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Coin : BaseItemObject { [SerializeField] AudioClip getSe = null; bool get = false; SoundManager soundManager; protected override void Start() { base.Start(); soundManager = GameObject.FindGameObjectWithTag("GameController").GetComponent<SoundManager>(); } public override void GetItem() { if (get) { return; } get = true; //取得済みフラグをONにする gameManager.CorrectedCoins++; //SEが設定されていたら音を鳴らす if (getSe != null) { soundManager.PlaySeByName(getSe.name); } DestroyItem(); } void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.CompareTag("Player")) { GetItem(); } } }

自分で調べたところ、宣言の仕方によってBaseItemObjectのgameManagerにアクセスできていないのではないか?と思い、BaseItemObject.csを確認しました。そのコードを下に示します。

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; public class BaseItemObject : MonoBehaviour { GameManager gameManager; protected virtual void Start() { gameManager = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameManager>(); InitItem(); } protected virtual void InitItem() { } public virtual void GetItem() { } public virtual void DestroyItem() { Destroy(gameObject); } }

BaseItemObjectはpublic classで宣言されており、なぜアクセスできなくなっているのかわかりません。
このエラーの原因と、解決方法を教えてくださるとありがたいです。

よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/05/15 07:48

> BaseItemObjectはpublic classで宣言されており GameManager gameManager; にアクセス修飾子がないですが?

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。