質問: Unityのプレハブについて教えて下さい。 Hierarchy Button(GameObject) Project Button 手順) 1、HierarchyでButtonを作成しました。 2、ProjectでScriptを作成しました。 3、ButtonのinspectorのAdd ComponentをクリックしてScriptAをコンポーネントに追加しました。 4、ButtonのinspectorのOn Click()にScriptAのScript名とScript内のメソッド名を指定しました。 5、ButtonをProjectにドラッグ&ドロップしてプレハブButtonを作成しました。 上記で作成したプレハブですが中身を見てみると4で設定したOn Click()が設定されていません。どうしてでしょうか?On Click()の設定をしたプレハブを作成する方法分かる方教えて下さい。Unity2017
回答: 質問内容を再確認したところ、手順には問題がなさそうに見えます。 いったん下記は取り消します。こちらでも確認してみます。 ~~プレハブにしてHierarchyビューから削除すると、自分のゲームオブジェクトでないものに対するインスペクターからの参照は外れてしまうようです。 自分の(Buttonの)ゲームオブジェクトに対象のスクリプトをアタッチした状態で同じ設定を試してみてください。~~ 【追記1】 やはり質問内容の手順で問題なさそうに見えますね。 こちらで確認してみましたが、問題はありませんでした。 下図のように、OnClickの欄にドラッグ&ドロップでスクリプトをアタッチしています。 !イメージ説明 【追記2】 参考動画 【追記3】 なかなか解決しないようなので、参考までに別のやり方を紹介しておきます。 ButtonのインスペクターのOnClick欄を使わなくても、以下のようにスクリプトを書くことでボタンクリック時の処理を呼び出すことができます。 スクリプト内の【参考】の箇所のとおりです。 ``` using UnityEngine; using UnityEngine.UI; public class ButtonTest : MonoBehaviour { private Text text; private int value = 0; private void Start () { text = GameObject.FindWithTag ( "TextField" ).GetComponent (); // 【参考】このようにすれば、インスペクターのOnClick欄を使わなくても処理できる Button button = GetComponent(); button.onClick.AddListener ( () => { // このカッコ内にボタンクリック時の処理を書く Clicked(); } ); } // ボタンクリック時の処理の例(メソッド名や処理内容は任意) private void Clicked () { value++; text.text = value.ToString (); } } ```