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

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

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

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

Unity

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

Q&A

解決済

1回答

589閲覧

StartCoroutineを別スクリプトのメソッド内で使いたい

hanna_luv0706

総合スコア2

C#

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

Unity

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

0グッド

0クリップ

投稿2022/04/02 08:00

実現したいこと

Alianのあたり判定内でF2を押すとAlianが喋る仕様にしたいです。
AlianControllerクラスのカギGet!のログが表示されるところで
StartCoroutineを使ってAlienMessageクラスのtxt_speedメソッドを呼び出したいのですが
エラーが出たりゲーム再生するといきなり会話が始まってしまったりで困っています。
StartCoroutineの使い方を調べてみましたが、うまくできなかったのでご教示頂きたいです。

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

現状

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー CS0029 型 'AlienMessage' を 'UnityEngine.GameObject' に暗黙的に変換できません Assembly-CSharp Aliencontroller.cs 23 アクティブ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー CS1061 'GameObject' に 'StartCoroutine' の定義が含まれておらず、型 'GameObject' の最初の引数を受け付けるアクセス可能な拡張メソッド 'StartCoroutine' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください Assembly-CSharp Aliencontroller.cs 25 アクティブ

該当のソースコード

Alianが喋るスクリプト

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class AlienMessage : MonoBehaviour { public Text alien_msg; public GameObject button; public string[] font; int i; // Start is called before the first frame update void Start() { StartCoroutine(txt_speed()); } // Update is called once per frame void Update() { if (alien_msg.text == font[i]) { button.SetActive(true); } else { button.SetActive(true); } //button.SetActive(true); } /*public void msg_start() { StartCoroutine(txt_speed()); } public void msg_Updata() { button.SetActive(true); }*/ IEnumerator txt_speed() { foreach (char l in font[i].ToCharArray()) { alien_msg.text += l; yield return new WaitForSeconds(0.1f); } } public void goToNextMessage() { if (i < font.Length - 1) { i++; alien_msg.text = ""; StartCoroutine(txt_speed()); } else { alien_msg.text = ""; } } }

Alianコントローラー

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Aliencontroller : MonoBehaviour { // Start is called before the first frame update // Update is called once per frame bool IsNear; public int Alian_Message; void Update() { if (Input.GetKeyDown(KeyCode.F2)) { if (IsNear) { Debug.Log("カギGet!"); GameObject AlienMessage = GameObject.Find("MessagePanel_a").GetComponent<AlienMessage>(); AlienMessage.StartCoroutine("txt_speed"); } } } private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.tag == "Player") { IsNear = true; } } private void OnTriggerExit2D(Collider2D collision) { if (collision.gameObject.tag == "Player") { IsNear = false; } } }

試したこと

まずAliencontrollerのメンバー変数にAlien_Messageを追加。
メンバ変数Alien_Messageに「MessagePanel_a」についているAlienMessageスクリプトを参照させるために
GetComponentしました。
次にサイトを参考にAlien_Message.StartCoroutine("txt_speed");と書きました。

補足情報(FW/ツールのバージョンなど)

Unityバージョン:2020.3.19f1
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージを読む練習をしましょう。

Aliencontroller.cs 23 Aliencontroller.cs 25

Aliencontroller.csの23行目と25行目にエラーがあると言われています。

23行目

C#

1// エラー 型 'AlienMessage' を 'UnityEngine.GameObject' に暗黙的に変換できません 2GameObject AlienMessage = 3 GameObject.Find("MessagePanel_a").GetComponent<AlienMessage>();

GetComponent<AlienMessage>()から返ってくるのはAlienMessage型なのでGameObject型の変数には代入できませんと言われています。

修正後

C#

1// varにすると勝手に変換して代入してくれます 2var AlienMessage = 3 GameObject.Find("MessagePanel_a").GetComponent<AlienMessage>();

25行目

C#

1// エラー 'GameObject' に 'StartCoroutine' の定義が含まれておらず、型 'GameObject' の最初の引数を受け付けるアクセス可能な拡張メソッド 'StartCoroutine' が見つかりませんでした。 2AlienMessage.StartCoroutine("txt_speed");

クラスにStartCoroutine()メソッドなんて定義されて無いよと言われています。
AlienMessageのmsg_start()メソッドのコメントアウトを外して呼び出してあげればいいのではないでしょうか?

修正後

C#

1AlienMessage.msg_start();

ゲーム再生するといきなり会話が始まるのは、AlienMessageクラスのStart()メソッドにStartCoroutine()を書いているからだと思います。

投稿2022/04/02 08:52

KomoriGameDev

総合スコア433

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

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

hanna_luv0706

2022/04/02 11:35

丁寧なご説明ありがとうございます。 とてもわかりやすかったです。 エラーメッセージ読む練習頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問