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

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

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

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

Q&A

解決済

1回答

5591閲覧

Unity 他のオブジェクトのスクリプトを呼び出したい

DiG5219

総合スコア26

Unity

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

0グッド

0クリップ

投稿2016/12/09 19:52

初歩的な質問ですみません。
PlayerというオブジェクトからManagerというオブジェクトにあるシーンを切り替えるスクリプトを呼び出したいです。

PlayerにはPlayerというスクリプト、ManagerにはManagerというスクリプトがあり、Playerが破壊されたとき

void OnTriggerEnter2D(Collider2D c)
{
if (c.tag != "Bullet(Player)")
{
Destroy(c.gameObject);

spaceship.Explosion(); Destroy(gameObject);

このPlayerスクリプトで当たり判定をして、何かにぶつかったときに
Destroy(gameObject);の前にManagerのManagerスクリプトの

public void PlayerDestroy(bool destroy) { if (destroy) { Invoke("SceneChange", 3); } } void SceneChange() { SceneManager.LoadScene(1); }

PlayerDestroyを呼び出してシーンを切り替えたいです。

他のオブジェクトにアタッチされたスクリプトを呼び出すことが初めてでしたので、調べていろいろと試してみましたが、Findで見つけたり、インスペクターで設定したりしてもエラーが出るか、思った処理になりませんでしたので質問させていただきました。
情報等足りなければ追記します。
回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

うまくいかなかった原因は、おそらく、GameObject.Findで取得したオブジェクトから
ManagerコンポーネントをGetComponentしていなかったのだと思います。
インスペクタに設定していた変数もGameObject型だったのではないでしょうか。

質問文にコードが一部しか記載されていないので要点だけ書いたものです。

インスペクタから設定する方法
インスペクタには、シーン上のManagerコンポーネントがアタッチされたManagerオブジェクトを
設定してください。

C#

1using UnityEngine; 2 3public class Player : MonoBehaviour { 4 public Manager manager; 5 6 void OnTriggerEnter2D(Collider2D c){ 7 if (c.tag != "Bullet(Player)"){ 8 Destroy(c.gameObject); 9 spaceship.Explosion(); 10 11 // Managerスクリプトのメソッドを呼び出す。 12 manager.PlayerDestroy(true); 13 14 Destroy(gameObject); 15 } 16}

スクリプトからオブジェクト名、タグ名を使って取得する方法
判定時に毎回取得せず、Start関数内でManagerコンポーネントを取得しておきます。

C#

1using UnityEngine; 2 3public class Player : MonoBehaviour { 4 private Manager manager; 5 void Start(){ 6 // オブジェクト名で取得する場合(オブジェクト名を"Manager"と仮定) 7 manager = GameObject.Find("Manager").GetComponent<Manager>(); 8 // タグで取得する場合(タグ名を"Manager"と仮定) 9 // manager = GameObject.FindWithTag("Manager").GetComponent<Manager>(); 10 } 11 12 // 以下同じ 13}

投稿2016/12/10 05:47

編集2016/12/10 05:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

DiG5219

2016/12/10 18:43

インスペクターの型をGameObjectでしていました。解決しました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問