Unity 入門者から初級者のための公式マニュアル、スクリプティングリファレンスの読み方

# はじめに
　Unityを使い始めた方から、「Unityは公式マニュアルがわかりにくい」というような声を聞くことがありますが、個人的にはUnityの公式ドキュメント類はかなり充実していると感じますし、Unityを使いこなすためには一次資料である公式マニュアルを読みこなすことは避けられません。
　この記事は早い段階から公式マニュアルを上手に使うための手助けになることを願って書きました。

# スクリプト（プログラム）
　Unityではプログラムのことをスクリプトと呼びます。Unityでの呼び方がそうなっているとはいえ、C#のプログラムであることに変わりないため文法や仕様は、多くのC#の文献も参考にできます。
　一方で対応しているC#の仕様はUnityのバージョンによりますので、比較的に新しいC#の機能を使いたい場合は以下のマニュアルの該当箇所を参照して対応しているか確認をすると良いでしょう。

https://docs.unity3d.com/ja/2021.3/Manual/CSharpCompiler.html

　Unityにおけるスクリプトの位置付けについては以下のマニュアルを参照ください。

https://docs.unity3d.com/ja/2021.3/Manual/ScriptingSection.html

　公式マニュアルから得られる情報の一例として上記を挙げてみましたが、このような「正しい情報」はメンテナンスされていない個人の記事よりも公式マニュアルを参照する必要を感じられたのではないでしょうか？

# マニュアルとスクリプトリファレンス
　さて本題はここからです。Unityをマウスやキーボードでゲームエディタとしてゲームオブジェクトに各種コンポーネントをくっつけて使うところまでは、それほど苦労なくできる方が多いと思います。
　困ってくるのは次の
1. 各コンポーネントのプロパティの意味の理解
1. スクリプトから各コンポーネントのプロパティへのアクセス方法

あたりからかと思います。ですが、下図のUnityとドキュメントとの関係を利用すると目的とする情報に素早く辿り着くことができます。

:::note
「マニュアル」と「スクリプティングリファレンス」は英語版マニュアルだとそれぞれ"Manual"、"Scripting API"の表記です。以下では「マニュアル」と「スクリプティングリファレンス」に統一します。
:::

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/cfb8400b-6142-533c-7c65-6306fce7992e.png">

## マニュアル
　各コンポーネントのプロパティを調べるために対応するマニュアルを開きたい時は、コンポーネントのプロパティの「？」アイコンをクリックして開くのが簡単です。

<img width="70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/21afa2e0-b4b4-bd38-cbd3-e40937af3f6d.png">

　下図のようにマニュアルが開いたら、それぞれのプロパティとその意味をエディターとマニュアルを対応づけて確認できます。
![スクリーンショット 2023-03-01 16.20.22のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/027e9a99-1517-209d-5084-2396ccc9dc67.png)

　これでプロパティの意味を把握した上で、実際に調整しながら動作確認をすると目的の状態に素早く近づけます。

## スクリプトリファレンス
　次は確認したコンポーネントにスクリプトからアクセスする場面を考えます。例として次のようなスクリプトを書きたかったとします。

```csharp
void Start() {
    // GameObjectに付けられている目的のコンポーネントを取得する
    Transform t = GetComponent<Transform>();
    // 目的のプロパティにアクセスする
    t.localPosition = new Vector3(0.0f, 0.0f, 0.0f);
}
```

　先ほどマニュアルで`Transform`コンポーネントを開きました。そのページにある"SWITCH TO SCRIPTING"を押すとそのコンポーネントのスクリプティングリファレンスが開きます。（日本語マニュアルで"SWITCH TO SCRIPTING"が表示されていない場合は、英語マニュアルに切り替えましょう）
![スクリーンショット 2023-03-01 16.20.22のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/dd736bb7-28e6-b2c8-4586-d6023b613912.png)

