Unity3D 別の所にあるスクリプトの中の変数を参照する方法

疑問とそのアドバイスについてまとめ
4
ニカイドウレンジ @R_Nikaido

Unity、別の所にあるスクリプトの中の変数を参照する方法からしてさっぱり分からん。もうstatic付けちゃっていいですかね…。

2013-12-15 22:00:18
ニカイドウレンジ @R_Nikaido

というかコインカスケーダー2のときは必要な変数に全部staticつけた。小規模だから問題が起こらないんだろう。よく考えてみたら小規模なモノしか作らないぞおれ。

2013-12-15 22:02:32
くるくる @mkd214

@R_Nikaido getComponent使うかstatic使うかを状況によって使いか分けたらいいと思います! http://t.co/kSVGA2yVr9

2013-12-15 22:04:03
ニカイドウレンジ @R_Nikaido

@mkd214 そのあたり読んだんですが、前提知識がないためか意味不明なのです…。 例えばこういう状況ではどう書けばいいんでしょう→「ゲームオブジェクトA」にくっつけた「スクリプトA」から、「ゲームオブジェクトB」にくっつけた「スクリプトB」の中にある「変数B」を見たい。

2013-12-15 22:08:10
栗坂こなべ @kurisaka_konabe

@R_Nikaido GetComponentしたり、目当てのオブジェクト型のPublicな変数で持ってドロップしたり、FindObjectで名前やタグで探したり、色々ですね。

2013-12-15 22:08:53
ニカイドウレンジ @R_Nikaido

@kurisaka_konabe 1番目と2番目は見つけて試したんですがよく理解できず動きませんでした…。2番目はなんのことやら、ってレベルです。解説サイトいくつか読んでもざっくりとしか説明がなくて良くわからないという状況です…。

2013-12-15 22:16:05
くるくる @mkd214

@R_Nikaido javascript と C# どちらでしょうか? やり方は、スクリプトA の中で GameObject型の変数を作ってゲームオブジェクトBをその変数にいれます。入れ方は、いろいろありますがGameObject.Findを使うといいと思います。

2013-12-15 22:21:17
くるくる @mkd214

@R_Nikaido 説明して気づいたんですが、ソースコード載せるのが早いと思ったので、とりあえずJavaScriptで書いてみます。

2013-12-15 22:29:28
ニカイドウレンジ @R_Nikaido

@mkd214 あ、javascript使ってます。お願いします。

2013-12-15 22:31:24
ニカイドウレンジ @R_Nikaido

@mkd214 現状調べた限りで試しに書いてみたのが GamaObject.Find("ziki").GetComponent<ziki>.().test です。(ziki→ゲームオブジェクト 2つ目のziki→スクリプト test→変数名 …のつもり)

2013-12-15 22:32:29
栗坂こなべ @kurisaka_konabe

コードはくるくるさんに任せてパシフィック・リム

2013-12-15 22:32:49
くるくる @mkd214

@R_Nikaido var objB : GameObject; var script : ScriptB;

2013-12-15 22:34:53
くるくる @mkd214

@R_Nikaido function Start(){ objB = GameOBject.Find("ObjectB"); script = obj.GetComponent(ScriptB); var variable = script.variableB }

2013-12-15 22:34:57
くるくる @mkd214

@R_Nikaido GamaObject.Find("ziki").GetComponent<ziki>.().test ですが GamaObject.Find("ziki").GetComponent(ziki).test でいけるかと思います。

2013-12-15 22:40:38
ニカイドウレンジ @R_Nikaido

@mkd214 ありがとうございます! とりあえず最後に頂いた1行の方でなんとか動きました。その前のやつは、現在解読中です。複雑な記述してますけど、そちらを使うと何か良いことがあります?

2013-12-15 22:45:38
ニカイドウレンジ @R_Nikaido

@kurisaka_konabe 変数の件、他の方に教えてもらって一応動かすことができました。パシリムに専念してください。

2013-12-15 22:49:26
くるくる @mkd214

@R_Nikaido 解読中のやつはScriptBという名前のスクリプトがくっついているObjectBという名前のオブジェクトがあって、ObjectBのScriptBのvariableBという変数をとってきています。

2013-12-15 22:49:47
くるくる @mkd214

@R_Nikaido GameObject.Find("")はシーン上のオブジェクト全てから名前が一致するオブジェクトを探すものなので、状況によっては少し処理が遅くなる傾向があるので、Update関数とかに使うときはFindを一度だけ呼び出す上の書き方の方がいいです。

2013-12-15 22:52:13
くるくる @mkd214

@R_Nikaido あと、上のソースコードの間違いが合って、objB = GameObject.Find("ObjectB");の間違えでした.(GameObjectのbが大文字でした。)

2013-12-15 22:53:13
ニカイドウレンジ @R_Nikaido

おれがプログラム関連の話をするのは「プログラム興味ない人にとってはノイズ」「プログラマにとっては素人レベルの話にイラッと来るだけ」「初歩的すぎておれ自身も恥ずい」「どうせ解決策のリプなんて飛んでこない」という4重苦。だけど今回リプライが飛んできて解決した。ありがとうございます。

2013-12-15 22:59:20
くるくる @mkd214

タイムライン上でUnityで迷ってる人がいたんだけど、うまく説明するのが難しいです。ごめんなさい。

2013-12-15 23:00:58
ニカイドウレンジ @R_Nikaido

@mkd214 長い方の記述はまだ完全には理解できてないですが、試しに動かしてみます。詳しい解説めちゃくちゃ感謝です。非常に助かりました。

2013-12-15 23:00:58
くるくる @mkd214

@R_Nikaido 文字化けするかもですが2パターン用意しておきます ! https://t.co/YleMe7CBrb

2013-12-15 23:05:50
ニカイドウレンジ @R_Nikaido

@mkd214 おおおありがとうございます! 明日にでも試してみます。テキスト保存したので削除OKです。

2013-12-15 23:11:37