※この記事は私の独学での解釈、考察であり、色々間違っている可能性があるので、ご了承のほどお願い申し上げます。
UnityでC#スクリプトを作り、それを開くと最初に現れる「using~」というのは名前空間というものです。
その名前空間と、そこにあるusing UnityEngine;というものについて私なりに考察していきます。
私がUnityを始めてからそこそこの期間、using~という物の元がどこにあるのか、何なのかが不思議で仕方ありませんでした。
名前空間については、こちらのサイト等に詳しく書いてあります。

usingについて
usingの使い方については、多分ですが…。
自信ないです、間違っていたらごめんなさい。
まず例としてTest1とTest2のC#スクリプトを作ります。
それから、Test1を開き、クラス内のStartメソッドとUpdateメソッドを消して、変数Aを追加します。
違うファイルから操作出来るようにするため、この変数Aにはpublic staticを付けてください。
その後、nspaceという名前の名前空間でクラスを囲います
nspaceという名前は適当です…。
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace nspace { public class Test1 : MonoBehaviour { public static int A; } }
次にTest2を開き、見本としてあえてエラーを出します。
using System.Collections; using System.Collections.Generic; using UnityEngine public class Test2 : MonoBehaviour { void Start() { Test1.A = 1; //ここでエラー } }
このようにするとエラーが出ます。
この場合、
nspace.Test1.A = 1;と名前空間を付けて書けばエラーは出ません。
しかし毎回、名前空間を書くのは面倒だと思います。
なので、次は名前空間をusingで予め書きます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using nspace; public class Test2 : MonoBehaviour { void Start() { Test1.A = 1; //エラーが無くなる } }
こうすることでエラーがなくなり、名前空間を省略することが出来ます。
・
・
・
という感じだと思います。
私の今の認識ではここまでが限界です、申し訳ございません!
また、名前空間には
プログラムを作成する場合でも、プログラムの規模が大きくなってきて、クラスの数が多くなってくると、 クラスを関連性のあるもの同士まとめて管理するような仕組みが必要になってきます。 そのような、クラスを階層的に分類するための機構が名前空間です。
名前空間 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C より引用
という意味があるようです。
確かに規模が大きくなった時、usingで分類すれば管理しやすそうですね。
using UnityEngine;について
それでは本題に入ります。
using UnityEngineとは何なのか考察していきたいと思います。
まず、UnityEngineがどこにあるかを見てみます。
Test3のC#スクリプトを作り、開きます。
まず、このusing~がどこから来ていると思うかについてです。
私はVisual Studioを使っているのですが、コードを書く画面の右側に
ソリューションエクスプローラーというものがあり、そこの参照をクリックして中身を見てみると、コードの最初に書かれているusing~で使われていると思われるものが沢山ありました。
恐らく、ここから使われているのではないかと思います。
追記:参照なので、正確には他の場所にあるというような感じが正しいかもしれません、ごめんなさい。
念のためモザイクをかけていますが、ここにはSystemやUnityEngine.UI等もありました。
続いて、UnityEngineは何に使われているのかを調べてみようと思います。
試しにusing UnityEngine;を消してみると
このようにMonoBehaviourがエラーになりました。
MonoBehaviourはUnityEngineで定義されているのだと思います。
試しにusing UnityEngineを書き直してエラーが無い状態にして、MonoBehaviourを右クリックして定義をここに表示を押してみます。
すると、このようにUnityEngineの名前空間の中にMonoBehaviourがあることが確認できました。
考察まとめ
・using~を最初に付けることで、そのコードを使う時に名前空間を省略できる。
・恐らくUnityEngineにはMonoBehaviour等の重要なコードが書いてある。
追記:UnityEngineにはUnityに関する重要なコードが色々書いてあると書いた方が正確だったかもしれません、ごめんなさい。
UnityリファレンスからもUnityEngineの中身がみれそうです。
コメント