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

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

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

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

Unity3D

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

Q&A

解決済

3回答

3419閲覧

UnityEngine.Application.〜という警告を消す方法

rabinisan

総合スコア9

C#

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

Unity3D

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

0グッド

0クリップ

投稿2018/12/19 01:40

編集2018/12/19 02:32

前提・実現したいこと

現在Unityを使用したゲームを作成しているのですが、ビルドせずにいるとこのような警告がコンソールに表記されています。

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

Assets/Scripts/SceneLoader.cs(17,31): warning CS0618: `UnityEngine.Application.loadedLevel' is obsolete: `Use SceneManager to determine what scenes have been loaded'
Assets/Scripts/SceneLoader.cs(19,28): warning CS0618: `UnityEngine.Application.levelCount' is obsolete: `Use SceneManager.sceneCountInBuildSettings'
Assets/Scripts/SceneLoader.cs(21,15): warning CS0618: `UnityEngine.Application.LoadLevel(int)' is obsolete: `Use SceneManager.LoadScene'
Assets/Scripts/SceneLoader.cs(26,31): warning CS0618: `UnityEngine.Application.loadedLevel' is obsolete: `Use SceneManager to determine what scenes have been loaded'
Assets/Scripts/SceneLoader.cs(27,32): warning CS0618: `UnityEngine.Application.levelCount' is obsolete: `Use SceneManager.sceneCountInBuildSettings'
Assets/Scripts/SceneLoader.cs(30,15): warning CS0618: `UnityEngine.Application.LoadLevel(int)' is obsolete: `Use SceneManager.LoadScene'

該当のソースコード

これがそのエラー元のスクリプトです。(アセットストアから持ってきたunityちゃんにデフォルトで入っていたものです)

using UnityEngine; using System.Collections; public class SceneLoader : MonoBehaviour { void OnGUI() { GUI.Box(new Rect(10 , Screen.height - 100 ,100 ,90), "Change Scene"); if(GUI.Button( new Rect(20 , Screen.height - 70 ,80, 20), "Next")) LoadNextScene(); if(GUI.Button(new Rect(20 , Screen.height - 40 ,80, 20), "Back")) LoadPreScene(); } void LoadPreScene() { int nextLevel = Application.loadedLevel + 1; if( nextLevel <= 1) nextLevel = Application.levelCount; Application.LoadLevel(nextLevel); } void LoadNextScene() { int nextLevel = Application.loadedLevel + 1; if( nextLevel >= Application.levelCount) nextLevel = 1; Application.LoadLevel(nextLevel); } }

試したこと

古いから新しいものを使えと催促されているとのことなので該当する内容があるかもしれないと思い、検索をしてみましたが似たようなものが見つからず困っています。
警告の一部だけ抜き出して検索してもそれらしいサイトが見つかりません。

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

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

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

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

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

sakura_hana

2018/12/19 01:52

「`UnityEngine.Application.loadedLevel' is obsolete:」など、warning CS0618:以降の文字列でググると色々出て来ると思います。 もしくは「UnityEngine.Application.loadedLevel」「SceneManager.sceneCountInBuildSettings」など重要っぽい単語で検索してもいいかと。
sakura_hana

2018/12/19 02:10

余談ですが黄色い表示は「エラー」ではなく「警告(ワーニング)」です。 エラー→直さないと動作に影響が出る/警告→直さなくても(今は)正常動作はする という違いがあります。伝達時に齟齬が出る場合があるので以後使い分けて頂けると幸いです。 また、質問タイトルは具体的に書いた方がありがたいです。今回なら「UnityEngine.Application.〜という警告を消すには?」など。良ければこちらもご覧ください→https://teratail.com/help/question-tips
fiveHundred

2018/12/19 02:46

横やり&細かい点ですいませんが、「エラーではないので処理は止めないが、動作に影響が出るかもしれない」場合もワーニングが出されることがあります。 なので、ワーニングは「直さなくても(今は)正常動作はする」というよりかは「その処理が意図した動作であれば問題ないが、基本的には直すべき」というほうが正しいのではないかと思います。
sakura_hana

2018/12/19 06:28

>fiveHundredさん 「その処理が意図した動作であれば問題ないが、基本的には直すべき」これは確かにその通りですね。正常動作というのは「自身が想定した動作」のつもりでしたが言葉が足りなかったです。
guest

回答3

0

ベストアンサー

このように書き換えれば実装できます

C#

1 using UnityEngine; 2using System.Collections; 3using UnityEngine.SceneManagement; 4public class SceneLoader : MonoBehaviour { 5 6 void OnGUI() 7 { 8 GUI.Box(new Rect(10 , Screen.height - 100 ,100 ,90), "Change Scene"); 9 if(GUI.Button( new Rect(20 , Screen.height - 70 ,80, 20), "Next")) 10 LoadNextScene(); 11 if(GUI.Button(new Rect(20 , Screen.height - 40 ,80, 20), "Back")) 12 LoadPreScene(); 13 } 14 15 void LoadPreScene() 16 { 17 int nextLevel = Application.loadedLevel + 1; 18 if( nextLevel <= 1) 19 nextLevel = Application.levelCount; 20 21 SceneManager.LoadScene(nextLevel); 22 } 23 24 void LoadNextScene() 25 { 26 int nextLevel = Application.loadedLevel + 1; 27 if( nextLevel >= Application.levelCount) 28 nextLevel = 1; 29 30 SceneManager.LoadScene(nextLevel); 31 32 } 33} 34 35

投稿2018/12/19 05:00

bochan2

総合スコア2050

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

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

0

検索結果
Unity5.3からの変更のようです。
SceneManagerを使えとありますね

投稿2018/12/19 01:56

YAmaGNZ

総合スコア10222

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

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

0

例えば、3つ目と6つ目のApplication.LoadLevelについてはその警告に書いてあるSceneManager.LoadSceneにそのまま置き換えれば動くようにも思いますが、既存のコードでなくて、「作成している」のでしたら、新しい参考資料にかえて、作り直したほうがいいと思います。

一つずつ検索していけば1つずつ解決できますが、今から覚えようとしているのに、そんな回り道をするのは無駄ではないでしょうか。
(同じような警告は今後もでてくるはずで、一旦古い作法を学んでそれをあたらしく置きかえる、というのをやる必要性がないと思うのですが)

投稿2018/12/19 01:54

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問