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

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

ただいまの
回答率

90.49%

  • C#

    9211questions

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

  • Unity

    5635questions

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

  • Unity2D

    1297questions

UnityでのC#を使ってもっとコンパクトに

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 205

beginner_01

score 6

 前提・実現したいこと

public Sprite T1;   Deck[0] = T1;
:          :
このような同じような処理をもっとコンパクトにしたいです。
配列を試みたのですが上手くいかなかったです。(使い方が間違っているかもしれません)

 該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Linq;


public class Sinken : MonoBehaviour
{


    public Sprite TBack;
    public Sprite T1;
    public Sprite T2;
    public Sprite T3;
    public Sprite T4;
    public Sprite T5;
    public Sprite T6;
    public Sprite T7;
    public Sprite T8;
    public Sprite T9;
    public Sprite T10;
    public Sprite T11;
    public Sprite T12;
    public Sprite T13;
    public Sprite T14;
    public Sprite T15;
    public Sprite T16;
    public Sprite T17;
    public Sprite T18;
    public Sprite T19;
    public Sprite T20;
    public Sprite T21;
    public Sprite T22;
    public Sprite T23;
    public Sprite T24;
    public Sprite T25;
    public Sprite T26;
    public Sprite T27;
    public Sprite T28;
    public Sprite T29;
    public Sprite T30;
    public Sprite T31;
    public Sprite T32;
    public Sprite T33;
    public Sprite T34;
    public Sprite T35;
    public Sprite T36;
    public Sprite T37;
    public Sprite T38;
    public Sprite T39;
    public Sprite T40;
    public Sprite T41;
    public Sprite T42;
    public Sprite T43;
    public Sprite T44;
    public Sprite T45;
    public Sprite T46;
    public Sprite T47;
    public Sprite T48;
    public Sprite T49;
    public Sprite T50;
    public Sprite T51;
    public Sprite T52;



    Image Back;



    UnityEngine.Sprite[] Deck = new UnityEngine.Sprite[52];



    UnityEngine.UI.Image[] D = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] D_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] K = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] K_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] H = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] H_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] S = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] S_ = new UnityEngine.UI.Button[14];

    // Use this for initialization
    void Start()
    {


        for (int i = 1; i < 14; i++)

        {
            D[i] = GameObject.Find("D" + i).GetComponent<Image>();
            D_[i] = GameObject.Find("D" + i).GetComponent<Button>();

            K[i] = GameObject.Find("K" + i).GetComponent<Image>();
            K_[i] = GameObject.Find("K" + i).GetComponent<Button>();

            H[i] = GameObject.Find("H" + i).GetComponent<Image>();
            H_[i] = GameObject.Find("H" + i).GetComponent<Button>();

            S[i] = GameObject.Find("S" + i).GetComponent<Image>();
            S_[i] = GameObject.Find("S" + i).GetComponent<Button>();
        }




        Deck[0] = T1;
        Deck[1] = T2;
        Deck[2] = T3;
        Deck[3] = T4;
        Deck[4] = T5;
        Deck[5] = T6;
        Deck[6] = T7;
        Deck[7] = T8;
        Deck[8] = T9;
        Deck[9] = T10;
        Deck[10] = T11;
        Deck[11] = T12;
        Deck[12] = T13;
        Deck[13] = T14;
        Deck[14] = T15;
        Deck[15] = T16;
        Deck[16] = T17;
        Deck[17] = T18;
        Deck[18] = T19;
        Deck[19] = T20;
        Deck[20] = T21;
        Deck[21] = T22;
        Deck[22] = T23;
        Deck[23] = T24;
        Deck[24] = T25;
        Deck[25] = T26;
        Deck[26] = T27;
        Deck[27] = T28;
        Deck[28] = T29;
        Deck[29] = T30;
        Deck[30] = T31;
        Deck[31] = T32;
        Deck[32] = T33;
        Deck[33] = T34;
        Deck[34] = T35;
        Deck[35] = T36;
        Deck[36] = T37;
        Deck[37] = T38;
        Deck[38] = T39;
        Deck[39] = T40;
        Deck[40] = T41;
        Deck[41] = T42;
        Deck[42] = T43;
        Deck[43] = T44;
        Deck[44] = T45;
        Deck[45] = T46;
        Deck[46] = T47;
        Deck[47] = T48;
        Deck[48] = T49;
        Deck[49] = T50;
        Deck[50] = T51;
        Deck[51] = T52;




        D_[1].onClick.AddListener(delegate
        {

            D[1].sprite = Deck[0];
        });





    }


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fiveHundred

    2018/09/28 22:24

    上手くいかなかったコードはどのようになっていますか?

    キャンセル

  • beginner_01

    2018/09/28 22:52 編集

    public Spriteのほうは
    for (int i = 1; i < 52; i++)
    { public Sprite T[i];  }
    をStart外に書くとforが無効ですとエラーが出てStartの中に書くとなぜか関数全体がforの}のところで終わってしまいました。
    Deckのほうは
    for (int i = 0; i < 52; i++) { Deck[i] = Ti; }
    とかいてみましたTiのところは文字になってしまって反映されないのはわかっているのですがほかの方法が思い浮かびませんでした。

    キャンセル

