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

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

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

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

Unity

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

Q&A

2回答

3174閲覧

Unity/Sceneの切り替え時に発生するメソッドを設定したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2020/07/08 04:33

編集2020/07/08 06:24

Unityにおけるシーンの切り替え時に実行されるメソッドを設定したいのですがうまくいきません。
SceneManager.sceneLoaded += メソッド名;
を使用して試しているのですが、以下に示す2つのエラーが出てしまいます。

Assets/Scripts/Home/ContinuationManager.cs(51,9): error CS0123: No overload for 'GetSaveData' matches delegate 'UnityAction<Scene, LoadSceneMode>'

Assets/Scripts/Home/ContinuationManager.cs(69,9): error CS0123: No overload for 'GetSaveData' matches delegate 'UnityAction<Scene, LoadSceneMode>'

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6using DG.Tweening; 7using TMPro; 8 9public class ContinuationManager : MonoBehaviour 10{ 11 //中略 12 13 public void Clicked() 14 { 15 SceneManager.sceneLoaded += GetSaveData; 16 SceneManager.LoadScene("Scenario"); 17 } 18 private void GetSaveData(Scene next, LoadSceneMode mode) 19 { 20 //何か処理してイベントから削除 21 SceneManager.sceneLoaded -= GetSaveData; 22 } 23

エラー箇所は
1つ目がSceneManager.sceneLoaded += GetSaveData;の部分で
2つ目がSceneManager.sceneLoaded -= GetSaveData;の部分です

delegateについて理解が足りないのもあり、なぜdelegateの型に今回のメソッドが一致しないのかわかりません。
解決方法のご教授願います。

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

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

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

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

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

fiveHundred

2020/07/08 06:11

エラーは省略しないでください。 現状ではエラー発生箇所が分からないです。 長い場合は省略しても仕方がないかもしれませんが、2つぐらいであれば、スタックトレースを含めても投稿できないほど長くはならないと思います。 あと、追加時は「SceneManager.sceneLoaded += GetSaveData;」としているのに、削除時は「SceneManager.sceneLoaded -= GetSaveData1;」と違う関数名が指定されていますが意図した内容ですか?
退会済みユーザー

退会済みユーザー

2020/07/08 06:26

エラー箇所を明記しておらず失礼しました また、関数名が違うのは誤字なので修正しました
guest

回答2

0

該当のスクリプト コンポーネント アセットを選択して Inspector に表示された内容を見てみてください。特に "private void GetSaveData(Scene next, LoadSceneMode mode)" の定義があるかどうかを Visual Studio でなく Inspector で確認してみてください。

もし、そこに表示された内容が Visual Studio 上の表示と違っていたら、そのアセットを右クリックして Import を選べば、再読み込み⇒コンパイルが行われて直ると思います。

投稿2020/07/08 13:24

bboydaisuke

総合スコア5308

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

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

退会済みユーザー

退会済みユーザー

2020/07/10 08:27

申し訳ないのですが、スクリプト コンポーネント アセットとはどこの部分でしょうか。 .csファイルを直接選択するのでしょうか? メソッドの定義の確認と、Importの実行場所がわかりません。 初歩的な質問で恐縮です。
guest

0

C#

1using UnityEngine; 2using UnityEngine.SceneManagement; 3 4public class Test : MonoBehaviour 5{ 6 void Awake () 7 { 8 SceneManager.sceneLoaded += GetSaveData; 9 } 10 11 private void GetSaveData (Scene next, LoadSceneMode mode) 12 { 13 //何か処理してイベントから削除 14 SceneManager.sceneLoaded -= GetSaveData; 15 } 16}

上記のコードを手元で試した限りでは特にエラーは発生しなかったので、コードの書き方が間違っているわけではなさそうですね。
もしかして GetSaveData という名前のメソッドが他にもあったりしますか?

あと質問で書かれているコードだと最後に「}」が足りないように見えますが、質問する際に抜け落ちてしまっただけなのでしょうか?

投稿2020/07/08 09:26

kawa0x0A

総合スコア271

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

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

退会済みユーザー

退会済みユーザー

2020/07/08 09:50

}は質問の際に抜けただけです。すいません。 GetSaveDataメソッドは1つしかなく 回答と同じように、新たにクラス名をTestでスクリプトを作成したけど同じエラーが出ました 一応メソッド名を変えたりもしたけどダメでした Unityの環境の問題ですかね?
kawa0x0A

2020/07/08 09:59

なるほど そうなるとちょっと原因がわからないですね…… 一応Unityのバージョンを確認させていただいてもいいですか?
退会済みユーザー

退会済みユーザー

2020/07/08 10:04

2019.3.0f5です バージョンってこれで合ってますよね?
kawa0x0A

2020/07/08 10:41

はい 合っています そのバージョンでも試してみましたが、こちらではエラーが発生しなかったので、そちらのプロジェクトかUnityの環境が影響していると思います お力になれず、すみません
退会済みユーザー

退会済みユーザー

2020/07/08 10:51

いえいえ、丁寧にありがとうございました コード上の問題では無かったことが分かっただけでも助かりました 不本意ではありますが、とりあえずDontDestroyOnLoadで対応する事にします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問