メディア工学演習(2021)

資料など

(演習1)UNITYの基礎
04/14 [WEB資料] UNITYとエディタの連携 [資料PDF] [YOUTUBE1][YOUTUBE2] [出席報告]
04/21 [WEB資料] Transform, キー・マウスイベント [資料PDF] [YOUTUBE] [出席報告](小課題)
04/28 [WEB資料] 剛体特性, カメラの視点 [資料PDF] [YOUTUBE] [出席報告](小課題)
!!5月3日締切
05/12 [WEB資料] プレハブ, タグ [資料PDF] [YOUTUBE] [出席報告](小課題)
!!5月17日締切
(演習2)BOID?

5月12日(第四回)

小課題の提出について

小課題について、一部の学生は、コードや報告のみで映像が添付されていません。
どのような形式でもいいので、映像を送ってください。

Instantiateでプレハブを特定のゲームオブジェクトの階層の中に入れたい場合

通常、スクリプトからプレハブを特定の位置・角度でシーンに配置する場合、以下のように”Prehab”という名前のプレハブからゲームオブジェクト(gameObject)をロードした後に、

GameObject gameObj = (GameObject)Recources.Load("Prehab");;

Instantiate関数を、位置(pos:Vector3)と角度(rot:Quaternion)を引数として指定することで実行します。

Instantiate(gameObj, pos, rot);

ここで、Instantiateの引数を4つとし、4つ目の引数に任意のゲームオブジェクト(parentGameObj)のTransformを指定すると、指定した階層の中に入ることができます。

Instantiate(gameObject, pos [Vector3], rot [Quaternion], parentGameObj.transform);

これによって、ヒエラルキービューが大量のクローンで一杯になってしまうことを防ぐことができます。

  • [Qiita]|[Unity]特定の階層にオブジェクト生成(ラクな方法)(Unity5.4)

4月28日(第三回)

スクリプトの中で、特定のゲームオブジェクトを参照する方法

スクリプトの中で、シーンで使用されている特定のゲームオブジェクトを変数として参照し、その空間情報を得たり、固有のメソッドを実行したいと言う場合があります。PDF資料では、

public GameObject 変数 = null;

として、宣言領域でGameObjectの変数をpublicで宣言しておき、インスペクタビューの変数の値領域に直接にヒエラルキビューから特定のオブジェクトをドラッグ&ドロップをする方法を説明しました。これは最も直感的な方法ではありますが、大量のゲームオブジェクトを一気に参照する際に面倒ですし、GameObjectをPrivateにしておきたいときには使えません。

以下のように、GameObjectクラスのクラスメソッド「Find」を使うと、スクリプトの中で閉じたかたちで、参照を完了することができます。

GameObject 変数 =GameObject.Find("GameObjectの名前")

そのほかに、Tagを活用する方法などがあります。以下を参考にしてください。

  • [丸ノ内テック]|スクリプトでオブジェクトを見つける
  • [Qiita]|ゲームオブジェクトの参照
  • p169|見てわかるUnity5 C#超入門
  • p115|見てわかるUnity2019 C# スクリプト超入門

ジェネリックメソッド

ゲームオブジェクトから特定の型のコンポーネントを取り出す際に使われた、メソッドと引数の間に<>が挿入される文法は、C#に独特のもので、ジェネリックメソッドと言われるものです。例えば、以下のケースでは、自分自身(this)のcsファイルが置かれているゲームオブジェクトから、Rigidbodyの型を有するコンポーネントを取り出しています。

Rigidbody rg = this.GetComponent<Rigdbody>();

ジェネリックメソッドは、(おそらく)これまでに学んできたプログラミング言語ではみられなかったものかもしれません。このような文法が何のためにあるのか、関心のある人は(例えば)以下を参照にしてください。

  • [WEB]|C#のジェネリックを使おう
  • p168|見てわかるUnity5 C#超入門
  • p112-113|見てわかるUnity2019 C# スクリプト超入門

4月21日(第二回)

「フィールド」と「プロパティ」について

