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

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

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

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

Q&A

解決済

1回答

380閲覧

unity2Dでのメソッドを呼び出すためのSendMessageの使い方について

aiueokaki10

総合スコア3

C#

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

0グッド

0クリップ

投稿2023/05/22 11:42

実現したいこと

SendMessageを使った際のエラーを消すためのプログラムの修正内容について知りたいです。

前提

unity2Dでwarpタグに触れた際に別のプログラムのFadeメソッドを呼び出すプログラムを作っています。

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

UnassignedReferenceException:The variable Canvas of WarpPoint has not been assigned. You probably need to assign the Canvas variable of the WarpPoint script in the inspector.

該当のソースコード

warpタグに触れた際に特定の座標へ移動し後者のプログラムのFadeメソッドを呼び出すプログラム

C#言語

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class WarpPoint : MonoBehaviour 6{ 7 public GameObject Canvas; 8 9 private Rigidbody2D rbody2D; 10 11 void Start() 12 { 13 rbody2D = GetComponent<Rigidbody2D>(); 14 } 15 private void OnTriggerEnter2D(Collider2D collider) 16 { 17 if (collider.gameObject.tag == "warp") 18 { 19 20 21 transform.position = new Vector3(-9.5f, 25.0f, 0.0f); 22 23 24 Canvas.SendMessage("Fade"); 25 } 26 27 } 28}

前者のプログラムによってFadeメソッドが呼び出されたときにPanelの透明度を徐々に上げていくプログラム

C#言語

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class Fadeout : MonoBehaviour 8{ 9 10 11 public GameObject Panelfade; 12 13 Image fadealpha; 14 15 private float alpha; 16 17 private bool fadeout; 18 19 public int SceneNo; 20 21 22 void Start() 23 { 24 fadealpha = Panelfade.GetComponent<Image>(); 25 alpha = fadealpha.color.a; 26 fadeout = false; 27 28 } 29 30 31 void Update() 32 { 33 if (fadeout == true) 34 { 35 alpha += 0.01f; 36 fadealpha.color = new Color(0, 0, 0, alpha); 37 if (alpha >= 1) 38 { 39 fadeout = false; 40 } 41 } 42 } 43 public void Fade() 44 { 45 fadeout = true; 46 } 47}

試した事

前者のプログラムの座標を変更するプログラムは
https://teratail.com/questions/1ci5p1jocxowa6#reply-7foej9keofed9x
を流用しました。

後者のプログラムのフェードアウトが行われるプログラムは
https://note.com/mi919/n/n96d2427d523c
を流用しました。

他のプログラムのメソッドを呼び出す方法は
https://ekulabo.com/send-messages-sample
を参考にしました。

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

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

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

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

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

fiveHundred

2023/05/22 11:46

直接Fade()を呼び出せばいいと思いますが、SendMessageを使用する理由は何ですか?
aiueokaki10

2023/05/22 12:11

試したことの3つ目のリンクの情報を使って作ったのでこうなりました。そしてFade();と書いた場合、「現在のコンテキスト"Fade"という名前は存在しません。」というエラーが起こりました。
guest

回答1

0

ベストアンサー

そしてFade();と書いた場合、「現在のコンテキスト"Fade"という名前は存在しません。」というエラーが起こりました。

クラスが違うので、そのように呼び出すことは出来ません。

しかし、CanvasにFadeoutがあるはずなので、以下のコードのようにFadeoutを取得すれば出来るはずです。

C#

1 Fadeout fadeout = Canvas.GetComponent<Fadeout>(); 2 fadeout.Fade();

投稿2023/05/22 12:34

編集2023/05/22 12:35
fiveHundred

総合スコア9796

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

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

aiueokaki10

2023/05/22 13:00

どちら側にそのプログラムを入れればいいのでしょう?
aiueokaki10

2023/05/22 13:10

またどこに入れればいいのでしょう?
fiveHundred

2023/05/23 08:24

「Canvas.SendMessage("Fade");」と入れ替える形で書いてください。
aiueokaki10

2023/05/23 15:13

このプログラムをusing System.Collections; using System.Collections.Generic; using UnityEngine; public class WarpPoint : MonoBehaviour { public GameObject Canvas; private Rigidbody2D rbody2D; void Start() { rbody2D = GetComponent<Rigidbody2D>(); } private void OnTriggerEnter2D(Collider2D collider) { if (collider.gameObject.tag == "warp") { transform.position = new Vector3(-9.5f, 25.0f, 0.0f); Fadeout fadeout = Canvas.GetComponent<Fadeout>(); fadeout.Fade(); } } } 上記のようなプログラムにした際、 UnassignedReferenceException: The variable Canva of WarpPoint has not been assigned. というエラーメッセージが出ました。 他にミスしているところがあったでしょうか?
fiveHundred

2023/05/24 00:55

WarpPointにある変数Canvasの値が設定されていないというエラーです。 インスペクター上でCanvasが設定されていることを確認してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問