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

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

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

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

Q&A

解決済

1回答

2023閲覧

unity 2D でのオブジェクトの複製スクリプト

chibaGo

総合スコア1

C#

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

0グッド

0クリップ

投稿2020/05/20 13:33

前提・実現したいこと

Unity 2D C#を使ってカードゲームを作っています。

カードのプレハブとそのデータ情報を組み合わせて
インスタンスの自動生成とそのカードのクリックを検知
してカードid(UIのTEXTに保持)を取得するところまで
はできております。

なお、カードの生成を行っているのはManagerクラス、
クリックの検知はプレハブに張り付けたDetectクラスと
呼びます。

クリックした際のそのカードを画面いっぱいに表示し
表示して説明文も併せて表示したいと考えております。

どのような実装をすればよいのでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

Detectクラスからイベントを発生、Managerクラス
で受取、同じ内容のインスタンスを生成。
(なぜか動かず)

DetectクラスにシリアライズフィールドでManagerクラス
オブジェクトを受け取り、Detectクラス内でManagerクラス
インスタンスから生成関数を呼び出し。
(インスペクターでインスタンスの貼り付けができない)

動かない原因ではなく、普通はどのような実装を
試みるのかご意見をお聞かせいただきたいと思っています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

動かない原因ではなく、普通はどのような実装を試みるのかご意見をお聞かせいただきたいと思っています。

何が普通かあまりよく分かりませんが、自分だったらこんな感じでしょうか。
(もしかすると質問主さんの想定と大して変わらないかもしれません)
各種名称は雑です。なるべく簡潔に書いているので参考程度にどうぞ。

肝心のクリックの部分は別のやり方もあると思いますがお好みでアレンジしてください。
(カード詳細画面はシーン上に1つだけ用意して、そこに対象カードの情報を渡して表示させる形です)

C#

1// カードのデータクラス(広範囲で使う) 2public class CardModel { 3 public int id; 4 public string name; 5 public int power; 6 // などなどパラメータ用意 7 8 // 作成用のメソッド(コンストラクタやそれに準ずるもの)を用意しておくと便利 9} 10 11// カードを表示させるクラス(カードプレハブに付与) 12public class CardView : MonoBehaviour { 13 CardModel myModel; 14 CardDetailWindow window; 15 public Text nameText; 16 public Image image; 17 18 // 初期表示 19 public void Init (CardModel _model, CardDetailWindow _window) { 20 myModel = _model; 21 window = _window; 22 nameText.text = myModel.name; 23 // など、初期表示設定 24 } 25 26 // クリック時 27 public void OnClick () { 28 window.Show(myModel); 29 } 30} 31 32// 詳細を表示させるクラス(詳細表示用オブジェクトに付与) 33public class CardDetailWindow : MonoBehaviour { 34 public Text nameText; 35 public Image image; 36 37 // 初期設定時 38 public void Show (CardModel _model) { 39 nameText.text = _model.name; 40 // など、データを表示する処理 41 } 42} 43 44// カード生成(マネージャーオブジェクトに付与) 45public class CardManager : MonoBehaviour { 46 public CardView cardPrefab; 47 public CardDetailWindow window; 48 49 // カード生成時 50 void MakeCard () { 51 CardModel model = new CardModel(); //実際は何らかの方法でデータロードして作る 52 CardView view = Instantiate(cardPrefab); 53 view.Init(model, window); 54 // 他、必要に応じて何やかや 55 } 56}

投稿2020/05/21 09:20

sakura_hana

総合スコア11427

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

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

chibaGo

2020/05/21 11:56

なるほど、カードを生成する際に詳細情報表示のためのインスタンスも仕込んでおくということでしょうか。 UnityとC#歴が数日なので、いろいろと勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問