🙌

Unityを触れるようになろう〜〜〜

2024/08/06に公開

これは何

Unity(そしてC#)を触ったことがない人が、とりあえずキャッチアップするための順番だてた学習ルートです。
これを順番にこなすと、最低限の(ゲームの楽しさの部分以外の)ことを知ることができます。

メンターをつけて想定時間40h以内で実施すると良いのかなと思いました。
// もっと楽しさを重視した講座とかもあると思うので、無味乾燥なこれでごめん…

こんな感じのiOSやAndroid、あるいは他の技術領域の文章も読んでみたいなと思いました。(誰か書いて!)

お作法を学ぶ編

  • Unity+VScode(あるいはRiderでもいいけど)をインストールできる
    • プロジェクトを作る
    • MonoBehaviourのスクリプトを作る(Hello.cs)
    • Debug.Log() をStart()に書ける
      • このときVScodeとかでDeb…くらい書いたらtabで補完されることを確認しましょう
      • DotNetSDKが入っていないと起きがち
      • UnityEditor のExternal Toolsにエディタが設定されてないと起きがち
    • デバッグ実行でブレークポイントが貼れることを確認する
  • MonoBehaviourのC#スクリプトに関数を追加できる
    • 空のGameObjectをシーンに追加する
    • Hello.csをGameObjectにアタッチする(UnityEditorでAddComponentしてください)
    • Hello.csのスクリプトに現在時刻をDebug.Log() で出力する関数(PrintCurrentTime関数)を作って見る
      • Start()でその関数を呼んでみる
    • エディタの再生をしてDebugLogに出力されることを確認する
    • キーボードのAキーを押したらPrintCurrentTime関数を呼ぶようにする
  • Hello.csの関数を別のクラスから呼ぶ
    • 別のMonoBehaviourのC#スクリプトを作成する(Controller.cs)
    • Controller.csになんらかの方法でHello.csの参照を持たせる
      • [SerializeField]を使ったインスペクタ参照など
    • Controller.csのキー入力でHello.csのなんらかの関数を呼ぶ
    • コンパイルエラーの赤文字を追える
      • 赤い波線がエディタで引かれたら気付ける
      • QuickFixができる
  • UnityEditor上でGUIを組み立て、ボタン操作を割り当てる
    • 検索単語としては「uGUI Button Canvas」あたりです
    • CanvasとButtonとTextを配置する
    • UI上のボタン入力でHello.csの現在時刻表示をUIのTextに反映する
    • WebCamTextureのpreview開始、終了を行えるボタンを配置して、カメラプレビューを実装する
    • 他に関数を増やしたり、適当な試行錯誤をここで行う
  • 複数Canvasの切り替えを行う
    • gameObject.SetActive()を使うことで複数のCanvasの表示切り替えを作る
    • はじめに、2枚目、3枚目、みたいな3Canvasを用意して、戻ると次の画面に進む、を表示して見る、とか
    • 元気があったらポップアップ(ダイアログ)を出せると良い
      • これはBlockingPanelの処理を学ぶ話
  • 複数シーンの遷移
    • シーンを跨ぐDontDestroyOnLoadの使い方
    • シーン遷移中に蓋をするロゴを出しておく、など
  • ここまでをやったら、適当なUnityの教科書をガーっとやると良いと思う

Unity共同作業をするためのステップアップガイド編

  • 実機ビルドして試せる
    • Switch Platform
    • ビルドシーン追加
    • AndroidやiOSに実機転送してlogを眺めることができる
      • Android、iOSともにスマホを開発者モードにするのを忘れずに
      • logcatとかXcodeで確認する
    • 縦画面にする、Scaleを合わせる
    • WebCameraのパーミッションに注意
    • adb command -r installなどを叩ける
  • Githubなどでbranchを切ってPRを出せるようにする
    • reviewも経験すると良い
  • ↑で作った複数Canvasをprefabにしておく
    • それぞれの画面を装飾してみよう
  • (本当はおすすめではないが)public static Action<T> HogeActionを用意しておく
    • 他クラスにbroadcastをする。
    • 他クラスはOnEnableとOnDisableで購読開始、停止をする
  • Pure C# クラスを作ってHello.cs から参照する
  • Controller.csからprefabの Instantiateを行う
    • 可愛いパーティクルを5秒出して消えるprefabなどを出すのがおすすめ
    • ControllerからCoroutine(コルーチン)を使ってみよう
      • パーティクルを生成→2秒後にColor=redに変更→3秒後にDestroyとやってみよう
  • 箱のprefabをplayerと名付ける
    • wasdで移動できるようにする
  • PackageManagerから何かを追加する
    • InGame Debug Console https://github.com/yasirkula/UnityIngameDebugConsole を追加
    • gitURLでのインストールは作業端末にgitが入っていて、環境変数のパスが通っている必要がある
      • パスを通しておいてください。通した後PC再起動が必要かも
    • prefab一個置くだけで動くので良い
  • WebAPIを叩いてみる
    • https://httpbin.org/ というサイトに試してみる
    • UnityWebRequestに慣れましょう
    • ↑のパーティクルで書いたCoroutineの書き方を復習しましょう
    • jsonのシリアライズとデシリアラズを覚えましょう
  • 人の書いたコードとかプロジェクトを読もう
    • 新規プロジェクトを作る
      • このアセットをインポートする
      • https://assetstore.unity.com/packages/templates/tutorials/unity-learn-playground-urp-109917
      • ドキュメント、フォルダ構造を眺める
      • エディタ再生する、実機ビルド、ブレイクポイントによるデバッグを試す
      • Sceneを眺めてコンポーネントの参照関係を追いかける
        • Managerっぽいものはどこにある?どんな単位でスクリプトは分けられてる?
      • スクリプトを適当に変えてみる
      • 知らないC# 記法があったら覚える
        • ScriptableObjectの作り方とか
        • MenuItem経由でのUI拡張とか
      • この辺までであなたがUnityを触って楽しいと感じるかわかります。
        • しんどかったらここら辺で有識者あるいは上司に相談しましょう。

もうチョット詳しくなりたい

この項目は書きかけなのと、優先順位がだいぶ悩ましい…

  • ObjectPoolingの理解
    • 既存のライブラリを使って良いので何か実装してみましょう
    • 無限スクロールのチャット欄や大量のアイテム表示など
  • エディタ拡張
    • [Header]アトリビュートなどだけでも読みやすさが変わります
  • Cameraの挙動
    • FoVとか、SkyBoxとかFogとか
  • Rigidbody,Colliderの衝突判定
  • SpriteRendererとuGUIの違い
  • UserPrefsでの値の取り扱い
  • 画像データの解像度設定
  • オーディオデータの品質設定
  • ライティング
  • UpdateとFixedUpdate
  • Tween
  • アニメーション系
  • Assembly Definitions
    • この辺はManagedなdllを作る話も関わってくる
  • NativePlugin系
    • ここに手を出すと一生NativePluginを書くルートに人生が分岐しがち

この辺まで分かったらソーシャルゲームのUnityクライアントエンジニア入門以前
https://neon-izm.github.io/before_join_socialgame/
を読んでおくと良いかも。(自薦ですみません)

Discussion