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

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

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

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

Unity

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

Q&A

解決済

1回答

1371閲覧

オブジェクトをアクティブ/非アクティブに切り替えるButtonを作成したい

SnowManPlayer

総合スコア2

C#

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

Unity

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

0グッド

0クリップ

投稿2021/04/03 14:51

前提・実現したいこと

Unityを使用しています
オブジェクトをアクティブ/非アクティブに切り替えるButtonを作成したいのですが、
空のゲームオブジェクトを親にして子オブジェクトをtransform.findで探そうとした際に以下のエラーメッセージが発生しました。

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

MissingComponentException: There is no 'GameObject' attached to the "Camera2" game object, but a script is trying to access it.

該当のソースコード

C#

1 GameObject Center; //空のゲームオブジェクト(親) 2 GameObject Sphere; //子オブジェクト アクティブ/非アクティブを切り替える対象 3 4 void Start() 5 { 6 Center=GameObject.Find("Center").GetComponent<GameObject>(); 7 Sphere=Center.transform.Find("Sphere").GetComponent<GameObject>(); 8 } 9 10 public void Changer() 11 { 12 if(Speher==true) 13 { 14 Sphere.SetActive(false); 15 } 16 else 17 { 18 Sphere.SetActive(true); 19 } 20 }

試したこと

空のゲームオブジェクトの取得?の仕方がわからずに Center=GameObject.Find("Center").GetComponent<GameObject>(); としてしまいましたが、この辺りが違うのかと思い色々いじりましたがわかりませんでした。

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

Unityを使用して独学で初めて2ヶ月ですが、まだ使い方になれずにいますので、今回のことも単純なミスなのかもしれませんがご教授していただくと助かります。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

※提示されているエラーログ内の「Camera2」というのは、ソースコード内の「Center」の間違いでしょうか?
一旦「Camera2」には触れずに回答を記載させて頂きます。

エラー原因
「.GetComponent<GameObject>()」の部分は不要です。
「GameObject.Find("Center")」の部分が、GameObjectを返してくれるので。

その他の問題と思われる点
1、「Center.transform.Find("Sphere").GetComponent<GameObject>();」の部分も誤っております。
こちらも「GetComponent」する必要はありません。
また、「transform.Find」はTransform型を返却するので、以下サンプルソースの様に書き換える必要があると思われます。

2、「if (Sphere == true)」だと正常にActive判定できないと思われます。
「activeSelf」という、オブジェクトの状態を返してくれるプロパティがあるので、こちらを利用してはいかがでしょうか。

参考URL

サンプルソース

diff

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 8 GameObject Center; //空のゲームオブジェクト(親) 9 GameObject Sphere; //子オブジェクト アクティブ/非アクティブを切り替える対象 10 11 void Start() 12 { 13-- Center = GameObject.Find("Center").GetComponent<GameObject>(); 14-- Sphere = Center.transform.Find("Sphere").GetComponent<GameObject>(); 15 16++ Center = GameObject.Find("Center"); 17++ Sphere = Center.transform.Find("Sphere").gameObject; 18 } 19 20 public void Changer() 21 { 22-- if (Sphere == true) 23++ if (Sphere.activeSelf) 24 { 25 Sphere.SetActive(false); 26 } 27 else 28 { 29 Sphere.SetActive(true); 30 } 31 } 32} 33

投稿2021/04/03 15:24

編集2021/04/03 15:29
tsuki01

総合スコア1751

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

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

SnowManPlayer

2021/04/04 07:16

Camera2ではなく、 Centerであってます、、すみません わかりやすく解説していただいてありがとうございます。 試してみます。 とても勉強になりました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問