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

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

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

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

Unity

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1159閲覧

Unity C#のListを使用中にFindIndex使ってもIndex番号が思い通りに取得できない。

NakedHiroki

総合スコア1

C#

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

Unity

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/05/27 03:35

Unityでレジシステムのシミュレータを作っています。
Canvas内UIにボタンをたくさん配置して、それぞれのボタンにはスクリプトPriceButtonをアタッチしています。
public string _Syouhinmei;(商品の名前 みかんやりんごなど)
public int _Price;(単価 150や120など)
public int _Count;(このボタンが押された回数)
public int _Total;(商品ごとの合計金額)
の変数を使用し、インスペクターから商品名と金額を設定しています。
public int _Remove;//この変数は会計クリアされた時に押されたボタンのカウント数をListから消す予定のもの

またScene内にRegiTextManagerという精算額・預かり金・釣り銭を管理するオブジェクトがあります。
そのオブジェクトに同名のスクリプトをアタッチして
public static List<int> _SelectedButtonTotal = new List<int>();//int型でボタンを保存
というようにRegiTextManager内で宣言しています。
ボタンがそれぞれ最初に押された時にListの_SelectedButtonTotalに格納したいと考えています。

発生している問題

ソースコードのPriceButtonのスクリプトでボタンを何種類押してもDebug.Logでは”配列の中の1番目にあります”と表示されてしまいます。

希望としては、最初みかんボタン押されたら”配列の中の1番目にあります”で
次にりんごボタン押したら”配列の中の2番目にあります”というようにして
再度みかんボタン押したら”配列の1番目のカウント数は2個です”

という結果が理想なのです。

エラーメッセージ

該当のソースコード

C#

1ソースコード

//配列に入れる
if (_Remove == 0)
{
RegiTextManager._SelectedButtonTotal.Add(_Count);

_Remove = RegiTextManager._SelectedButtonTotal.IndexOf(_Count); _Remove++; Debug.Log("配列の中の" + _Remove + "番目にあります"); Debug.Log("現在のIndexの数は" + RegiTextManager._SelectedButtonTotal.Count);//これは正しく表示された } else if(_Remove > 0) { Debug.Log("配列の" + _Remove + "番目のカウント数は" + _Count + "個です。" ); }

試したこと

_Remove = RegiTextManager._SelectedButtonTotal.IndexOf(_Count);この行のIndexOfをFindIndexにしたら
「引数1:は’int’から'System.Predicate<int>'へ変換することはできません」というエラーでした

IndexOfは文字列を入れられるとネットに書いてありましたが、int型のIndex番号はどのようにして検索したら良いのでしょうか?

どなたかご教授お願いいたします。

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

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

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

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

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

rururu3

2020/05/27 04:18

_Countが足されてない気がしますが、記載されているソースコードだけでは判断できないので記載されているC#ファイルのソースまるっと記載していただいたほうがわかるかもしれません
guest

回答2

0

int型はただの数字です。
_Countがボタンが押された回数で、_SelectedButtonTotal.Add(_Count);していたら、それは「n回押された」という情報を蓄積しているにすぎません。(どのボタンが押されたか、という情報が無い)

List<PriceButton>とするとPriceButtonをそのまま蓄積出来るのでこれを利用しましょう。

C#

1public static List<PriceButton> _SelectedButtonTotal = new List<PriceButton>(); 2 3public OnPushButton (PriceButton priceData) { 4 // 何番目か取得 5 int index = list.IndexOf(priceData); 6 7 if (index == -1) { 8 // 存在していなければ追加 9 _SelectedButtonTotal.Add(priceData); 10 // 配列の大きさを表示 11 Debug.Log("配列の中の" + _SelectedButtonTotal.Length + "番目にあります。" ); 12 } else { 13 // 存在していたらカウント表示 14 Debug.Log("配列の" + index + "番目のカウント数は" + priceData._Count + "個です。" ); 15 } 16}

投稿2020/05/27 04:18

sakura_hana

総合スコア11427

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

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

0

ベストアンサー

public static List<int> _SelectedButtonTotal = new List<int>();//int型でボタンを保存

同じ回数押されたボタンが存在し得る事を考えればこの作りでは駄目です。
現状は順番に押していっても最初の商品が参照されるので新たに追加された商品のIndex番号をうまく参照出来ません。

public string _Syouhinmei;が既にあるのでこれを保存するようにして下さい

public static List<string > _SelectedButtonTotal = new List<string >();
RegiTextManager._SelectedButtonTotal.Add(_Syouhinmei); _Remove = RegiTextManager._SelectedButtonTotal.IndexOf(_Syouhinmei);

投稿2020/05/27 04:30

Tto777

総合スコア189

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

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

Tto777

2020/05/27 04:34

リロードして投稿するべきでした。 後々の事を考えると個々のPriceButtonクラス参照する事も有りえるのでhanaさんの方法でやった方が良いです。
NakedHiroki

2020/05/27 04:53

こちらの方の方法でできました!! 本当にありがとうございます。 他の回答者の方も丁寧に解説してくださってありがとうございます。 後の実装次第で色々試させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問