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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1212閲覧

新しく作成したシーンに他のシーンで作ったはずのスクリプトが適用されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/05/17 05:18

編集2019/05/20 03:42

Unityで新しいシーンを作成したところ、他のシーンのオブジェクトにアタッチしたはずのスクリプトがなぜが反映されてしまいます。最初はオブジェクトも反映されていたので、マルチシーンエディティングによるものなのかなと思ったのですが、ゲーム起動後も、やはり他のシーンで作ったスクリプトは適用されていました。(ロックカーソルなど)どうすれば適用できないようにできるのでしょうか?

追記
##現在のヒエラルキーの様子

##流れ
最初に「MainGame」というシーンを作成
視点操作できるTPSゲームをプログラム

タイトル画面を作りたいと思い、新たに「Menu」というシーンを作成
Menuは簡単なGUIなのでスクリプトは何も入れていない

しかし、ゲームを開始したところ「MainGame」にある「MouseControll」というオブジェクトにアタッチしたはずのスクリプトが
「Menu」のシーンに反映されていた(ここでは最初の質問にも申し上げました、カーソルロックやカーソルの非表示などで判断いたしました。カーソルのプログラムも「MouseControll」にアタッチしたスクリプトに書きました。)

「Menu」を開いている最中は、「MainGame」のシーンはアンロードされていました。

問題のオブジェクトについているスクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5 6public class Controller : MonoBehaviour 7{ 8 [SerializeField] private float minY = -85.0f; 9 [SerializeField] private float maxY = 85.0f; 10 [SerializeField] private float speedX = 10.0f; 11 [SerializeField] private float speedY = 10.0f; 12 [SerializeField] private float rotationX = 0.0f; 13 [SerializeField] private float rotationY = 0.0f; 14 [SerializeField] private float movespeed = 1300.0f; 15 [SerializeField] private float uppower = 1300.0f; 16 [SerializeField] private bool xInversion, yInversion; 17 public Rigidbody rb; 18 19 void Start() 20 { 21 22 rotationX = transform.localEulerAngles.y; 23 if (rotationX > 180f) 24 rotationX -= 360f; 25 rotationY = transform.localEulerAngles.x; 26 if (rotationY > 180f) 27 rotationY -= 360f; 28 29 rb = GetComponent<Rigidbody>(); 30 31 string name = SceneManager.GetActiveScene().name; 32 33 if (name == "MainGame") 34 { 35 Cursor.lockState = CursorLockMode.Locked; //カーソルをロック 36 Cursor.visible = false; //カーソルを非表示 37 } 38 } 39 40 void Update() 41 { 42 43 rotationX += Input.GetAxis("Mouse X") * speedX; 44 rotationY -= Input.GetAxis("Mouse Y") * speedY; 45 rotationY = Mathf.Clamp(rotationY, minY, maxY); 46 transform.localEulerAngles = new Vector3(rotationY, rotationX, 0f); 47 48 if (Input.GetKey(KeyCode.Escape)) //Menuの表示 49 SceneManager.LoadScene("Menu"); 50 51 } 52 void FixedUpdate() 53 { 54 if (Input.GetKey(KeyCode.W)) 55 rb.AddForce(transform.forward * movespeed); 56 if (Input.GetKey(KeyCode.A)) 57 rb.AddForce(-transform.right * movespeed); 58 if (Input.GetKey(KeyCode.S)) 59 rb.AddForce(-transform.forward * movespeed); 60 if (Input.GetKey(KeyCode.D)) 61 rb.AddForce(transform.right * movespeed); 62 if (Input.GetKey(KeyCode.Space)) 63 rb.AddForce(transform.up * uppower); 64 if (Input.GetKey(KeyCode.LeftShift)) 65 rb.AddForce(-transform.up * uppower); 66 } 67} 68

##エラー
エラーは何も起きていません

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

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

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

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

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

sakura_hana

2019/05/17 08:34

何が起こっているのかさっぱり分かりません。「スクリプトが適用/反映される」とはそもそもどういう状態なのか(なぜそうなっていると判断したのか)からして怪しいです。 スクリプトやスクリーンショットを載せて、「どんな操作をした時にor何が起こった時に」「何が起こるのか」を明示してください。 参考:https://teratail.com/help/question-tips
退会済みユーザー

退会済みユーザー

2019/05/17 11:03

ご回答ありがとうございます。大変失礼いたしました。文章を追記いたしましたので、ご回答をお願いします。
sakura_hana

2019/05/18 03:27

追記ありがとうございます。 ・ゲーム開始時(Menuシーンにいる時)、MouseControllオブジェクトはシーン上に確実に存在していない。 ・Menuシーン上に、問題のスクリプトが付いているオブジェクトは存在していない。 以上2点を確認してください。(スクリプト上のカーソルロックを行なっている辺りに Debug.Log(gameObject.name); とでも入れると、そいつが付与されているオブジェクト名が出るので分かりやすいかと思います) また、問題のスクリプトのコードも一応提示してください。(実はエディタスクリプト扱いになっていて、オブジェクトに依存せず勝手に発動していたとかもあり得るかもしれません)
退会済みユーザー

退会済みユーザー

2019/05/20 05:30 編集

返信遅れてすいません。 2点を確認したところ、MouseControllオブジェクトも表示されていました。また、ゲーム起動中はヒエラルキーには、問題のスクリプトが付いているオブジェクトは存在していませんでした。 コードは追記しました。
guest

回答1

0

ベストアンサー

私も同じようなことがありましたが、一旦にスクリプトをオブジェクトから外してセーブ、Unutyを再起動して付け直したら治りました。
無理やり直したいのならば例えばMainmenuにしかないオブジェクトを検索させて、見つからなければ処理しないようにスクリプトの最初に入れるなどするといいと思います。

【Unity】GameObject.Find()と Transform.Find()でオブジェクトを取得する。

http://albatrus.com/main/unity/7235
オブジェクトが見つからなかった時にはnullを返します

投稿2019/05/22 12:15

itoho

総合スコア22

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

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

退会済みユーザー

退会済みユーザー

2019/05/24 00:12

無理やり直してみますw...ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問