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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

解決済

1回答

1411閲覧

Unityで、他シーンのオブジェクトのSetActiveをいじりたい

hakhak

総合スコア32

Unity

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

0グッド

0クリップ

投稿2018/11/15 14:01

Unity初心者です。もしわかる人がいましたら、どうぞよろしくお願いいたします。
Unityにおいて、あるシーンでゲームがクリア出来たら、(ポイントが一定ポイント以上になったら、)他シーンに存在する、あるゲームオブジェクト(ボタンです)のSetActiveをfalseからtrueにしたいのですが、どうしても方法が見つかりません。

試したこと
SetActiveにしたいオブジェクトにタグ付けして、そのタグのついているものを他シーンからSetActiveにしてみましたが、やはり他シーンのオブジェクトには触れることが出来ないようです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

私もそれほどUnityに詳しくないので他に方法があるかもしれませんが......

他シーンのGameObjectを操作することはできないので、staticフィールドやPlayerPrefsを利用することで、状態を変えてやります。

例えば、シーンAでどこかのスクリプトのstatic bool isButtonActiveをfalseからtrueへ書き換えたとし、
シーンB読み込み時に"あるゲームオブジェクト"にアタッチしておいたスクリプトのStart()内でisButtonActiveの値でSetActiveを更新すればokという流れです。

staticフィールド(staticを付けた変数)は、シーンを切り替えても内容を保持したままです。

追記

少し勘違いしていました。setActiveがfalseでしたらそもそもスクリプトも動かないですよね。
ButtonManager等の名前のGameObjectを別途用意し、予めインスペクター側で参照を取っておくことで操作が可能になるかと。
別途用意した管理用ゲームオブジェクト及びスクリプトに[SerializeField] private GameObject buttonGmObj;を作るなどして。

投稿2018/11/15 14:46

編集2018/11/15 15:02
Sado

総合スコア89

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

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

Sado

2018/11/15 14:49

staticフィールドは扱いが難しいので、細心の注意を払って利用するようにしましょう...... (最近、参加しているサークルのプロジェクトでstaticな変数が点在して、スクリプトの仕様の理解に苦労した記憶有り)
hakhak

2018/11/15 16:37

わかりました。わからないことだらけなので本当に助かります。今回は提案してくださった方法で、無事解決することが出来ました。本当にありがとうございました。
Sado

2018/11/22 16:33

staticについての補足です。 どうやらシングルトンと言われる方法がもっとも適しているようです。 http://albatrus.com/main/unity/7517 ~~~Managerクラスの作成で便利ですね...私も編集中のプロジェクトを直さなくては。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問