質問するログイン新規登録

Q&A

1回答

114閲覧

UnityC# 【PUN2】別シーンのボタンを押せなくするには

takoyaki0911

総合スコア0

Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

Photon Server

Photon Serverは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つで、サーバにインストールして使うサーバアプリケーションです。全てカスタマイズが可能で権限管理もできます。

C#

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

Unity

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

0グッド

0クリップ

投稿2026/08/05 07:11

0

0

実現したいこと

メニューシーンとゲームシーンがあり
メニューシーンでボタン1が押されると、ゲームシーンに移動して
オブジェクトが生成され、
オブジェクトが存在する限り、
メニューシーンのボタン1が押せなくなる
というプログラムを製作したい。

発生している問題・分からないこと

実現方法が分かりません。

該当のソースコード

public class メニュースクリプト : MonoBehaviourPunCallbacks { public static int Number; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { Number = 0; } // Update is called once per frame void Update() { } public void Button1() { Number = 1; SceneManager.LoadScene("ゲームシーン"); } }
public class オブジェクト生成スクリプト : MonoBehaviourPunCallbacks { // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { PhotonNetwork.ConnectUsingSettings(); } public override void OnConnectedToMaster() { PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default); } public override void OnJoinedRoom() { int Number = メニュースクリプト.Number; if (Number == 1) { //キャラクターを生成 GameObject G = PhotonNetwork.Instantiate ("A", transform.position,Quaternion.identity); } } }
特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

結果は実現不可能でした。

補足

特になし

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

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

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

guest

回答1

0

こんにちは。
以下の方法でできると思います。
1、 メニュースクリプトでButton コンポーネントを参照し、Start() 内で状態チェックを行ってボタンの可否を切り替えるようになる

using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using Photon.Pun; public class メニュースクリプト : MonoBehaviourPunCallbacks { public static int Number; // オブジェクトが存在しているかを保持する静的フラグ public static bool isObjectSpawned = false; [SerializeField] private Button button1; // Inspectorでボタン1を割り当てます void Start() { Number = 0; // オブジェクトが存在している場合は、ボタンを押せなくする if (button1 != null) { button1.interactable = !isObjectSpawned; } } public void Button1() { // 念のためクリック時にもチェック if (isObjectSpawned) return; Number = 1; SceneManager.LoadScene("ゲームシーン"); } }

2、 オブジェクトを生成したタイミングで isObjectSpawned = true に設定

public class オブジェクト生成スクリプト : MonoBehaviourPunCallbacks { void Start() { PhotonNetwork.ConnectUsingSettings(); } public override void OnConnectedToMaster() { PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default); } public override void OnJoinedRoom() { int Number = メニュースクリプト.Number; if (Number == 1) { // キャラクターを生成 GameObject G = PhotonNetwork.Instantiate("A", transform.position, Quaternion.identity); // 生成完了フラグを立てる メニュースクリプト.isObjectSpawned = true; } } }

3、オブジェクトが破棄されたタイミングでフラグをリセット

public class SpawnedObjectController : MonoBehaviour { private void OnDestroy() { // オブジェクトが破棄されたらフラグをfalseに戻す メニュースクリプト.isObjectSpawned = false; } }

投稿2026/08/07 01:46

yuyafujiwara

総合スコア99

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問