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

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

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

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

Q&A

解決済

2回答

6243閲覧

[Unity] GameObject型が宣言できない?

ababayatak

総合スコア12

Unity

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

0グッド

0クリップ

投稿2018/03/20 15:27

GameObject型にGameObject.Find()の結果をいれることができません。

ObAとObBをGameObject、
ScAとScBをスクリプトとします。
ObAからObBのスクリプトScBにアクセスしたいのですが

public class ScA : MonoBehaviour { public GameObject test; public int hogeint; public double hogedouble; void Start () { test = GameObject.Find("ObB"); }

としたときに

test.GetComponent<ScB>().hoge()

だとnull・・・エラーを吐いてしまいます。

GameObject.Find("ObB").GetComponent<ScB>().hoge()

だと問題なく実行できます。

public でGameObject型のtestを宣言していますが
inspectorに表示されません。
(int型hogeintやdouble型hogedoubleは表示されています)

ソフトのバージョンは全て最新です

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

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

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

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

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

Bongo

2018/03/21 13:35

testがインスペクタに現れないというのは異常な状況のように思えますね...ScAにtestを追加した状態でスクリプトファイルを保存し、さらにUnityに戻ってから「Assets」メニューの「Refresh」や「Reimport All」を行っても変化はないでしょうか?
ababayatak

2018/03/21 13:54

ありがとうございます!RefreshとReimport Allの後unityを再起動したら無事表示されました!
guest

回答2

0

RefreshとReimport Allの後unityを再起動したら無事表示されました!困ったらとりあえず再起動しましょう。

投稿2018/03/21 14:04

ababayatak

総合スコア12

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

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

KSwordOfHaste

2018/03/21 14:18

パソコンの調子が悪くなったらとりあえず再起動! みたいなノリですねw;
guest

0

ベストアンサー

Unity素人なのでその状況がどんな場合にあり得るか推測できませんが・・・

少なくとも単純に次のようにすると期待しておられることができているように見えました。

(1) シーン内に適当なGameObjectをObA, ObBとして配置
(2) ObA, ObBにそれぞれscript(C#) ScA, ScBをコンポーネントとして追加
(3) ScA, ScBをそれぞれ次のようにしてVisual Studio側でSave All

C#

1// ScA.cs 2using UnityEngine; 3public class ScA : MonoBehaviour { 4 public GameObject test;// = GameObject.Find("ObB"); 5 public bool first = true; 6 7 void Start () { 8 test = GameObject.Find("ObB"); 9 } 10 11 void Update () { 12 if (first) { 13 ScB scb = test.GetComponent<ScB>(); 14 if (scb != null) { 15 scb.Test1(); 16 } else { 17 Debug.Log("scb was null"); 18 } 19 first = false; 20 } 21 } 22} 23 24// ScB.cs 25using UnityEngine; 26public class ScB : MonoBehaviour { 27 void Start() { 28 } 29 30 void Update() { 31 } 32 33 public void Test1() { 34 Debug.Log("Test1"); 35 } 36}

(4) Unityに戻ってScAのインスペクターを見るとTest, Firstの両方が表示され、Testの内容は

Run前: None(Game Object)
Run後: ObB

となりました。


ところでVS2015のC#コンパイラーとUnityのそれは仕様に差異があり、scb?.Test1();なんて書くとVS上ではcompile okなのですが、Unity側へ戻るとConsoleに
Assets/ScA.cs(...): error CS1525: Unexpected symbol '.', expecting '[' or 'identifier'
と表示され、VS側での変更が反映されません。そういうことが起きてないでしょうか?


Windos 10, Unity 5.4.0f3, VS2015(古いです...)

投稿2018/03/21 04:45

KSwordOfHaste

総合スコア18394

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

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

ababayatak

2018/03/21 13:58

丁寧なご回答ありがとうございました!こちらもVSを使っていて同様のエラーが出ていたので変更が反映されてなかったのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問