【考察】using UnityEngine;って何?

はてなマーク Unity


※この記事は私の独学での解釈、考察であり、色々間違っている可能性があるので、ご了承のほどお願い申し上げます。



UnityでC#スクリプトを作り、それを開くと最初に現れる「using~」というのは名前空間というものです。
その名前空間と、そこにあるusing UnityEngine;というものについて私なりに考察していきます。

私がUnityを始めてからそこそこの期間、using~という物の元がどこにあるのか、何なのかが不思議で仕方ありませんでした。


名前空間については、こちらのサイト等に詳しく書いてあります。

名前空間
概要 名前空間(name space)とは、 ファイルを種類ごとにフォルダに分けて管理するのと同じように、 クラスを種類ごとに分けて管理するための機構です。 ポイント namespace キーワードで名前空間を定義し…

usingについて

usingの使い方については、多分ですが…。
自信ないです、間違っていたらごめんなさい。

まず例としてTest1Test2の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~で使われていると思われるものが沢山ありました。

恐らく、ここから使われているのではないかと思います。

追記:参照なので、正確には他の場所にあるというような感じが正しいかもしれません、ごめんなさい。

参照

UnityEngine

念のためモザイクをかけていますが、ここにはSystemUnityEngine.UI等もありました。

続いて、UnityEngineは何に使われているのかを調べてみようと思います。
試しにusing UnityEngine;を消してみると

UnityEngine削除

このようにMonoBehaviourがエラーになりました。
MonoBehaviourUnityEngineで定義されているのだと思います。

試しにusing UnityEngineを書き直してエラーが無い状態にして、MonoBehaviour右クリックして定義をここに表示を押してみます。

MonoBehaviour

すると、このようにUnityEngine名前空間の中にMonoBehaviourがあることが確認できました。

考察まとめ

using~を最初に付けることで、そのコードを使う時に名前空間を省略できる。

・恐らくUnityEngineにはMonoBehaviour等の重要なコードが書いてある。

追記:UnityEngineにはUnityに関する重要なコードが色々書いてあると書いた方が正確だったかもしれません、ごめんなさい。
UnityリファレンスからもUnityEngineの中身がみれそうです。

Unity スクリプトリファレンス

コメント

タイトルとURLをコピーしました