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

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

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

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

0回答

1047閲覧

プレハブからボタンを作る方法

biginerofunity

総合スコア8

C#

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2019/11/15 06:00

編集2019/11/18 09:07

前提・実現したいこと

4つのいずれかのボタンを押すと、それらを消して、次の新たな4つのボタンを生成する仕組みを実現したいです。

発生している問題・エラーメッセージ

下のコードで、スタートの中でProduceFirst関数を呼び出して、プレハブから生成することはできました。これらのプレハブにはFirstのタグが付いており、OnclickによってVanish関数を呼び出し、消すことにも成功しました。しかし、ProduceSecondを呼び出した際にエラーメッセージが出てしまいます。

エラーメッセージ UnassignedReferenceException: The variable AttackButton of FirstCommand has not been assigned. You probably need to assign the AttackButton variable of the FirstCommand script in the inspector.

該当のソースコード

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

public class FirstCommand : MonoBehaviour
{

public GameObject canvas;//キャンバス public GameObject FightButton; public GameObject ConversationButton; public GameObject FeedButton; public GameObject EscapeButton; public GameObject AttackButton; public GameObject WeaponButton; public GameObject BackButton; public GameObject DefenceButton; // Start is called before the first frame update void Start() { ProduceFirst(); } // Update is called once per frame void Update() { } public void OnClick() { switch (transform.name) { case "Fight": Debug.Log("tatakau"); Vanish(); ProduceSecond(); break; case "Conversation": Debug.Log("kaiwa"); Vanish(); ProduceSecond(); break; case "Feed": Debug.Log("esa") Vanish(); ProduceSecond(); ; break; case "Escape": Debug.Log("逃げる"); Vanish(); ProduceSecond(); break; default: break; } } void Vanish() { GameObject[] Firsts = GameObject.FindGameObjectsWithTag("First"); foreach (GameObject First in Firsts) { Destroy(First); } } void ProduceFirst() GameObject prefab1 = (GameObject)Instantiate(FightButton); prefab1.name = "Fight"; prefab1.transform.SetParent(canvas.transform, false); GameObject prefab2 = (GameObject)Instantiate(ConversationButton); prefab2.name = "Conversation"; prefab2.transform.SetParent(canvas.transform, false); GameObject prefab3 = (GameObject)Instantiate(FeedButton); prefab3.name = "Feed"; prefab3.transform.SetParent(canvas.transform, false); GameObject prefab4 = (GameObject)Instantiate(EscapeButton); prefab4.name = "Escape"; prefab4.transform.SetParent(canvas.transform, false); } void ProduceSecond() { GameObject prefab5 = (GameObject)Instantiate(AttackButton);//この文章にエラーがでる prefab5.name = "Attack"; prefab5.transform.SetParent(canvas.transform, false);  GameObject prefab6 = (GameObject)Instantiate(WeaponButton); prefab6.name = "Weapon"; prefab6.transform.SetParent(canvas.transform, false); GameObject prefab7 = (GameObject)Instantiate(DefenceButton); prefab7.name = "Defence"; prefab7.transform.SetParent(canvas.transform, false); GameObject prefab8 = (GameObject)Instantiate(BackButton); prefab8.name = "Back"; prefab8.transform.SetParent(canvas.transform, false); }

}
### 言語

Cシャープ

試したこと

下のコードで、スタートの中でProduceFirst関数を呼び出して、プレハブから生成することはできました。これらのプレハブにはFirstのタグが付いており、OnclickによってVanish関数を呼び出し、消すことにも成功しました。しかし、ProduceSecondを呼び出した際にエラーメッセージが出てしまいます。有効になっているスクリプトについてはInspectorでプレハブの指定は行っています。

補足情報(FW/ツールのバージョンなど)

unity2018.3.12.f1

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

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

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

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

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

sakura_hana

2019/11/15 06:24

エラーが出ている箇所、多分`WeaponButton`ではなく`AttackButton`ですよね。 AttackButtonにセットしてあるオブジェクト、シーン上に元々存在していて、Firstタグが付いていませんか? もしそうならVanishの際、このオブジェクト(元となるプレハブ)も一緒に消えてしまっているので、それを元に生成出来ずエラーとなっている気がします。
biginerofunity

2019/11/15 08:06

返信いただきありがとうございます。 すいません、おっしゃる通りAttackButtonです???? これにセットしてるオブジェクトはプレハブ化されたボタンで、Firstタグは付いております。しかし、初めの段階でHierarchyウィンドウには存在していません。Startでプレハブから作られていると思われます。また、Vanish後もプレハブ化したボタンはプロジェクトウィンドウのPrefabsホルダに存在しています。 引き続き教えていただけると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問