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

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

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

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

Q&A

解決済

1回答

4107閲覧

unity ポーズボタン

takeutciyuma

総合スコア15

Unity

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

0グッド

2クリップ

投稿2016/09/09 11:40

ゲーム画面上でポーズボタンを押したときにポーズ画面を出して、ゲーム上のポーズボタンを消して、ポーズ画面上のボタンを押すとポーズ画面を消し、また画面上のポーズボタンを再表示するプログラムを作っているのですが、そこでつまずいています。
キャンバス上にUIをのせてあります。
ポーズ画面、ポーズボタンはUIで、ポーズ画面はPanel上にボタンを乗せている状態です。

キャンバス名 Canvas
ポーズボタン名 Poze
ポーズ画面名 Panel

using UnityEngine;
using System.Collections;

public class PozeManager : MonoBehaviour {
private static GameObject Panel;
private static GameObject Poze;
// Use this for initialization
void Start () {
Panel.SetActive (false);
}

// Update is called once per frame void Update () { } public void Buttonpush(){ Panel.SetActive(true); Poze.SetActive (true); }

}
スクリプトは、キャンバスにのせてあります。
回答の方宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ポーズ画面、ポーズボタンはUIで、ポーズ画面はPanel上にボタンを乗せている状態です。

これは上に乗せてるだけですか?ヒエラルキー上でpanelの子としてボタンを配置しているのならとりあえず出してください。もし入れ子状態なら親オブジェクト(panel)をPanel.SetActive(false);するとボタンも消えます。

▼ Panel
Poze

みたいに入れ子になっていないなら下の方法で解決できます。

解決法 1 すごく分かりやすく書いてみる。

//( 省略 ) public void Buttonpush(){ bool isActivePanel = true; bool isActivePoze = true; //gameObject.activeInHierarchyでシーン上でアクティブか?(見えているか?)が判定できます。 //見えていればtrue 見えていなければfalse if(Panel.activeInHierarchy) { isActivePanel = false; }else{ isActivePoze = false; } Panel.SetActive(isActivePanel); Poze.SetActive (isActivePoze); } //( 省略 )

解決法 2 短く簡潔に書いてみる。

//( 省略 ) public void Buttonpush(){ bool isActivePanel = Panel.activeInHierarchy; //!で逆という意味です。!true と false は同じです。 Panel.SetActive(!isActivePanel); Poze.SetActive (isActivePanel); } //( 省略 )

ちょっと気になったので。。。

C#

1private static GameObject Panel; 2private static GameObject Poze;

こちらstaticにする理由はなんですか? managerという名前だからですか?
明確な理由が無ければ必要ないので消しといてください。むやみにstaticは使わない方がいいですよ。

C#

1private GameObject Panel; 2private GameObject Poze;

あと最後にインデントをとった方がいいです。失礼ですが今のコードはすごく読みにくいです ><
そんなにむずかしくないのでトライしてみてくだい。人だけではなく自分自信も読みやすくなりますよ。

インデントをとって書いてみる。

public void Buttonpush(){ bool isActivePanel = true; bool isActivePanelPoze = true; //activeInHierarchyでシーン上でアクティブか?(見えているか?)が判定できます。 //見えていればtrue 見えていなければfalse if(Panel.activeInHierarchy) { isActivePanel = false; }else{ isActivePanelPoze = false; } Panel.SetActive(isActivePanel); Poze.SetActive (isActivePanelPoze); }

投稿2016/09/09 12:42

編集2016/09/09 12:47
IShix

総合スコア1724

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

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

takeutciyuma

2016/09/09 19:50

とても詳しくありがとうございます。 もっとわかりやすいスクリプトをかけるように努力します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問