個人ゲームアプリ制作 -
unityによるゲーム制作

リリースアプリ一覧

unity2D


[Unity2D]動的にInstantiateしたButtonにOnClickイベントを設定する

自動で生成した各アイテムをクリックするとポップアップウィンドウが出るようします。

まずButtonコンポーネントが付いた武器やアイテムオブジェクト(Prefab)を作る。
プレファブ作成後、自動でアイテムを複製できるようにItemGeneratorを作成。

ItemGeneratorオブジェクト作成後はItemGeneratorコンポーネントを作成する。


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

public class ItemGenerator : MonoBehaviour {

	private ItemDatabase itemDatabase;
	private SkillDatabase skillDatabase;
	private PlayerScript player;

	public GameObject itemNode;
	public GameObject content;

	public GameObject purchaseWindow;

	void Start(){
		player = GameObject.Find("Player").GetComponent<PlayerScript>();
		itemDatabase = GameObject.Find("ItemDatabase").GetComponent<ItemDatabase>();
		skillDatabase = GameObject.Find("SkillDatabase").GetComponent<SkillDatabase>();

		for(int i=0; i();
			itemSprite.sprite = Resources.Load("Item/" + id.ToString());

			Text price = itemObject.transform.Find("GoldBack/Price").GetComponent();
			price.text = itemDatabase.items[id].price.ToString();

			Button button = itemObject.GetComponent<h;Button>();
			button.onClick.AddListener(() => {
	                WindowOn(id);
	            });
		}
		
		

	}

	void WindowOn(int id){	
		purchaseWindow.SetActive(true);

		Text name = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Text>();
		name.text = itemDatabase.items[id].itemName;

		Text skillDesc = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Text>();
		skillDesc.text = skillDatabase.skills[itemDatabase.items[id].skillID].skillDesc;

		Text price = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Text>();
		int selectItemPrice = itemDatabase.items[id].price;
		price.text = selectItemPrice.ToString();

		Text wallet = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Text>();
		wallet.text = player.gold.ToString();

		Button b = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Button>();
		Text t = purchaseWindow.transform.Find("オブジェクトのパス").GetComponent<Text>();
		if(selectItemPrice > player.gold){			
			t.color = new Color(150f, 150f, 150f);
			b.interactable = false;
		}else{			
			t.color = new Color(0f, 0f, 0f);
			b.interactable = true;
		}
	}
}

気が向いたら分かりやすく書き直す。

理屈はbutton.onClick.AddListener(() => {WindowOn(id);});でボタンにonClickを追加し、WindowOn関数を付与する。

インスペクターのonClickのドロップダウンで選択する関数の中身をItemGeneratorコンポーネントに書けば良いだけ。

2017 / 08 / 28
unity2D
C#

スポンサーリンク

© 2018 Takahiro Ueda