質問: ### 前提・実現したいこと FindObjectOfTypeはどういう関数かわからないので、教えていただけませんか? Object.FindObjectOfTypeとありますが、 このObjectには、どういうものを指定すればよいのでしょうか? できれば簡単なサンプルソースで説明していただけるとありがたいです。 ### 試したこと なんとなくわかっていること。 ・ヒエラルキー上のオブジェクトを全部走査するので重たい。 わかってないこと。 ・Object.FindObjectOfTypeのObjectは何なのか。 ・FindObjectOfType (Type type) 引数のtypeに何を指定するものなのか? ・何かしら見つけたものが戻り値として返ってくる。 すみません、書いてて気づきましたが、かなり理解できてません。 こちらのサイトを見ましたが、 > > スクリプトを参照して、スクリプトにアクセスするのがFindObjectOfTypeです。 > > スクリプト名.FindObjectOfType<スクリプト名>(); > > > 上記、左側のスクリプト名と、右側のスクリプト名、それぞれどういう風に指定すればよいかとかもわかりません。 「スクリプトを参照して、スクリプトにアクセスする」という意味もわかりません。
回答: Objectとは「Unity が参照できるすべてのオブジェクトの基本クラス」です。 Object - Unity スクリプトリファレンス 例えば人間も猫も雑草もコップも全て「物」であるように、 GameObjectもテクスチャも自作クラスも全部「Object」です。 (これは「そういう仕様になっているから」です。C#の「継承」を調べるとより深く分かるかと思います) `Object.FindObjectOfType`の1つ目のObjectと2つ目のObjectは意味が違います。 1つ目(.の前)は「Objectクラスに実装されているよ」ということを意味します。 `transform`や`GetComponent`が頭に何も付けなくても使えるように、 FindObjectOfTypeも前に何も付けなくても動作します。 ~~但し前に何も付けない場合は返り値がObject型になります。 `FindObjectOfType`→GameObjectを探してObject型で返す。(見つけたオブジェクトをGameObject型として取り扱いたい場合は型変換が必要) `GameObject.FindObjectOfType`→GameObjectを探してGameObject型で返す。~~ →前に何も付けなくても<>内の型として返って来ます。 2つ目のObjectは探してくるクラスを指定します。 `FindObjectOfType`ならGameObjectを探す、 `FindObjectOfType`ならSampleScriptを探す、 `FindObjectOfType`ならObjectを探します。 (シーン上にある該当する物の中からUnityが適当に選んだ1つが返ります。1つも存在していなかったらnullが返ります) > > ゲームオブジェクトを参照して、スクリプトにアクセスするのがGetCompornetで、 > > スクリプトを参照して、スクリプトにアクセスするのがFindObjectOfTypeです。 > > > 参照=探し出す、そのオブジェクトを対象とする、というイメージです。 「田中さんを参照して、田中さんの個人情報にアクセスする」のがGetCompornet。 「その場に居る誰かの個人情報を参照して(誰の物かは指定出来ない)、その個人情報にアクセスする」のがFindObjectOfTypeです。