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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

Q&A

解決済

1回答

1143閲覧

シングルトン化が出来ないです

flewgel

総合スコア5

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

0グッド

0クリップ

投稿2020/05/20 09:03

編集2020/05/20 11:35

カードゲームを作っているものです。ゲームオブジェクト(?)の「CardsBattle」にスクリプトからアクセスしたいのですがエラーコードが出てしまい、手詰まりです。どうすれば良いんでしょうか?> エラーコードAssets/Scripts/AttackedCard.cs(17,30): error CS0122: 'GameManager.CardsBattle(CardController, CardController)' is inaccessible due to its protection level

GameManager のコード

C#

1 2using System.Collections; 3 4using System.Collections.Generic; 5 6using UnityEngine; 7 8 9 10 11public class GameManager : MonoBehaviour 12 13{ 14 15 16 17 18 [SerializeField] Transform playerHandTransform, 19 20 playerFieldTransform, 21 22 enemyHandTransform, 23 24 enemyFieldTransform; 25 26 [SerializeField] CardController cardPrefab; 27 28 29 30 31 bool isPlayerTurn; 32 33 34 35 36 //シングルトン化(どこからでもアクセスできるようにする) 37 38 public static GameManager instance; 39 40 private void Awake() 41 42 { 43 44 if (instance == null) 45 46 { 47 48 instance = this; 49 50 } 51 52 } 53 54 55 void Start() 56 57 { 58 59 StartGame(); 60 61 } 62 63 64 65 66 void StartGame() 67 68 { 69 70 SettingInitHand(); 71 72 isPlayerTurn = true; 73 74 TurnCalc(); 75 76 CreateCard(playerHandTransform); 77 78 CreateCard(enemyHandTransform); 79 80 } 81 82 83 84 85 86 87 void SettingInitHand() 88 89 { 90 91 //カードをそれぞれに3枚配る 92 93 for (int i = 0; i < 3; i++) 94 95 { 96 97 CreateCard(playerHandTransform); 98 99 CreateCard(enemyHandTransform); 100 101 } 102 103 } 104 105 106 107 108 void TurnCalc() 109 110 { 111 112 if (isPlayerTurn) 113 114 { 115 116 PlayerTurn(); 117 118 } 119 120 else 121 122 { 123 124 EnemyTurn(); 125 126 } 127 128 } 129 130 131 132 133 public void ChangeTurn() 134 135 { 136 137 isPlayerTurn = !isPlayerTurn; 138 139 if (isPlayerTurn) 140 141 { 142 143 CreateCard(playerHandTransform); 144 145 } 146 147 else 148 149 { 150 151 CreateCard(enemyHandTransform); 152 153 } 154 155 TurnCalc(); 156 157 } 158 159 160 161 162 163 164 165 void PlayerTurn() 166 167 { 168 169 Debug.Log("プレイヤーのターン"); 170 171 172 173 } 174 175 176 177 178 void EnemyTurn() 179 180 { 181 182 Debug.Log("相手のターン"); 183 184 /*場にカードを出す*/ 185 186 //手札のカードリストを取得 187 188 CardController[] handCardList = enemyHandTransform.GetComponentsInChildren<CardController>(); 189 190 //場に出すカードを選択 191 192 CardController enemyCard = handCardList[0]; 193 194 //カードを場に出す 195 196 enemyCard.movement.SetCardTransform(enemyFieldTransform); 197 198 199 200 201 /*攻撃*/ 202 203 //場のカードリストを取得 204 205 CardController[] FieldCardList = enemyFieldTransform.GetComponentsInChildren<CardController>(); 206 207 // 攻撃するカードを選択 208 209 CardController attacker = FieldCardList[0]; 210 211 //攻撃される側のカードを選択(プレイヤー側のフィールドから) 212 213 CardController[] playerFieldCardList = playerFieldTransform.GetComponentsInChildren<CardController>(); 214 215 CardController defender = playerFieldCardList[0]; 216 217 //二者をバトルさせる 218 219 CardsBattle(attacker, defender); 220 221 222 223 224 ChangeTurn(); 225 226 } 227 228 229 230 231 void CardsBattle(CardController attacker, CardController defender) 232 233 { 234 235 Debug.Log("戦闘"); 236 237 238 239 240 Debug.Log("攻撃側:"+attacker.model.name); 241 242 Debug.Log("HP" + attacker.model.hp); 243 244 defender.model.Attack(attacker); 245 246 Debug.Log("  ➡" + attacker.model.hp); 247 248 249 250 251 Debug.Log("攻撃される側:" + defender.model.name); 252 253 Debug.Log("HP:" + defender.model.hp); 254 255 attacker.model.Attack(defender); 256 257 Debug.Log(" ➡" + defender.model.hp); 258 259 attacker.CheckAlive(); 260 261 defender.CheckAlive(); 262 263 } 264 265 266 267 268 269 270 271 void CreateCard(Transform hand) 272 273 { 274 275 CardController card = Instantiate(cardPrefab, hand, false); 276 277 card.Init(2); 278 279 } 280 281}

AttackedCardのコード

C#

1 2 3using System.Collections; 4 5using System.Collections.Generic; 6 7using UnityEngine; 8 9using UnityEngine.EventSystems; 10 11 12 13 14//攻撃される側 15 16public class AttackedCard : MonoBehaviour, IDropHandler 17 18{ 19 20 public void OnDrop(PointerEventData eventData) 21 22 { 23 24 /*攻撃*/ 25 26 // 攻撃するカードを選択 27 28 CardController attacker = eventData.pointerDrag.GetComponent<CardController>(); 29 30 //攻撃される側のカードを選択(プレイヤー側のフィールドから) 31 32 CardController defender = GetComponent<CardController>(); 33 34 //二者をバトルさせる 35 36 GameManager.instance.CardsBattle(attacker, defender); 37 38 } 39 40}

追記

BluOxyさん、コメントありがとうございます。検索してみたものを明日(同居人との兼ね合いでPC使える時間が限られているため)試してみようと思います。念のため、参考にしていたYouTubeの動画のリンクを張り付けておきます。

https://www.google.com/url?sa=t&source=web&rct=j&url=https://m.youtube.com/watch%3Fv%3DpUaz1tBuum4&ved=2ahUKEwiQqNrIq8LpAhWQOnAKHXFhD_0QwqsBMAB6BAgFEAM&usg=AOvVaw1yGQf8irzgY-2PunMaNRS5

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

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

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

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

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

BluOxy

2020/05/20 09:11

「Unity MonoBehaviour Singleton」と検索して見つかるコードで解決しないでしょうか。 もしくは、質問に添付されたコードがどこかの記事を参考にしたものであれば、その記事のリンクを質問文に追記してください
guest

回答1

0

ベストアンサー

エラーコードに"inaccessible due to its protection level"とあるので、
CardsBattleをpublicにすれば良いと思います。

CardsBattleの定義を
public void CardsBattle(CardController attacker, CardController defender)
に変更してください。

投稿2020/05/20 12:16

mattrick

総合スコア135

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問