　スクリプティングリファレンスが開いたらプロパティの項を確認します。すると下図のように先ほどマニュアルで確認したプロパティ名に似た（大体は同じ名前の）プロパティが見つかります。
　プロパティ名のリンク先を辿ってサンプルコードを参考にすれば冒頭のようなコードが書けると思います。
![スクリーンショット 2023-03-01 17.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/5c18ece1-1e18-59e7-58fe-4c9a2e7258b6.png)

## UnityゲームエディタとUnityゲームエンジンとの関係　
　マニュアルとスクリプトリファレンスを見る際には、ゲームエンジンに至る下図の関係をイメージしてみてください。
+ GUIからゲームエディタを通してコンポーネントにアクセスする
+ スクリプトからコンポーネントにアクセスする
ルートが二種類あるものの最終的にはコンポーネントにアクセスすることから、それぞれが表裏一体であることが分かると思います。
　ですので、ぜひ公式マニュアルを上手に使って素早くどちらにも行ったり来たりできるようになりましょう。
<img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/b78ee677-60df-58c5-f916-d2faf76f7ad6.png">

:::note
厳密にはエディタスクリプトなど例外はありますが、ここでは説明が煩雑になるので割愛します。
:::

# おわりに
　時々、「UnityのC#は独特」という声を聞きます。実際のところはUnityのC#が特別なわけではなく、多用するのがUnityの標準ライブラリだったり、ゲームループがUnityのフレームワークに依存するためにそう感じるのだと思います。
　しかし、その辺りは公式マニュアルからも読み取れるので、しっかりとマニュアルを読めば誤解がなくなるかと思います。

　この記事が公式マニュアルを読みこなして正しくUnityをマスターする手助けになれば幸いです。

# 付録
　以下は付録になります。公式マニュアルを中心に初級者の方に参考になると思うことをまとめてみました。

## スクリプトリファレンスの見方
　スクリプトリファレンスの見方は下記URLの公式マニュアルを開き、使用しているUnityのバージョンを選択します。最新のバージョンだと日本語訳が間に合っていない場合もあるかもしれません。（問題なければ英語マニュアルにして自動翻訳にしても良いかもしれません）
<img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/5f99260d-5cd2-f9b7-e466-ca9a9ea98bb6.png">

https://docs.unity3d.com/ja/2021.3/ScriptReference/index.html

　左側のペインからUnityEngine→Classesを開き、それ以下から目的のクラスを選択します。
<img width="60%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/6080e171-ab1d-0301-2c07-0d0b59c1ff60.png">
　UnityEngine以下にはたくさんの項目がありますが、初級者の段階ではClasses以下の項目以外が必要になることはないでしょう。
　または右上の検索ボックスに目的のクラス名などを入力して検索をしましょう。
![スクリーンショット 2023-02-08 13.28.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13938/ecbeedc5-5fbc-1357-a75f-88435318fc30.png)

## ゲームループのフレームワーク
　スクリプトを書いてコンポーネントを実装するようになると、ゲームループ中にどのイベントがどんな目的でどのタイミングで呼ばれるか、きちんと把握しておく必要があります。といっても覚える必要はないので、必要に応じて以下のマニュアルを参照しましょう。

https://docs.unity3d.com/ja/2022.2/Manual/ExecutionOrder.html

## 初級者を脱するために
　[マニュアル](https://docs.unity3d.com/ja/2022.2/Manual/index.html)(https://docs.unity3d.com/ja/2022.2/Manual/index.html) には一通り目を通しておきましょう。これは文字通りに上から全ての項目を開いて、全てのページに目を通すということです。
　と言っても、精読する必要はなく、斜め読みで構いません。「あー、こんな機能があるんだ」「こんなことが書いてあるんだ」ということを必要になった時に思い出せれば十分です。読みながら、後で役に立ちそうと思ったページをブックマークしておきましょう。

### 参考サイト
　公式マニュアルが読みこなせるようになったら、以下のサイトも積極的に見ていくと良いと思います。

#### Unity学習プラットフォーム
https://learning.unity3d.jp/

#### 公式技術ブログ
https://blog.unity.com/ja/latest/technology