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

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

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

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

Q&A

解決済

1回答

328閲覧

動的に生成したボタンを横に並べ方と関数呼び方

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2020/03/23 08:10

編集2020/03/23 08:13

現状

リソースから取り出した3つのボタンを画面に生成するが全てのオブジェクトが重なってしまう
ボタンを押しても関数が設定されていないので何も起きない

実現したいこと

取り出したボタンを順に横に並べたい
動的に生成したボタンの関数を指定したい(インベントリにあるたくさんのボタンから選択したボタンに対応するボタンの色を明るくしてボタンを有効にして押せるようにする)

unity

1コード 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class Player : MonoBehaviour 8{ 9 // 10 public float moveSpeed; 11 private Vector3 velocity; 12 public Joystick joystick; 13 public Animator animator; 14 public Image Aboid; 15 public float avoidtime = 5; 16 public float invincible = 2; 17 public float deltainvincible = 0; 18 19 // 20 public float span = 2; 21 public float delta = 0; 22 private GameObject Magic; 23 private GameObject nearObj; 24 public List<string> magic = new List<string>(); 25 public int i; 26 public List<string> unLearnedMagic = new List<string>(); 27 int count = 3; 28 public GameObject parentChoice; 29 30 // 31 int maxHp = 100; 32 int currentHp; 33 int maxMana = 100; 34 int currentMana; 35 public Slider hpslider; 36 public Slider manaslider; 37 private GameObject damageUI; 38 39 40 // 41 public GameObject Controller; 42 public GameObject Menu; 43 44///////////////////////////////////////////////////////////// 45 public void Awake() 46 { 47 unLearnedMagic.Add("MagicButton/FireBallButton"); 48 unLearnedMagic.Add("MagicButton/IceBallButton"); 49 unLearnedMagic.Add("MagicButton/EathBallButton"); 50 while (count-- > 0) 51 { 52 53 int index = Random.Range(0, unLearnedMagic.Count); 54 55 string ransu = unLearnedMagic[index]; 56 GameObject selectmagic= (GameObject)Resources.Load(ransu);// 57 GameObject childmagic=Instantiate(selectmagic, transform.position, Quaternion.identity); 58 childmagic.transform.parent = parentChoice.transform; 59 Debug.Log(ransu); 60 } 61 } 62//////////////////////////////////////////////////// 63 64// クリックした魔法名を引数で渡す 65 public void OnRegisterMagic(string magicName) 66 { 67 // 既に登録済みの魔法を選択した場合はリストから削除する 68 foreach (var v in magic) 69 { 70 if (v == magicName) 71 { 72 magic.Remove(v); 73 return; 74 } 75 } 76 77 // セット数は三つまで 78 if (magic.Count < 3) 79 { 80 magic.Add(magicName); 81 } 82 } 83}

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

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

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

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

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

guest

回答1

0

ベストアンサー

取り出したボタンを順に横に並べたい

親にしているparentChoiceに予めコンポーネントとしてHorizontal Layout Groupを設定しておくと子にするだけで自動で整列されます。
将来的に2列3列と増えていきそうならばGrid Layout Groupの方が良いです。

動的に生成したボタンの関数を指定したい

onClick.AddListenerを使います。
下記の様にInstantiateで生成した後におこなって下さい。

C#

1 GameObject childmagic = Instantiate(selectmagic, transform.position, Quaternion.identity); 2 childmagic.GetComponent<Button>().onClick.AddListener(() => OnRegisterMagic(ransu));

投稿2020/03/23 08:57

編集2020/03/23 09:01
Hawn

総合スコア1222

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

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

退会済みユーザー

退会済みユーザー

2020/03/24 08:50 編集

すみません 書き方が分からなくてうまくいってないです public void Awake() { unLearnedMagic.Add("MagicButton/FireBallButton"); unLearnedMagic.Add("MagicButton/IceBallButton"); unLearnedMagic.Add("MagicButton/EathBallButton"); while (count-- > 0) { int index = Random.Range(0, unLearnedMagic.Count); string ransu = unLearnedMagic[index]; GameObject selectmagic = (GameObject)Resources.Load(ransu);// GameObject childmagic = Instantiate(selectmagic, transform.position, Quaternion.identity); childmagic.transform.parent = parentChoice.transform; ////////////////////////// 55行目 /////////////////////////////// childmagic.GetComponent<Button>().onClick.AddListener(() => OnRegisterMagic(ransu)); ///////////////////////////////////////////////////////////// Debug.Log(ransu); } } こう書いたんですがうまくいかないです。 ボタンを押しても何の反応もないです NullReferenceException: Object reference not set to an instance of an object Player.Awake () (at Assets/Scripts/Player/Player.cs:55)
退会済みユーザー

退会済みユーザー

2020/03/24 09:14 編集

すみません 反応するようにはなりました! 二つ以下の場合どうすればいいんでしょうか 後ボタン一つ選んで押した時にそのキャンバスを閉じたいんですが新しくキャンバスを閉じる関数を作ってonClick.AddListener(()の様にしないといけないんでしょうか関数が多くなりすぎてもいいのかも知れないですが悪いと思っているので関数作る以外に方法があるなら教えて頂きたいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問