オブジェクト指向において、特定のクラスには、「振る舞い」としてのメソッドとともに、「データ」としてのメンバ変数を定義することができます。一般的に、このメンバ変数のことを、特にクラスの「フィールド」と呼びますが、C#にはこの「フィールド」に似た概念として「プロパティ」というものが存在します。そのため、検索などをすると「フィールド」と「プロパティ」という言葉が混在しているので、混乱してしまうこともあるかと思います。「プロパティ」は「フィールド」を部分的に拡張した変数であり、自分自身に対する値の代入や参照に関するメソッドを自動的に生成する特徴があり、privateな「フィールド」の値の書き換えのための一種のインタフェースとして扱われています。「フィールド」は頭文字が小文字、「プロパティー」の頭文字は小文字とされています。とはいえ、今回の演習では、この辺の事情については意識する必要はありません(今後の演習の中で、「プロパティ」を自作することはありません)。詳しく知りたい人は、例えば以下を参照するなどしてみてください。

  • [WEB]|C#のクラス、フィールド、メソッド、コンストラクタ、プロパティの作成
  • [WEB]|プロパティ?フィールド?メンバー?C#のクラス構造のおさらい
  • p97|見てわかるUnity5 C#超入門
  • p491|見てわかるUnity2019 C# スクリプト超入門

参考書について

個人的には初心者向けには、以下の参考書をすすめています。

  • [AMAZON]|見てわかるUnity5 C#超入門
  • [AMAZON]|見てわかるUnity2019 C# スクリプト超入門

課題と出席の提出

翌週の月曜日(4月26日)を締め切りとします。

4月14日(第一回)

授業のすすめかた

  • 初回の授業は対面とし、簡単に授業のすすめかたを説明しますが、それ以降は各人のPC環境で、小鷹が作成するYoutube資料を教材として、演習を進めてもらいます。最後の授業のみ、工場2で、課題の発表を対面で行います。
  • PC環境はWinでもMacでも大丈夫ですが、個人の環境が不調であれば、工場のPCを使ってもらって構いません。少なくても、水曜2限の時間は、メディア工学演習の授業用として抑えています。
  • 全体のスケジュール(予定)はこちら [LINK] から確認してください。 

出席確認の方針

  • 次の授業が始まる前日前々日(翌週の月曜日)までに、以下の内容のテキストをファイルリクエストから送ってください(形式は問いません)。学習内容は、一行程度で構いません。わからないことなどあれば、質問を書いてください。
    学籍番号:1950xx
    名前:山田太郎
    学習内容:(例)〇〇のコードを書き、動作確認しました。
    質問など:
  • ファイルリクエストを送る際には、名前入力の際に、冒頭に学籍番号をつけてください(例:1950xx_kenrikodaka)。dropboxにログインしている場合は、dropboxのアカウントで設定された名前が使われてしまいますので、一旦ログアウトしてもらえると助かります。
  • 必ずしも指定された授業の時間(水2)でやる必要はありません。各自の都合に合わせてスケジューリングしてください。
  • さらに、個人的に参考書を購入し、学習を進めている場合、その旨を簡潔に書いてもらえればいいです。

事前準備

  • 各人所有のPCにあらかじめUNITYとVisual Studio Codeをダウンロードしておいてください(UNITY HUBをまずダウンロードすると、そこから最新版をダウンロードできます)。
  • インストールの手順については以下を参考にしてください。WinでもMacでもおそらく問題はないはずですが、授業資料はMacベースですすめていきます。なお、リンクの文章では、Visual StudioをUnityをインストールする際にモジュール追加としてチェックしてインストールしていますが、今回は既にVisual Studio Codeをインストールしていることを前提としているため、チェックする必要はありません(使用するエディタは各人の好みにお任せします)。
  • 両ソフトウェアのインストールが済んだら、UNITYに対応する「外部のスクリプト」としてVisual Studioを設定します(参考書 p26)。
    • 設定は以下で行います。
      • [編集] – [環境設定] – [外部ツール] – [外部のスクリプトエディター](日本語)
      • [UNITY] – [Preferences] – [External Tools] – [External Script Editor](英語)
    • これを設定しないと、UNITY内でプログラムファイルを開くときに別のテキストエディタにつないでしまいます。注意してください。