実現したいこと
ボタンを押したときにスクリプタブルオブジェクトのリスト内で設定したオブジェクトを
特定の場所に表示させたい。
前提
発生している問題・エラーメッセージ
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; ////////////////////////////////////////////////////// ////どこからでもアクセスできるキャラのデータベース//// ////////////////////////////////////////////////////// [CreateAssetMenu] public class CharaDataBase : ScriptableObject { public List<PocketChara> itemList = new List<PocketChara>(); } [System.Serializable] public class PocketChara { public GameObject charaButtonIcon; //ボタン public GameObject charaSt; //キャラ画像 public int charaId; //キャラ識別番号 public string charaName; //キャラ名 public string explainText; //キャラ説明文 } ---------------------------------------------------------------- using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SelectGameManager : MonoBehaviour { //スクリプタブルオブジェクト(キャラID、名称等のデータベースList) [SerializeField] CharaDataBase charaDataBase; //////////////////////////////////////// ////キャラセレクトボタンを生成で使用//// //////////////////////////////////////// public GameObject canvas; //CanVasを指定 public GameObject CharaButtonIcon; //ボタンを指定 void Start() { CharaSelectIcon(); } ////////////////////////////////// ////キャラセレクトボタンを生成//// ////////////////////////////////// public void CharaSelectIcon() { for(int i = 0; i <= 2; i++) { //スクリプタブルオブジェクトのボタンを取得 CharaButtonIcon = charaDataBase.itemList[i].charaButtonIcon; //取り出したボタンをインスタンス化 GameObject TubakiButton = (GameObject)Instantiate(CharaButtonIcon); //キャンバスの子に設定 TubakiButton.transform.SetParent(canvas.transform, false); Debug.Log(charaDataBase.itemList[i].charaName); } } ---------------------------------------------------------------------------------------------- using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CharaOnClick : MonoBehaviour { //スクリプタブルオブジェクト(キャラID、名称等のList) [SerializeField] CharaDataBase charaDataBase; public GameObject Chara; public GameObject canvas; public void Tubaki() { Chara = charaDataBase.itemList[0].charaSt; GameObject TubakiSt = (GameObject)Instantiate(Chara); //キャンバスの子に設定 TubakiSt.transform.SetParent(canvas.transform, false); } }
試したこと
キャラ選択画面を製作しています。
CharaDataBaseクラスをキャラのデータベースにしたくて、スクリプタブルオブジェクトのリストを作りました。
表示させたいプレハブのボタンをデータベースにアタッチして、SelectGameManagerクラスで呼び出して配置することはできました。
呼び出したプレハブのボタンを押すと、データベースで設定した画像を別の場所に表示するようにしたいため、ボタンのOnClickを使えばよいのではないかと思い、CharaOnClickというクラスを作りボタンにアタッチしました。クラス内でSelectGameManagerのCharaSelectIconと同じようにスクリプトを作ったのですが、ヒエラルキーのCanvasをアタッチすることができずうまくいきません。
考え方が間違っているのでしょうか。数日悩んでいるので、解決策を教えていただけると幸いです。
補足情報(FW/ツールのバージョンなど)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/21 22:53