回答 1

checkベストアンサー

+1

配列の使い方などで詰まっておられるのかなと感じました。

本やサイトではイメージがつかめないこともあるだろうので、
実際に取り組まれているコードを利用して解説してみました。
本や、サイトと合わせて参考にしていただければと思います。

※実際に動かしてはいないので、文法ミスなどあるかもしれませんがあしからず。

// 割愛...

public class Sinken : MonoBehaviour
{
    public Sprite TBack;
    // public Sprite T1;
    // .
    // .
    // .
    // 割愛

    // T1~T52を廃止し、次のように配列にまとめるよう変更しました。
    // また、配列は new を使って、実際に作成していることに注意してください。
    // newしない場合、配列の入れ物だけができ、配列そのものがない状態になります。
    // 52は、配列の長さですね。
    // また、要素を利用するときは、T[0]~T[51]になることに注意してください。
    public Sprite[] TArray = new Sprite[52];

    Image Back;

    // ここ、エラーが出ませんか? 52番目の要素を利用したい場合は、51になります。他のものについても同様で、配列のx番目要素を利用したい場合、[]の中に指定する値は1引いたものにしましょう。
    UnityEngine.Sprite[] Deck = new UnityEngine.Sprite[52];

    UnityEngine.UI.Image[] D = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] D_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] K = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] K_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] H = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] H_ = new UnityEngine.UI.Button[14];

    UnityEngine.UI.Image[] S = new UnityEngine.UI.Image[14];
    UnityEngine.UI.Button[] S_ = new UnityEngine.UI.Button[14];

    // Use this for initialization
    void Start()
    {

        // ...割愛

        // 次の部分ですが、forを利用したコードに変更してみました(※1を参照してください)。
        // Deck[0] = T1;
        // .
        // .
        // .
        // 割愛

        // 変更した部分です(※1)
        for(var i=0; i<TArray.Length; i++){
          Dech[i] = TArray[i];
        }

        // ...以下、割愛
    }


}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/28 23:52 編集

    実際にコードまで組んでいただきとてもわかりやすかったです!
    実際にかいたらうまくいきましたほんとにありがとうございます!
    まだプログラミング始めたばかりなのでいろいろ教わりたいくらいですw
    ひとつ質問なんですが

    for(var i=0; i<TArray.Length; i++)
      {
    Dech[i] = TArray[i];
    }

    この部分でintではなくvarをつかうのはなぜですか?

    キャンセル

  • 2018/09/29 00:57

    うまくいったようでよかったです。
    ご質問ですが、intで問題ありません。varと書いたのは、そう書く癖がついてしまっているからです。varというのは、代入するものから勝手にintか、stringかなどを判断してくれるものです。この場合、int i=0 と書いたことになります。なれてきたら、少し調べて使ってみてください。こちらの記事などが参考になるかと[var の使いどころ](https://qiita.com/hollydad/items/1516a3f13147a754b9db)

    キャンセル

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

  • C#

    9211questions

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

  • Unity

    5635questions

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

  • Unity2D

    1297questions