C# / Unity2D 学んだこと #3


C#

パッケージマネージャ

  • プロジェクトのパッケージマネージメントは、NuGetというものを使うらしい
    • ナゲット?
  • .NET Coreをインストールすると入る、dotnetコマンドにはNuGetの機能が内包されていて、
dotnet add package TwitterOAuth
  • という感じで書く
  • WindowsではPackage Managerというツールもあるらしいが、yum/aptと同等のものと言ってる人もいてよくわからない
  • Java(Maven)のようにGroupIdのような名前空間的なものはなく、ライブラリの名前のみでインストールできる
  • https://www.nuget.org/
    • 92k Unique Packages
  • https://mvnrepository.com/
    • 7820k
  • なのでライブラリに関してはJavaの方が多そう
    • もちろん死んでるライブラリもJavaの方が多いとは思う

匿名クラスとdynamic

  • 匿名クラスという、非常に便利なものがある
using System;
using System.Collections.Generic;

class Hoge
{  
  public static void Main(string[] args)
  {
    var dyn = new { Age = 30, Name = "mk2" };
    Console.WriteLine(dyn.Age);
  }
}
  • ジェネリクスが必要なところでも使えるらしいので、以下のようなコードも行ける
using System;
using System.Collections.Generic;

class Hoge
{  
  public static void Main(string[] args)
  {
    var dyn = new { Age = 30, Name = "mk2" };
    var dict = new Dictionary<string, dynamic>();
    dict.Add("test", dyn);
    Console.WriteLine(dict["test"].Age);
  }
}
  • dynamicはコンパイル時の型チェックをスルーしてくれる型らしい(乱用するとやばそう)
    • ちなみにUnityでは、使っているMono(.NETの互換OSS)のバージョンが古く、利用できないようだ

Unity2D

1回Prefab化したものをSceneウィンドウで編集したい

  • Sceneウィンドウで編集→もとのPrefabにドロップすると反映された

アニメーション

  • 今の理解
    • Animation Clip -> Animation Controller -> Animator Component
  • の順で依存関係を持つ
  • Animator ComponentはGameObjectに紐づくため再利用は出来ないが、他のAnimation ClipやControllerは一度作れば複数のAnimator Component/Animation Controllerに紐付けたり出来る
  • keyframeとは?
  • Animation Controllerの状態遷移について
    • ENTRYにとどまることが出来ない?
      • 初期状態は何もアニメーションさせず、あるタイミングでアニメーションを開始させたいと思ったが、どうも何もアニメーションしない状態を作らないと行けないようだ
      • https://docs.unity3d.com/jp/540/Manual/StateMachineTransitions.html
      • Unityのドキュメントを見ても、Idleという状態が存在している

Coroutine

  • コルーチン
  • https://docs.unity3d.com/jp/530/Manual/Coroutines.html
  • Updateの処理とは別のタイミングで処理を実行させたいときに使う
  • コルーチンの基本
    • StartCoroutine(IEnumarator)でコルーチンを開始できる
    • コルーチンは関数実行の中断・再開用システム
    • yield hogehogeでコルーチン固有の処理を行う
      • yield break - コルーチンの処理を停止する
      • yield return new WaitForSeconds(x) - x秒待つ
    • コルーチンはあくまで平行プログラミングなので、並列に何かが実行されることはない
    • 個人的にコルーチンを使ってみた感想として、コレ使えばなんでも出来るな…と思った
      • アニメーションも他の時間経過が必要な処理も全部コルーチンで出来る
      • 故に多用しすぎるとヤバイ気もする
  • コルーチンの注意点
    • StartCoroutineは既存の開始されているコルーチンについて何も関与しないので、コルーチンの管理は開発者が行う必要がある
      • void Updateでコルーチンを開始する場合は要注意
      • 大量のコルーチンを使うとそれだけ大量のコルーチン状態変数が生まれる
      • ヤバイ(小並感)

C#/Unity 学習1週間目だが、ゲームを作ってみた

  • 素材は本屋で売ってた2k円ぐらいの素材集(商用利用可)
  • フォントはフォントなにあったフォントを使う
  • 反省点
    • コルーチンの使い方が雑
      • ゲームロジックとアニメーションのタイミング合わせをコルーチンで行ってしまったので、アニメーションのWaitForSecondsの値を変えるとゲームロジックに変化が生まれる(ヤバイ)
    • Unityのシーンエディタをうまくあつかえていない
      • ビューの生成をコードでやっているので、Unityのシーンエディタを使いこなせていない
      • どこからどこまでUnityのシーンエディタで生成すべきかイマイチわからず