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

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

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

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

Unity

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

Q&A

解決済

1回答

869閲覧

スクリプトで選択肢を作り、どのボタンが押されたか取得する方法について

kenji007

総合スコア22

C#

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

Unity

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

0グッド

0クリップ

投稿2022/07/02 01:45

スクリプトで選択肢を作り、UIボタンとして画面に配置しました。
選択肢が押された際に、各選択肢に応じた処理を行いたいのですが、「どのボタンが押されたか」についてどうもスマートな方法が思い浮かばず困っております。


セーブデータを管理するマネージャーがあったとします。
ボタンを押された際のロード処理も上記マネージャーが実行するとします。
その中にセーブデータが10個あり、
「セーブ1」
「セーブ2」
「セーブ3」
・・・

と選択肢を作ったとします。
「セーブボタン3」を押されたときに、「セーブ3」を引数にしてセーブデータロードを実行したいのですが、「セーブ3」の受け渡し方に困っております。

試みた解決方法

「セーブ1」、「セーブ2」、「セーブ3」に「SaveSlot.cs」というスクリプトを組み、ボタン作成時にその中に何番目のセーブデータか判定する変数「i」を格納しておく。
ボタンが押されると「セーブデータ3」なら「3」という変数をもとにセーブデータロードをする


ボタン作成時にボタンのGameObject名を変数と同じ値にして後にその数値を読み込む。
「セーブ3」ボタンが押されるとそのゲームオブジェクト名が「3」となっているのでGameObject.nameをintに変換し、それをもとにセーブデータロードをする

上記どちらも試みたいのですが、いまいちよろしくないと思っております。
①に関しては変数iを持つだけのスクリプトができてしまい、スクリプトが不必要に増えていってしまう。
②に関しては見た目がダサい

変な質問ですが、どう作ってもスマートな作り方にならず、いまいちしっくり来ておりません。
よろしければご助言いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

①に関しては変数iを持つだけのスクリプトができてしまい、スクリプトが不必要に増えていってしまう。

同じスクリプトを使いまわせるので、スクリプトが増えることはありません。
なので、①の方法が推奨です。

具体的には、SaveSlot.csに[SerializeField]属性を持つ変数を定義して、その値をUnityEditor上でボタンごとに値を変えてあげれば良いです。

コード例は以下。

public class SaveSlot : MonoBehaviour { [SerializeField]int number; // ボタンごとに、UnityEditor上で設定する。 public void Save() { SaveManager.Save(number); // セーブ管理マネージャーのデータ保存メソッドを呼び出す。 } }

上記のコードをすべてのボタンで使いまわして、あとはUnityEditor上で変数の値を設定します。
以下の画像は、UnityEditor上でButton1とButton2で同じSaveSlot.csを使い回して、Editor上で値だけ変えた例です。
変数numberをEditor上で変更できるところが肝です。

イメージ説明

イメージ説明

投稿2022/07/05 02:30

JunSuzukiJapan

総合スコア314

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問