メディア工学演習(2024)

資料など


(演習1)UNITYの基礎
04/17 [WEB資料] UNITYの環境整備 [資料PDF] [YOUTUBE] [出席報告|FileRequest]
04/24 [WEB資料] Transform, キー・マウスイベント [資料PDF]
[YOUTUBE] [出席報告](小課題)
05/01 [WEB資料] 剛体特性, 地形, カメラの視点 [資料PDF] [YOUTUBE] [出席報告](小課題)
!!5月10日締切
05/08 [WEB資料] プレハブ, タグ [資料PDF] [YOUTUBE] [出席報告]
!!5月13日締切
(演習2)集合知と感染モデル
05/15 [WEB資料] UNITY環境のセットアップ [資料PDF] [YOUTUBE] [出席報告](小課題)
!!5月20日締切
05/22 BOID(ルール1) [資料PDF] [YOUTUBE] [出席報告](課題)
!!5月27日締切
05/31 BOID(ルール2・ルール3) [資料PDF] [YOUTUBE] [出席報告](課題)
!!6月3日締切

5月15日(第5回)

ボイド設計のためのUNITY環境

はじめに、授業用のパッケージをインポートします。以下のファイルをダウンロードしたのち、UNITYのメニューから「Assets→Import Package→Custom Package」を選択し、ダウンロードしたパッケージを指定します。Scenesフォルダから「Initial Condition」をクリックしてから、授業にすすんでください。

壁の形状を編集するには、あらかじめ「ProBuilder」のパッケージをインストールする必要があります。「Window/Package Manager」で「Packages:In Project」タブ(* うまくいかないときは「Package:Unity Registry」を試してみてください)を選択した状態で、検索欄に「probuilder」と入力し、「ProBuilder」(2024年5月13日時点:Version5.2.2)をインストールすることができます。「ProBuilder」のインストール方法、および使い方は例えば以下が参考になります。

  • [3DCG SCHOOL]|Unityのモデリングアドオン「ProBuilder」の使い方まとめ

5月8日(第4回)

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)

5月1日(第三回)

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

スクリプトの中で、シーンで使用されている特定のゲームオブジェクトを変数として参照し、その空間情報を得たり、固有のメソッドを実行したいと言う場合があります。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# スクリプト超入門

Terrain(3D Object)の使い方

Physics Material(跳ね返り)の設定

4月24日(第二回)

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

オブジェクト指向において、特定のクラスには、「振る舞い」としてのメソッドとともに、「データ」としてのメンバ変数を定義することができます。一般的に、このメンバ変数のことを、特にクラスの「フィールド」と呼びますが、C#にはこの「フィールド」に似た概念として「プロパティ」というものが存在します。UNITY関係で検索などをすると「フィールド」と「プロパティ」という言葉が混在しているので、混乱してしまうこともあるかと思います。「プロパティ」は「フィールド」を部分的に拡張した変数であり、自分自身に対する値の代入や参照に関するメソッドを自動的に生成する特徴があり、privateな「フィールド」の値の書き換えのための一種のインタフェースとして扱われています。

実は、UNITYであらかじめ用意されているクラスの変数の大部分(ほぼ全て?)が「プロパティ」として実装されています。とはいえ、今回の演習では、この辺の事情については意識する必要はありません。今後の演習の中で、「プロパティ」を自作することはありません。授業の中の説明で、「プロパティ」という語が使われている場合、脳内で「メンバ変数」「フィールド」に変換してもらって、(少なくてもこの授業の中では)全く問題ありません。両者の違いを詳しく知りたい人は、例えば以下を参照するなどしてみてください。

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

4月17日(第一回)

授業のすすめかた

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

DISCORDの登録

  • 僕からの授業の案内などは、(LIVE CAMPUSではなく)DISCORDを通して行います。また、基本的なコミュニケーション(質問など)をDISCORDを通して行うことを想定しています。運用方法については、授業をすすめながら徐々に確定させていきます。
  • 以下から、DISCORDに登録してください(DISCORDをインストールしていない場合、まずインストールをしましょう)。
  • ニックネームを「学籍番号 名前」に変更してください。
    • [LINK]|Discord(ディスコード)名前をサーバーごとに変える簡単な方法

出席確認の方針

  • 次の授業が始まる前々日(翌週の月曜日)までに、以下の内容のテキストをファイルリクエストから送ってください(形式は問いません)。学習内容は、一行程度で構いません。わからないことなどあれば、質問を書いてください。
    学習内容:(例)〇〇のコードを書き、動作確認しました。
    質問など:

  • 必ずしも指定された授業の時間(水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内でプログラムファイルを開くときに別のテキストエディタにつないでしまいます。注意してください。

VisualStudio Codeでのコード整形

VisualStudio Codeでコード整形をする場合、Windowsでは「SHIFT+ALT+F」、Macでは「SHIFT+option+F」のショートカットを使います。

  • [Qiita]|VisualStudioCodeでのコード整形

参考書について

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

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

Mathfの関数一覧

  • [WEB]|【Unity】便利な数学関数の Mathf クラスまとめ【Clamp, Abs など】