🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

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

Q&A

解決済

1回答

1149閲覧

カードゲームの作成 カード情報が反映されない unity

uran_

総合スコア0

Unity

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

0グッド

0クリップ

投稿2021/01/29 12:04

編集2021/01/29 14:52

今回、ゲーム開発に興味を持ちunityでカードゲーム作成を試みて、Youtubeやネットのブログなどで公開されているコードを意味を調べつつ丸写しで打ち込んでいます。

しかし、カードの移動や手札の作成などはできるのですが**カードの情報が一枚目のものしか出てこず二枚目以降のカードがでてこない状況です。**ちゃんと二枚目以降のカードの情報は登録してあります。
何度も作り直し、コードの間違いなども確認してるのですが見当たりません。

是非知恵を貸してください。```ここに言語を入力

カードのデータを反映させるために、iconやTextの設定されたCARDをprefab化したものにCardControllerとCardViewをアタッチしました。そのあと最初に設定したCardのTextやiconをCardViewのスクリプトのicon、Text欄にドラッグしました。

CardController↓

using

1using System.Collections.Generic; 2using UnityEngine; 3 4public class CardController : MonoBehaviour 5{ 6 public CardView view; // カードの見た目の処理 7 public CardModel model; // カードのデータを処理 8 9 private void Awake() 10 { 11 view = GetComponent<CardView>(); 12 } 13 14 public void Init(int cardID) // カードを生成した時に呼ばれる関数 15 { 16 model = new CardModel(cardID); // カードデータを生成 17 view.Show(model); // 表示 18 } 19} 20コード

CardView↓

using

1using System.Collections.Generic; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class CardView : MonoBehaviour 6{ 7 [SerializeField] Text nameText, powerText, costText; 8 [SerializeField] Image iconImage; 9 10 public void Show(CardModel cardModel) // cardModelのデータ取得と反映 11 { 12 nameText.text = cardModel.name; 13 powerText.text = cardModel.power.ToString(); 14 costText.text = cardModel.cost.ToString(); 15 iconImage.sprite = cardModel.icon; 16 } 17} 18コード

カードデータはCardEntityというスクリプトでCardEntityListというフォルダで管理しています。
CardEntity↓

dEntityC#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[CreateAssetMenu(fileName = "CardEntity", menuName = "Create CardEntity")] 6 7public class CardEntity : ScriptableObject 8{ 9 public int cardID; 10 public new string name; 11 public int cost; 12 public int power; 13 public Sprite icon; 14コード

そしてGameManagerというスクリプトにカード2を反映させるためのコードとして以下のコードを打ちました

meManagerC#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class GameManager : MonoBehaviour 7{ 8 [SerializeField] CardController cardPrefab; 9 [SerializeField] Transform playerHand, playerField, enemyField; 10 11 void Start() 12 { 13 StartGame(); 14 } 15 16 void StartGame() 17 { 18 CardController card = Instantiate(cardPrefab, playerHand); 19 card.Init(2); 20 } 21} 22コード

しかしCardをPrefab化する前に設定していたiconなどしか反映されずカードの種類が増えません。
もう一つてCardModelというスクリプトも作りました

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class CardModel { public int cardID; public string name; public int cost; public int power; public Sprite icon; public CardModel(int cardID) // データを受け取り、その処理 { CardEntity cardEntity = Resources.Load<CardEntity>("CardEntityList/Card" + cardID); // CardEntityのパス cardID = cardEntity.cardID; name = cardEntity.name; cost = cardEntity.cost; power = cardEntity.power; icon = cardEntity.icon; } } コード

問題解決に至る情報を提供できているか自分でもわからないので不足している情報があればお手数ですが教えて下さい。

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

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

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

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

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

fiveHundred

2021/01/29 12:21

コードや設定など、必要な情報を記載してください。 「できない」だけではエスパーしか答えられません。 以下を参考にしてください。 https://teratail.com/help/question-tips
uran_

2021/01/29 14:52

申し訳ございません。 教えていただきありがとうございます。
退会済みユーザー

退会済みユーザー

2021/01/30 04:29

このままだとエラー出てないですか? ScriptsbleObjectでCardEntity+数字なデータを作成しているのに、Resourcesから読み出す時はCardになってますが、、、
uran_

2021/01/30 07:00

確認してみたところエラー出ていました。すいません気づきませんでした。 内容としてはCardModelの18行目がおかしいと出ていました。 これはどう書き換えたら良いのでしょうか。 NullReferenceException: Object reference not set to an instance of an object CardModel..ctor (System.Int32 cardID) (at Assets/Scripts/CardModel.cs:18) CardController.Init (System.Int32 cardID) (at Assets/Scripts/CardController.cs:17) GameManager.CreateCard (System.Int32 cardID, UnityEngine.Transform place) (at Assets/Scripts/GameManager.cs:29) GameManager.DrowCard (UnityEngine.Transform hand) (at Assets/Scripts/GameManager.cs:43) GameManager.SetStartHand () (at Assets/Scripts/GameManager.cs:50) GameManager.StartGame () (at Assets/Scripts/GameManager.cs:20) GameManager.Start () (at Assets/Scripts/GameManager.cs:14)
guest

回答1

0

自己解決

ほかカードのデータを入れていたつもりでしたが消えていました。
ほかカードのデータを入れたことによって無事動きました。
私の確認不足のため皆様にお手間を掛けさせて申し訳ございませんでした。
皆様協力ありがとうございました。

投稿2021/01/30 07:11

uran_

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問