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

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

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

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

Unity

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

Q&A

解決済

1回答

252閲覧

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

beginner_01

総合スコア22

C#

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

Unity

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

0グッド

0クリップ

投稿2018/09/28 12:41

前提・実現したいこと

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]; }); } }

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

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

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

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

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

fiveHundred

2018/09/28 13:24

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

2018/09/28 13:58 編集

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のところは文字になってしまって反映されないのはわかっているのですがほかの方法が思い浮かびませんでした。
guest

回答1

0

ベストアンサー

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

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

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

c#

1// 割愛... 2 3public class Sinken : MonoBehaviour 4{ 5 public Sprite TBack; 6 // public Sprite T1; 7 // . 8 // . 9 // . 10 // 割愛 11 12 // T1~T52を廃止し、次のように配列にまとめるよう変更しました。 13 // また、配列は new を使って、実際に作成していることに注意してください。 14 // newしない場合、配列の入れ物だけができ、配列そのものがない状態になります。 15 // 52は、配列の長さですね。 16 // また、要素を利用するときは、T[0]~T[51]になることに注意してください。 17 public Sprite[] TArray = new Sprite[52]; 18 19 Image Back; 20 21 // ここ、エラーが出ませんか? 52番目の要素を利用したい場合は、51になります。他のものについても同様で、配列のx番目要素を利用したい場合、[]の中に指定する値は1引いたものにしましょう。 22 UnityEngine.Sprite[] Deck = new UnityEngine.Sprite[52]; 23 24 UnityEngine.UI.Image[] D = new UnityEngine.UI.Image[14]; 25 UnityEngine.UI.Button[] D_ = new UnityEngine.UI.Button[14]; 26 27 UnityEngine.UI.Image[] K = new UnityEngine.UI.Image[14]; 28 UnityEngine.UI.Button[] K_ = new UnityEngine.UI.Button[14]; 29 30 UnityEngine.UI.Image[] H = new UnityEngine.UI.Image[14]; 31 UnityEngine.UI.Button[] H_ = new UnityEngine.UI.Button[14]; 32 33 UnityEngine.UI.Image[] S = new UnityEngine.UI.Image[14]; 34 UnityEngine.UI.Button[] S_ = new UnityEngine.UI.Button[14]; 35 36 // Use this for initialization 37 void Start() 38 { 39 40 // ...割愛 41 42 // 次の部分ですが、forを利用したコードに変更してみました(※1を参照してください)。 43 // Deck[0] = T1; 44 // . 45 // . 46 // . 47 // 割愛 48 49 // 変更した部分です(※1) 50 for(var i=0; i<TArray.Length; i++){ 51 Dech[i] = TArray[i]; 52 } 53 54 // ...以下、割愛 55 } 56 57 58}

投稿2018/09/28 14:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

beginner_01

2018/09/28 14:55 編集

実際にコードまで組んでいただきとてもわかりやすかったです! 実際にかいたらうまくいきましたほんとにありがとうございます! まだプログラミング始めたばかりなのでいろいろ教わりたいくらいですw ひとつ質問なんですが for(var i=0; i<TArray.Length; i++)   { Dech[i] = TArray[i]; } この部分でintではなくvarをつかうのはなぜですか?
退会済みユーザー

退会済みユーザー

2018/09/28 15:57

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問