Unity6 学習メモ

>100 Views

November 08, 25

スライド概要

Unity6学習にあたり、調べた内容をつないだもの。

profile-image

XR(VR/AR)のエバンジェリスト。XR技術で世界を変えていきましょう。 https://majimajiwaroze.connpass.com/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Unity6学習メモ 2025.11.08

2.

大久保 聡 Mail [email protected] Twitter @followapp

3.

Unity プロジェクトの作成

4.

プロジェクトの作成  Unity HubからNew Projectを選択します。  Editor versionをインストールされている Unityから選択します。 本資料のUnity Versionは6000.1を使用し て説明しています。  TemplateからUniversal 3Dを選択します。 本資料はUniversal Render Pipelineを使 用して説明しています。  Project名を入力し、Create projectボタン を押下します。プロジェクトが作成され、 Unity Editorが立ち上がります。

5.

Game Viewウィンドウ Unity Editorの使い方

6.

Game Viewウィンドウ(1/)  Aspect比の変更  最大化してプレイ  AudioのMute  Stats • メモリ使用料 • CPUの種類 • ネットワークの接続状況  Gizmo • オーディオソースの場所 • 空のGameObjectの場所などを表示

7.

Hierarchyウィンドウ Unity Editorの使い方

8.

Hierarchyウィンドウ(1/) シーンに配置したGameObjectの一覧が表示される。 GameObjectの親子関係を設定する場合にも使えます。  検索 名前 タイプ

9.

Projectウィンドウ Unity Editorの使い方

10.

Projectウィンドウ(1/3) アセットの一覧表示、アセットの管理に利用する。 アセットの階層構造(フォルダ・ファイル構成)を変 更することで、アセットの整理ができます。  オブジェクトのサムネイルサイズの変更  ラベル付け、個々のGameObjectにラベル付けす ることで、検索に利用できます。 ラベル付け サムネイル サイズ

11.

Projectウィンドウ(2/3)  検索 ・名前 ・オブジェクトの種類 ・ラベル • Play • t:Mesh • l:Audio 名前にPlayを含むもの TypeがMeshのもの LabelがAudioのもの  Favorites 検索条件を保存しておいて再利用できます。

12.

Projectウィンドウ(3/3)  Breadcrumb Trail(Assetのファイルパス)はここで確認できます。

13.

Scene Viewウィンドウ Unity Editorの使い方

14.

Scene Viewウィンドウ(1/4)  Scene Viewを中心に視点が回転 Alt(Option) + 左クリック  Scene Viewを上下左右にパン Alt(Option) + 真ん中ボタン  Scene Viewを拡大縮小 Alt(Option) + 右クリック(マウスホイール でも可)  Walkthrough Mode 右クリック押しっぱなし WSADで前後左右に移動 QEで上下に移動  選んでいるオブジェクトにフォーカス Fキー

15.

Overlay Menu Tool Settings Grid and Snap Search Draw Modes View Options Tools Orientation AI Navigation Cameras

16.

Scene Viewウィンドウ(2/4) https://docs.unity3d.com/ja/540/Manual/ViewModes.html Sceneビューで、表示する方法を選択  Shading Mode • Shaded Draw Mode テクスチャ付きで描画します。 • Wireframe Draw Mode ワイヤーフレームを描画します。 • Shaded Wireframe Draw Mode Shadedにワイヤーフレームを重ねて表示  Realtime/Baked Global Illumination • Backed Lightmap • Emissive(光の反射) • UV Overlap

17.

Scene Viewウィンドウ(3/4)  2D/3D切り替え Icon  ライト on/off  サウンド on/off  Effects • Skybox on/off • Fog on/off • Flares on/off  GizmoとIcon • Collider on/off Gizmo

18.

Scene Viewウィンドウ(4/4)  表示方向の変更(シーンギズモ)  平行投影(等角投影)と透視投影の切り替え

19.

Sceneの保存  Scene上に配置したGameObjectと、GameObjectに設定したコンポーネントおよびコンポーネ ントの設定値は、Sceneを保存することで記録することができます。

20.

Editorのウィンドウ配置  Editorのウィンドウの配置は、タブをドラッグして好きな位置にユーザーインターフェースを移動させ ることができます。

21.

Consoleウィンドウ Unity Editorの使い方

22.

Consoleウィンドウ  Debug文での情報の出力や、Unityのエラー情報などが表示されるウィンドウです。 Debug.Log("Delte time : " + Time.deltaTime); Debug.LogError("Delte time : " + Time.deltaTime); Debug.LogWarning("Delte time : " + Time.deltaTime);

23.

ゲームオブジェクトの作成と操作 Game Objectsの基本

24.

GameObject  プリミティブなオブジェクト キューブ / Cube 円柱 / Cylinder 球 / Sphere 平面 / Plane カプセル / Capsule クワッド / Quad

25.

PlaneとQuadの違い  Plane のほうがメッシュ数が多い.(Plane は121個の頂点と200個の三角形,Quad は4個の頂 点と2個の三角形でメッシュを構成)  Plane は 初期配置がXZ平面, Quad はXY平面。  Plane は床や壁といった平らな表面を表示するために利用されます。  Quad は画像や動画を表示するためのディスプレイとして利用したり,シンプルなGUIや情報 を表示するためにも用いられます。

26.

GameObjectの操作  移動(W) W E R 軸のGizmoを選んで軸に沿って移動 面のGizmoを選んで並行移動  回転(E) 軸のGizmoを選んで軸に沿って回転 Gizmoの真ん中を選んで任意の回転  拡大縮小(R) 軸のGizmoを選んで軸の方向に拡大縮小 GizmoのBoxを選んで全体の拡大縮小  Pivot/Center オブジェクト作成時に設定された中心か、オブジェクトのレンダリング境界線の中心を切り替えれます。  Local/Global オブジェクトのローカル座標系もしくはグローバル座標で操作できます。

27.

スナップ移動  CTRLを押しながらGameObjectを移動すると、1m単位でスナップ移動できます。

28.

オブジェクトの上に配置  CTRL+Shiftを押しながらGameObjectをドラッグすると、他のObjectのColliderに沿って移動 することができます。

29.

頂点スナップ移動  配置済みのGameObjectにピッタリ配置したい場合、頂点で揃えて配置することができます。 GameObjecgt選択 します。 Vキーを押しっぱな しにすると、マウス に一番近い頂点へ Gizmoが移動します。 Gizumoのセンターにあ る四角い枠をドラッグす ると、他のGameObject の頂点にあわせて配置で きます。

30.

Inspectorウィンドウ  Game Objectのコンポーネントの追加とその設定を変更することができます。

31.

Inspector(1/3)  Inspectorの表示ロック、ロックすることで他のGameObjectを選択してもロックした GameObjectのプロパティが表示されます。  計算式の入力、テキストボックスに計算式が入力できます。

32.

Inspector(2/3)  L(min,max) 均等配置したいGame Objectを選択します。例えばZ軸に0~5の範囲に均等に並ばせたい場合、 Position ZにL(0, 5)と入力します。  R(min,max) ランダム配置、最小、最大の範囲にランダムに値をセットします。

33.

Inspector(3/3)  コンポーネントの値をコピーとペースト ※Play中に値の調整したものは、停止するともとの値に戻ってしまう。実行中に調整した値を使いたい場 合は、実行中に値をコピーしておき停止後にペーストすることで、値を反映させることができます。  コンポーネントの値をリセット Transformをすべて0にしたりする際に便利です。

34.

空のGameObject  空のGameObjectを親に、親子関係の作成します。 Hierarchyで右クリックしCreate Emptyを選択すると空の GameObjectが作成できます。  回転・移動の確認  子供のTransformの確認  座標の確認  親の回転の確認 空のGameObject:Transformコンポーネントだけがついている GameObject。 GameObjectには必ずTransformが付きます。

35.

GameObjectの親子化  Hierarchyにオブジェクトの配置 子供をドラッグして、親にしたいObjectの下にドロップします。親子関係にすると親の移動、回 転、スケールなどが子供にも反映されます。また、子供は親からの相対位置で管理することができ ます。

36.

Prefabの作成(1/2)  シーン上に配置したGame Objectを部品として 再利用可能なPrefabアセットとして定義するこ とができます。  シーン上に配置したGame Objectを、 Hierarchy ウィンドウから選択し、Project Windowにドラック&ドロップします。 ProjectウィンドウにPrefabが作成されます。 このPrefabは、Game Objectに設定されたコン ポーネント、設定したプロパティ値、子Game Objectなどが保存され、Prefabアセットとして 再利用することが可能となります。

37.

Prefabの作成(2/2)  Projectウィンドウで右クリックし、Create -> Scene -> Prefabを選択すると空のPrefabが作成され ます。中身のあるPrefabはイメージが表示され、中身を開いて確認することができます。

38.

Prefabの利用  ProjectウィンドウのPrefabアセットをシーン もしくは、 Hierarchy ウィンドウにドラック& ドロップします。シーン上にPrefabインスタ ンスが作成されます。 Prefab = クラス Prefabインスタンス = インスタンス という関係にあたります。 Prefabを修正するとPrefabインスタンス にも変更が反映されます。

39.

Prefab Variantの利用  HierarchyウィンドウのPrefabインスタンス を変更します(この例では色をかえています。) 変更したPrefabインスタンスをProjectウィ ンドウにドラックします。ここでPrefab Variantを選択すると、Prefab Variantが作 成されます。 Prefab = クラス Prefab Variant = 派生クラス Prefabインスタンス = インスタンス という関係にあたります。 ベース(親)の変更がVariant(子)に自動で反映 されるため、通部分は親に任せて、違う部分 だけ自分でカスタマイズすることが可能にな ります。

40.

タグ  Game Objectにタグをつけることができます。タグで識別して挙動を分岐させるなどに利用しま す。

41.

レイヤー  レイキャストで無視されるべきゲームオブジェクトや、カメラからは見えないゲームオブジェクト、 ライトの影響を受けるゲームオブジェクトなど、ゲームオブジェクト全体の機能性を示すのに利用 します。

42.

カメラ カメラの基本と用語の解説

43.

カメラのプロパティ  モード共通 • Render Type • Base シーンの主要な描画を行う基本となるカ メラです。スカイボックスや背景色を描 画できます。 • Overlay: Baseカメラの描画結果の上に、追加で 描画を重ねるためのカメラです。 Overlayカメラは単体では何も描画でき ず、必ずBaseカメラのスタックに追加 する必要があります。 • Camera Stack Render TypeがBaseのカメラにのみ表示 されます。ここにOverlayカメラを追加す ることで、複数のカメラの描画結果をレイ ヤーのように重ねることができます。

44.

カメラのプロパティ  モード共通 • Projection • Perspective(透視) 遠くのものは小さく、近くのものは大 きく見える、私たちの現実世界の視界 に近い見え方です。 • Orthographic(平行投影法) 遠近感なく、すべてのオブジェクトが 同じ大きさで描画されます。2Dゲーム や、建築の設計図、ミニマップなど、 正確なサイズ感や位置関係を示したい 場合に使用されます。 • Clipping Planes カメラからの距離で、カメラに映す範囲 を設定します。この範囲外のオブジェク トは描画されません。

45.

カメラのClipping plane  パースペクティブカメラにより表示できてレンダリングされる領域です。ニアクリッピングプレー ンよりカメラに近いもの、ファークリッピングプレーンより遠いものは、レンダリングされません。 Near Clipping Plane Far Near Far Clipping Plane

46.

カメラのプロパティ  Perspective(透視法)モードの場合 • Field of view カメラ視野角を角度で設定します。  Orthographic (平行投影)モードの場合 • Size カメラのビューポイントのサイズ。縦の 半分に何Unit入るかを指定します。

47.

Orthographic Size  Aspect比1.77(16:9)で、Size5.4の場合。19.2 Unit × 10.8 Unit が表示範囲となる。 19.2 Unit 5.4 Unit Orghographic Size 10.8 Unit

48.

カメラのプロパティ  Post-processing チェックを入れると、このカメラに対してポ ストプロセッシング(ブルーム、色収差、ビ ネットなど、描画後の画面全体にかけるエ フェクト)が適用されるようになります。  Anti-Aliasing 3Dオブジェクトの輪郭線やテクスチャの模様 に現れるギザギザ(ジャギーとも呼ばれます) を滑らかにするための技術です。 Postprocessingの機能にあるAnti-Aliasingの設 定です。  Stop NaNs シェーダー計算の過程で発生する不正なNaN 値を持つピクセルを強制的に黒色に置き換え ます。これにより、視覚的な破綻が広がるの を防ぎますが、処理の負荷が大きいため、修 正不可能な NaN の問題が発生した場合のみ 有効にしてください。

49.

カメラのプロパティ  Render Shadows 影を表示するかどうかの設定です。  Priority 複数カメラがある場合にカメラの描画順を決 める設定です。  Culling Mask カメラに映すレイヤーを設定します。  Occlusion Culling カメラの撮影範囲外の映らないオブジェクト のレンダリングをしない設定です。

50.

カメラのプロパティ  Background Type カメラが何もオブジェクトを映していない 「背景」部分をどのようにクリア(塗りつぶ し)するかを設定するプロパティです。 • Skybox 背景をスカイボックスマテリアルで塗りつぶ します。これにより、空や遠景といった360 度の背景をシーンに表示できます。 • Solid Color 背景を指定した単一の色で塗りつぶします。 • Uninitialized カラーバッファのクリア処理を一切行いませ ん。  Dynamic Resolution パフォーマンスを安定させるためGPUへの負 荷に応じて、レンダリング解像度をで動的に 変更し、目標のフレームレートを維持するこ とを目指します。

51.

Background Type  レンダリングされていない空の部分をどうするかの設定。Depth Onlyは複数カメラを使い、重ね て表示する場合に利用します。 Skybox Solid Color Uninitialized

52.

カメラのプロパティ  Viewport Rect カメラの画像をどこに表示するか、スクリー ンの座標で指定します。

53.

ビューポート座標、スクリーン座標  スクリーン座標 左下を(0, 0)、右上を(画面のピクセル幅,・高さ)とした座標系。解像度に依存します。  ビューポート座標 左下を(0, 0)、右上を(1, 1)とした座標系。解像度に依存しません。 (1, 1) (1920, 1080) (0, 0) スクリーン座標 (0, 0) ビューポート座標

54.

カメラ映像をRender Textureで表示する カメラの映像はスクリーンに表示されますが、Render Textureを使うことでいったんテクスチャと して保存できます。テクスチャにすることでUIに表示したり、3Dオブジェクトの表面に貼り付けた りと、様々な使い方が可能になります。  2つのカメラを置き、サブカメラの方を上からの俯瞰視点。Target Textureを指定することでカ メラ映像をRender Textureに書き込むように設定します。  UIにサブカメラの映像を表示します。Canvasを作成し、Raw Imageを配置。サブカメラの映像 が書き込まれるRender TextureをRaw Imageに指定します。

55.

Occlusion Culling カメラから見て、他のオブジェクトに完全に隠れてしまっている(遮蔽されている)オブジェクトを描 画しないようにすることで、レンダリングの負荷を軽減し、パフォーマンスを向上させるための技術 です。  隠すもの(Occluder)と隠されるもの(Occludee)の対象をStaticで設定します。  Window-> Occlusion Cullingから、Windowを開きます。

56.

Occlusion CullingのBake  オクルージョンカリングをBAKEして、Visualizeモードに変更します。  カメラを移動してカリングが効いているか確認します。

57.

Assetの取り込み

58.

Assetの取り込み方法  コンテンツをAsset Storeで購入 Window -> Asset Store (Package Manager)  パッケージ(拡張子unitypackage)のインポート Assets -> Import New Asset…  直接Assetフォルダにファイルコピー

59.

Unity サポート形式(1/2)  サウンド 形式 拡張子 MPEG layer 3 .mp3 Ogg Vorbis .ogg WAV .wav AIFF .aiff / .aif Ultimate Soundtracker モジュール .mod Impulse Tracker モジュール .it Scream Tracker モジュール .s3m FastTracker 2 モジュール .xm

60.

Unity サポート形式(2/2)  画像 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT, EXR, HDR  3Dモデル .fbx、.dae(Collada)、.3ds、.dxf、.obj Autodesk®3dsMax、Autodesk®Maya、Blender、Cinema4D、Modo、LightWave、 Cheetah3DのファイルはFBXに変換されインポートされる。

61.

テクスチャインポーター  Texture Type  アルファチャンネル プロパティー 説明 Texture Type このテクスチャが何に使用されるのかを選択します。テクスチャインポーター の他のプロパティーは、この選択によって変化します。 Default すべてのテクスチャで使用されるもっとも一般的な設定です。テクスチャイン ポーターのほとんどのプロパティーにアクセスすることができます。 Normal Map カラーチャンネルをリアルタイム法線マッピングに合った形式に変えます。 Editor GUI テクスチャを任意の HUD/GUI 制御で使用します。 Sprite (2D and UI) テクスチャを 2D ゲームの スプライト として使用します。 Cursor テクスチャをキューブマップとして使うために基本パラメーターを設定します。 キューブマップは大抵、リフレクションを作成するために使用されます。詳細 な情報については キューブマップテクスチャ を参照してください。 Cookie テクスチャをシーンの ライト の クッキー として使うために基本パラメー ターを設定します。 Lightmap テクスチャをライトマップとして使用する場合は、 ライトマップを選択しま す。 このオプションは、特定のフォーマット(プラットフォームに応じて RGBMまたはdLDR)とテクスチャデータの後処理ステップ(プッシュプル拡張 パス)にエンコードすることができます。 Single Channel テクスチャでチャンネルが1つだけ必要な場合は、[ シングルチャンネル]を選 択します。

62.

テクスチャインポーター  Wrap Repeat(タイリング)、Clamp(一度だけ)  フィルターモード 引き延ばした際のぼかし方

63.

テクスチャインポーター  Max Size ゲーム内で使われるテクスチャの最大解像度(大きさ)を決める設定。この指定サイズをオーバーしてい る場合、Unityがここで指定したサイズにリサイズします。アプリに組み込まれる画像のサイズが小さ くなるので、アプリのファイルサイズ、実際の動作時の使用するメモリ量の削減ができます。

64.

テクスチャインポーター • 遠い画像に高詳細のTextureを使うのは処理負荷的にもったいない。そのため事前に遠景用の Textureを用意しておき、距離に応じて使いわける仕組みです。Mipmapを自動生成することもで きます。

65.

TextureのTypeを適切に  Sphereをシーンに作成します。  Normal Mapのテクスチャーを割り当てたマテリアルを作成します。  マテリアルをSphereに割り当てます。  TextureのTypeをDefaultとNormal Mapで切り替えます。

66.

Sprite Editor  キャラクターアニメーションなどの画像を1つのファイルにまとめて、作成し利用時に分割するこ とでパフォーマンスをより良くすることができます。まとまった画像を分割するにはSprite Editorを利用します。

67.

マテリアルの作用 Unityのマテリアル

68.

Materialとは  シェーダーという絵を描くためのプログラムがあります。シェーダーは3D空間を2Dの絵に変換するた めのプログラムです。 3D空間のものを画面(2D)上のどこに当たるかを計算し、スクリーンのピクセルごとの色を決めるプロ グラムで、そのプログラムの具体的な物体の表面の見た目を定義するパラメーターを設定するものがマ テリアルです。 オブジェクトの色、質感、光の反射の仕方などを決定します。

69.

Material作成  Create -. Materialでマテリアルを作成します。

70.

Surface Options  Surface Type 素材が透明であるかどうかを設定します。 Surface Type 内容 Opaque 透明な部分のない、一般的な固形のオブ ジェクト用です。 Transparent 透明な部分を設定。窓の汚れなどを表現 します。  Alpha Clipping Thresholdの設定値よりも、アルファが低い ピクセルが完全に非表示になります。 ガラスのような素材だと、透明でも光を反射 してしまいますが、柵や格子などのように、 完全に何もないものを表現する場合に使いま す。

71.

Surface Inputs  Base Map ライトが当たっていない状況の生の色  Metallic Map 「金属らしさ」の度合いを調整するスライ ダーです。 0に設定するとプラスチックや木材のような 非金属の見た目になり、1に設定すると鉄や 金のような金属の質感になります。  Smoothness 光の拡散を制御します。値を高く(1に近く)す るほど表面が滑らかになり、鏡のように周囲 の景色をはっきりと反射します。磨かれた金 属やガラスなどがこの状態です。 下げる : ハイライトが表面全体に広がり、ざ らついた表面になります。 上げる : ライトが凝縮されます(鏡面ハイラ イトが明るく白に近い色になります)。

72.

Surface Inputs  Normal Map (法線Map) 表面に法線の方向を設定(RGB値を、XYZの ベクトル方向として利用)することで、光の 反射を曲げて実際のメッシュにない、凹凸や 溝、傷などのディティールがあるかのように することができます。  Occlusion Map 光が届きにくい部分(物体の隙間や溝など)を 暗くすることで、立体感を強調するための マップです。 アンビエントオクルージョン(AO)とも呼ば れます。これを設定すると、オブジェクトに 重みとリアリティが格段に増します。  Emmision 表面から放出される光の色と強度を制御しま す。自己発光しているような表現に利用でき ます。

73.

ノーマル ライン(法線)  メッシュには表裏があり、表向きの面から直角に出る線を法線と呼びます。 表 裏

74.

UV Map  テクスチャーを3Dモデルの表面に張り付ける手法です。 2次元と3次元の座標の対応付けマッピ ングすることで、3Dモデルの表面にテクスチャーを張り付けることができます。 V Z (0.5, 0.5) (0,0,1) Y (1, 0.5) U (0.5,0.5) <-> (0,0,1) (1.0,0.5) <-> (1,0,1) (0.5,0.0) <-> (0,0,0) (1.0,0.0) <-> (1,0,0) (1,0,1) (1,0,0) (0.5,0) (1,0) X (0,0,0)

75.

Normal Map  光の反射を変更することで、本来の形状にない複雑な形状を追加することができます。メッシュの 数が多いとパフォーマンスを劣化させるので、できるだけ少ないメッシュの数で複雑な形状の表現 を行うための仕組みです。 変更された光の反射 本来の形状 複雑な形状を定義した画像

76.

MaterialにMap割り当て Smoothness スライダを変更 ModeをOpaqueにし ・Base Map ・Metallic Map ・Normal Map のMAPを設定します。

77.

レンダリングパイプラインとは  何をしているか? 3Dを2次元の絵に変換する処理 3D 2D

78.

レンダリングパイプラインの流れ 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

79.

スクリーン座標に変換 ローカル座標 (1,1, 0) グローバル座標 ビュー空間座標(カメラを原点) スクリーン座標に変換 (2,2, 1) (200.400)

80.

レンダリングパイプラインの流れ 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

81.

ポリゴンの裏表  負荷をさげるために裏面を描画しない。裏面を描画しない処理をバックフェースカリングといいま す。 時計まわり 0→1→2 2→1→3 1 3 3 表 裏 表 0 1 裏 2 2 0

82.

レンダリングパイプラインの流れ 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

83.

画素を決める  ポリゴンがどの画素に描画されるかを決める。ラスタライズと呼ばれる処理。

84.

レンダリングパイプラインの流れ 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

85.

奥行を判定する  既に描画された画素があった場合でうする?

86.

奥行を判定する  画素に対応したカメラからの距離情報を、Zバッファーと呼ばれる領域に保存している。  距離情報を比較して、どちらが手前にあるか判断することができる。 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 2 2 2 2 2 2 2 2 2

87.

レンダリングパイプラインの流れ 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

88.

画素を描画する  奥行の判定結果をもとに、画素を描画します。

89.

レンダリングパイプライン 1 スクリーン座標に変換 2 ポリゴンの裏表 3 画素を決める 4 奥行を判定する 5 画素を描画する 6 奥行の情報を更新

90.

奥行の情報を更新  Zバッファーの内容を、描画した画素の奥行情報で更新します。 5 5 5 5 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 3 3 3 3 3 3 4 5 3 3 2 2 2 3 3 3 4 5 3 3 2 2 2 3 3 3 4 2 2 2

91.

Z Test  透明はどうなるの? 半透明オブジェクトの後ろにあるものを先に描画する必要がある。  同じZ奥行の場合どうなるの? どちらを表示して良いかわからず、Z Fightingを起こす。 Z Fighting 球を先に描画 球を後に描画 描画順を制御するRender Queの値の小さいものから描画される。

92.

レンダリングパイプラインの名前 1 スクリーン座標に変換 Vertex Shader 2 ポリゴンの裏表 Culling 3 画素を決める Rasterize 4 奥行を判定する Z Test 5 画素を描画する Fragment(Pixel) Shader 6 奥行の情報を更新 Z Write

93.

シェーダーって?  描画をするためのプログラム。自分でできるものをプログラマブルシェーダーという。 1 スクリーン座標に変換 Vertex Shader 2 ポリゴンの裏表 Culling 3 画素を決める Rasterize 4 奥行を判定する Z Test 5 画素を描画する Fragment(Pixel) Shader 6 奥行の情報を更新 Z Write v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; }

94.

Unlit/Lit  Un + Lighting / Lighting シェーダー

95.

Custum Shaderの作り方  Projectウィンドウで右クリックして、 Create->Shader->Standard Surface Shaderから作成します。 使い方は、マテリアルを作成して、Shaderを割り当てます。(Materialにドラッグ)

96.

Custom Shader  トゥーンシェーダー (アニメのセル画で行われる影の塗り分けのように、平板で境界線のはっきりした陰影)

97.

Node Base Editor Unity 2018以降 Shader Graph Adobe Substance Designer

98.

RigidbodyとCollider Unityの物理システム

99.

Physics System  Physics Nvidia PhysX(フィジックス)を利用した3D Object専用。重量、重力、衝突などの物理的な力の 作用シュミレートします。  Unity内の単位(風や重力の物理挙動に影響するためリアルなサイズ重さを設定します。) 位置や大きさ m 重さ kg  Physics 2D 2D ObjectとSprite専用

100.

Rigidbody  Rigidbody GameObject を物理特性によって制御する事ができるようになります。Rigidbodyに力やトルク を加えると、オブジェクトをリアリスティックに動かすことができます。  Rigidbodyの割り当て、Inspectorを確認します。 Mass オブジェクトの重さ Drag 空気抵抗の大きさ Angular Drag 回転への空気抵抗の大きさ Use Gravity 重力の影響を受けるかどうか Is Kinematic 物理演算を無効にする Interpolate 物理効果を滑らかにする(描画時に補間) Collision Detection 衝突判定のタイミングを制御

101.

Rigidbodyの効果確認  GameObjectを作成  GameObjectにRigidbodyコンポーネントを 追加.。メニューより Component -> Physics -> Rigid Bodyを選択します。  Playして挙動を見てみます。  床を配置。Planeを作成し先ほど作成した GameObjectの下に配置します。  Playして挙動を見てみます。

102.

Collider  衝突判定に使用するコンポーネント、Rigidbodyと組み合わせて利用します。追加はメニューより Component -> Physics -> XXXX Colliderを選択します。  種類 Box Capsule Sphere Mesh  Is Trigger 衝突のトリガー判定のみを行う場合に設定する。あたり判定がなくなり、ものがすり抜けるようになり ます。

103.

Capsule Colliderの向き  Directionを、X-Axis、Y-Axis、Z-Axisに変更することで向きを変更でします。

104.

Layer Collision Matrix  レイヤー同士の衝突を検出するかどうかを設定できます。Raycastを当てないレイヤーを設定したり。 弾は、プレイヤーとしか衝突判定をしないなど設定します。

105.

複数のコライダーを組み合わせ  Meshコライダーは形状に沿って、複雑な形状の衝突判定をとることができます。しかしパフォー マンス面でのデメリットも発生するため、単純な形状のコライダーを複数組み合わせて利用します。 次のような形状の場合、脚部分にCapsule Colliderコンポーネントを4つ追加します。

106.

Compound Colliders(複合コライダー)  MeshColliderは単純に当たり判定の計算負荷が高く、アニメーションに非対応で、かつ MeshCollider同士の当たり判定が出来ない問題があります。そのため単純な形状のコライダーを 組み合わせて当たり判定を作るCompoundColliderという機能があります。  親オブジェクトにRigidBody、子供colliderコンポーネントを付けることで、複合されたコライ ダーを使うことができます。  L字型のオブジェクトに、Box Colliderを2つける例。

107.

Raycast 光線による当たり判定

108.
[beta]
Physics.Raycast
 仮想のRay(光線)を照射して、Rayが
(Colliderに)ぶつかったかどうかを検出します。
また、何にあたったのかを調べることもでき
ます。

public class Sample : MonoBehaviour {
void Update () {
// 画面上のマウス位置取得
Vector2 screenPosition = Input.mousePosition;
// 画面座標をRayに変換
Ray mouseRay
= Camera.main.ScreenPointToRay(screenPosition);

 Raycastして当たればTrueあたらなければ
falseというのが基本の動きです。

// Physics.Raycast(Vector3 origin, float maxDistance)
// origin
ワールド座標でのRayの開始地点
// maxDistance Rayが衝突を検知する最大距離
Vector3 fwd
= transform.TransformDirection(Vector3.forward);
if (Physics.Raycast(mouseRay, 10f)) {
Debug.Log("Hit");
}

 Raycastの対象をフィルタできま。
メインカメラの取得:Camera.main
シーン上のメインカメラ
(メインカメラにタグ付け
されているもの)を取得し
ます。

// Physics.Raycast(origin, RaycastHit hitInfo, maxDistance)
// hitInfo
コライダーのヒットに関する詳細情報
RaycastHit hitInfo;
if (Physics.Raycast(mouseRay, out hitInfo, 15.0f))
{
Debug.Log("Hit " + hitInfo.transform.name);
}
}
}

109.

RaycastAll / RaycastNonAlloc • RaycastAll レイを飛ばし、レイの線上にあるコライダーの一覧を取得します。 • RaycastNonAlloc RaycastAllと機能は同じですが、Hitした結果の配列を事前に準備します。用意した配列の個数が 埋まった場合、その時点で判定を中止します。Non Allocな分高速です。

110.

光源と影の作用 Unityのライティング

111.

光源  ライトの種類

112.

Direction Light  太陽光みたいなもので、向きの設定のみ行えます。(位置は関係ありません。)  光は減衰せず無限に届きます。

113.

Point Light  球形の光源  光の照射範囲を変更できます。 シーン上の四角(ノブ)をドラッグ、Rangeを変更して照射範を変更します。

114.

Spot Light  円錐形の光源です。  光の照射範囲と照射角度の範囲を変更できます。シーン上の四角(ノブ)をドラッグして範囲を変更 することができます。

115.

Area Light  面(矩形と円)の光源  Baked only

116.

光の当たり方  直接光  間接光 グローバルイルミネーション(GI)

117.

ライトのプロパティ(1/4)

118.

ライトのプロパティ(2/4)

119.

ライトのプロパティ(3/4) プロパティ 内容 Mode Realtime Baked Mixed 光をリアルタイム計算し、動くものにも影を落とすライトにする。直接光のみ利用され、間 接光は適用されない。 光を事前計算し、直接光と間接光の影をライトマップに書き込む対象にする。 上記2つの対象とする。 Intensity ライトの輝度、明るさを設定します。 Indirect Multipller 値が 1 の場合: 物理的に正しい、リアルな強さの間接光になります。これが基本です。 値を 1 より大きくした場合: 間接光が通常よりも強くなります。シーン全体がふんわりと明るくなり、影 になっている部分のディテールが見えやすくなります。アーティスティックな表現として、意図的にシー ンを明るくしたい時に便利です。 値を 1 より小さくした場合: 間接光が弱くなります。シーンの陰影がはっきりして、コントラストの強い、 引き締まった印象になります。 値を 0 にした場合: 間接光が完全になくなります。直接光だけになるので、影の中は真っ暗になります。 Range ライトの届く距離を設定します。 Culling Mask ライトの影響を受けるレイヤーを限定します。特定のオブジェクトだけに光を当てたい(あるいは当てたく ない)場合に使います。

120.

ライトのプロパティ(4/4) プロパティ 内容 Shadow Type No Shadow Soft Shadow Hard Shadow Resolution ライトが生成するシャドウマップ(影のテクスチャ)の解像度。解像度が高いほど、影の輪郭がシャープで綺 麗になる。逆に低いと、影がギザギザしたり、ぼやけます。 Strength 影の濃さ、影の濃さを0(透明)から1(真っ黒)の範囲で調整できます。 Bias 影をライトの方向に対して少しだけ手前(または奥)にずらすことで、オブジェクト自身に影が落ちるのを防 ぎます。 Near Plane 影をポリゴンの法線(表面の向き)に沿って内側に押し込むことで、シャドウアクネを防ぎます。特に、曲面 が多いモデルで効果を発揮します。 影を表示しません。 影のエッジをぼかした、より本物に近いシャドウを生成します。 エッジのくっきりしたシャドウを生成します。ソフトより処理が軽量。

121.

影の設定  Shadow Type Hard Shadows Soft Shadows  Resolutionを変更 Low(512) High(2048)  Strengthスライダーで調整 0.5 1.0

122.

影の設定  Depth Bias 影を光源からの距離に応じてずらす。 0.0 10.0  Normal Bias 影を光源からの距離に応じて法線方向に ずらす。 0.0 10.0  Naer Plane 光源とゲームオブジェクトの距離が、設定した 距離よりも短い場合に、影を表示させない 0.0 5.0

123.

GameObjectの影  Mesh RendererにあるCast Shadow 影を落とすかどうか Two Sided : メッシュの両面で影を 落としたい場合 Shadows Only : 非表示のオブジェクト で、影だけ使いたい場 合 ※パフォーマンスの面で、発光体、小さい もの、暗闇など、影が不要のものに影を つけないようにします。  MaterialにあるReceive Shadow 影を受けるかどうか

124.

ペイントを使った影のフェイキング  Albedoに絵として影を書き込むことで、影の演算処理を減らします。 オブジェクトにライトをあてて、他のオブジェクトに影を落とすのは非常に重い処理です。

125.

Decalを使った影のフェイキング  Project SettingsのGraphicsから、Universal Render Pipeline Assetを見つけます。  Renderingにある、Renderer ListからUniversal Renderer Dataを見つけます。

126.

Decalを使った影のフェイキング  Universal Renderer Data のAdd Renderer FeatureでDecalを追加します。 ※TechniqueをDbufferにしないとVRでは正常 に表示されません。

127.

Decalを使った影のフェイキング  HierarchyでURP Decal Projectorを作成しま す。

128.

Decalを使った影の フェイキング  Materialを作成し、ShaderをShader Graphs/Decalに設定します。  先ほど作成したDecal ProjectorのMaterialに 影のマテリアルを割り当てます。  キャラクターの下にプロジェクションするよう に位置を調整します。

129.

LightのCulling Mask  ライトの影響を受けるレイヤーを限定し、計算するライトの数量を減らして負荷をさげたり、選択的に ライトを当てたい場合に使います。下記はPlayersレイヤーをCulling Maskから外した場合です。 Player Layer

130.

Sky box  Ambient Source(環境光のもと)として使われます。 柔らかい反射光を表現  グラデーションのアルゴリズムに依存します。

131.

Cookie  Cookieはライトの透過をグレースケールの画像で設定する機能で、木陰や人影などの効果を表現 できます。※Realtime Lightのみ

132.

環境光の変更  Skyboxを変更、空(Sceneの何も置いていない場所)にReflectionProbe-0をドロップします。  ReflectionProbe-0のシェーダーをSkybox/proceduralに変更します。

133.

シーンのライティング(1/3) 雰囲気づくりの例  SkyboxのMaterialのTintを青みを強くします。

134.

シーンのライティング(2/3)  Direction LightのIntensityを少し下げます。  色を少し黄色にします。 ライティングで補色を使う。黄色のライトに対して、 影は青や紫を使います。  光が当たっておらず光彩のない場所に、柔らかい変 化のあるライトをあてていく。Point Lightを追加、 サイズを16、青味のある色にColorを変更、 Intensityを2.2に変更します。

135.

シーンのライティング(3/3)  Point Lightを複製して、部屋の全体をカバーするように4つ配置します。

136.

シーンの雰囲気を変える(1/2)  Sky Tintをほぼ黒に、Exprosureを0.6に落とします。

137.

シーンの雰囲気を変える(2/2)  Direction Lightを寒色系に変更します。  Point LightのRangeとIntensityを調整します。

138.

ライトのBaking入門 ライティング

139.

Bakingとは  動かないオブジェクトやライトに対し、光の作用を事前計算する処理のことで、Lightmapという 画像に影や間接光を書き込んでおいて利用します。十分な計算時間をもってよりリアルな光の影響 を表現できます。 リアルタイム ベイク Lightmap

140.

Static設定  Bakeの対象となるObjectにStatic(固定)を指定します。 InspectorでStaticのチェックボックスをonにします。(Static Objectを空のGame Objectでま とめて置くと便利です)

141.

Static設定  ライトを選択し、ModeをBakedに変更します。  Windowメニューから、Rendering -> Lightingを選択し、ライティングのパネルを表示します。

142.

Lightingの設定からBAKE  Generate Lightingを押すことでBakeされ ます。作成したBakeを消すときは、Clear Baked Dataで消せます。

143.

Bake結果 リアルタイム ベイク

144.

Lightmap確認  Debug Draw Modeで Baked Lightmapを表示します。  ライティングのパネルを表示し、Baked Lightmapsを選択しライトマップを見ることもできます。

145.

Lightingパネルの設定  Realtime Global Illumination チェックを入れると、リアルタイムGIが有効になり ます。 ライトを動かしたり、ドアを開けて光を差し込ませ たり、シーンの動的な変化に対してライティングが 即座に追従します。 計算負荷が極めて高いため、ハイエンドなPCや最新 のコンソールでなければ利用が難しい場合がありま す。  Realtime Environment Lighting 主にスカイボックス(空)や周囲の環境からの光が、 シーンのライティングやオブジェクトにリアルタイ ムで影響を与えるようになります。

146.

Lightingパネルの設定  Baked Global Illumination チェックを入れると、間接光がライトマップとして作 成されます。  Lighting Mode Baked Indirect : 間接光だけをベイクし、影はす べてリアルタイムで描画します。 Subtractive : 全にライトベイクされた世界か ら、動的オブジェクトの影をリ アルタイムで引く、このモード は、主にパフォーマンスが最優 先されるモバイルなどの環境で 利用されます。 Shadowmask : 間接光と静的な影の情報をベイ クし、リアルタイムシャドウと 賢く併用します。品質とパ フォーマンスの両立を目指した、 最も高機能で柔軟なモードです。

147.

Lightingパネルの設定  Direct Samples 光源から直接オブジェクトに光が当たり、その結果 としてできる影を滑らかにするためのサンプリング 数を決定します。影の境界線を滑らかにするために、 その領域で重点的にレイを飛ばして計算します。 影のエッジがギザギザになったり、影の中のノイズ を消すために調整します。  Indirect Samples 光源から放たれた光が、床や壁などで反射した後の 「照り返し」の光を計算するためのサンプリング数 を決定します。  Environment Samples シーン全体を覆っている空からの光が、オブジェク トにどう影響するかを計算するためのサンプリング 数を決定します。

148.

Lightingパネルの設定  Max Bounces 間接光がシーン内で最大何回まで反射(バウンス)する かを定義します。光は壁や床に当たると反射し、その 光がさらに別の場所に当たってまた反射するという現 象を繰り返します。 0: 間接光の計算が一切行われません。直接光が当たる 場所だけが明るくなります。 1: 光の反射を1回だけ計算します。直接光が当たった 面からの照り返しのみが表現されます。 2以上: 反射を2回以上計算します。光が部屋の奥まで 回り込むようになり、シーン全体がより明るく、自 然でリアルな印象になります。  Filtering ベイクされたライトマップに対して後処理をかけ、 見た目を滑らかにする機能で、サンプリング数不足 によるノイズや、オブジェクト間の色の継ぎ目(アー ティファクト)をぼかして、滑らかな結果に仕上げる ための工程です。

149.

Lightingパネルの設定  Lightmap Resolution ライトマップのきめ細かさ、つまりディテールの量を 決定する、最も重要なパラメータの一つです。「1 ワールドユニットあたり何ピクセルを使ってライティ ング情報を記録するか」という密度を定義します。値 が大きいほど、高解像度のライトマップが生成されま す。 プレイヤーが間近で見る床や壁、重要なオブジェクト には高い解像度を設定すると、シーンの品質が劇的に 向上します。ただし、その分ベイクのメモリ使用量と 時間は大幅に増加します。  Max Lightmap Size 指定されたサイズのテクスチャ(アトラスと呼ばれま す)に可能な限り詰め込んでいきます。例えば 1024 に設定すると、1024x1024ピクセルのテクスチャが 生成されます。シーンが広大で1枚に収まらない場合 は、2枚目、3枚目と複数のライトマップが作られます。

150.

Lightingパネルの設定  Fixed Lightmap Size 作成するライトマップをすべて同じサイズで作成する かどうか。  Use Mipmap Limits どのミップマップレベルまでを読み込み対象にするか を制限する機能です。例えば、「最高解像度のミップ レベル0は絶対に読み込まず、ミップレベル1(解像度 が半分のもの)を最大にする」といった制限が可能です。 これにより、たとえプレイヤーがオブジェクトに近づ いたとしても、メモリ使用量を一定の上限内に確実に 抑えることができます。

151.

Lightingパネルの設定  AO(Ambient Occlusion) 物体と物体が接する部分が少し暗くなる現象を再現し ます。Ambient Occlusionにチェックをいれて、効果 を強くするにはスライダーで値を大きく調整します。 Max Distance レイを破棄するまでの最大の追跡距離を設定します。 Indirect Contribution 間接光がAOにどれくらい影響を与えるかの度合い を設定します。 Direct Contribution 直接光がAOにどれくらい影響を与えるかの度合い を設定します。

152.

Lightingパネルの設定  Directional Mode ノーマルマップの凹凸を、ベイクした光でどれだけ表 現できるかに直接関わります。 Non-Directional ライトマップに色と強さの情報のみ保存します。 Directional ライトマップに色と強さに加え光の方向も保存します。静 的オブジェクトのノーマルマップを正しくライティングで き、表面の凹凸ディテールをリアルに表現できます。  Albedo Boost GIの計算時にマテリアルのアルベド(基本色)を一時的 に明るくして、光の反射量を増やします。1以上にす るとシーン全体が明るく、色の照り返し(カラーブリー ディング)がより豊かになります。  Indirect Intensity 全ての間接光の明るさを、一括で調整するための乗数 です。

153.

ライトベイク用のUV設定  メッシュに設定されているUVが重複していると影が正常 に焼けません。 V (0, 1) U (1, 0) 出典:https://note.com/info_/n/nb2b18ae64791  メッシュのインポート設定にある、Generate Lightmapにチェックを入れます。これでライティング用 の重複のないUVマップが新たに作成されます。

154.

Light Probeとは  シーン内の特定の地点におけるGI(間接光)の情報を記録し、動的なオブジェクトにその光を反映さ せるための仕組みです。 Unityでは、ライティングを事前に計算してテクスチャに焼き付けるライトマッピングという技術 があります。これにより、静的なオブジェクトに対して非常にリアルな光と影を表現できます。し かし、このライトマッピングは、あくまで静的なオブジェクトのためのものです。 そこで登場するのがLight Probeです。Light Probeをシーン内に配置しておくと、その場所の光 の色や強さ、方向といった情報をサンプリングして保持してくれます。そして、動的なオブジェク トの一番近くにあるLight Probeが記録した光の情報を受け取り、あたかもその場にいるかのよう に自然に照らされるのです。 Light Probeには、手動で設定する方法と自動で配置を行うAdaptive Probe Volumesの2つの 方法があります。

155.

Light Probe(1/2)  Bakeされたラインティング環境で、リアルタ イムに間接光を利用する仕組みです。Light Probeが配置された場所のライティングをベイ ク時にサンプリングし保持し、動的オブジェク トのライティングに適用します。 HierarchyでCreate、Light -> Light Probe Groupで作成します。

156.

Light Probe (2/2)  追加したLight Probe GroupのGame Objectを選択した状態で、シーンビューの上部にあるツー ルバーの中から、ライトプローブ編集用のアイコンを選択します。Probeを動的なオブジェクトが 移動しそうな場所(x-y-z)に散らします。移動範囲をカバーするように Add ProbeでProbeを追加 します。  Bakeを行うと、Probeの位置の間接光がサンプリングされ、動的なオブジェクトに間接光が適用 されます。

157.

Adaptive Probe Volumes (1/4) APVは指定したボリューム(空間)内に、ライティングの複雑さ に応じて自動でプローブを配置します。これにより、開発者の 手間を大幅に削減しつつ、はるかに正確で自然なライティング を動的オブジェクトに適用できます。  APVを有効化します。Project Settingsより、Graphicsの Default Render Pipelineを選択します。Inspectorから Light Probe Systemを、APVに切替えます。

158.

Adaptive Probe Volumes (2/4)  Lighting SettingsでRealtime Global Illuminationのチェックを外します。  HierarchyでCreate、Light -> Adaptive Probe Volumeで作成します。

159.

Adaptive Probe Volumes (3/4)  追加したAdaprive Probe Volumeを選択し、 Inspectorで設定を行います。  Mode Global ロード中の全てのシーンを結合した範囲を覆います。 Scene シーンに存在するstaticメッシュを全て覆います。 Local 特定の範囲のみ囲ってベイクを行います。より詳細 な、あるいは異なる設定のプローブ配置を行いたい 場合に使用するAPVです。  Lighting SettingsのGenerate Lightingを押すこと でBakeされます。

160.

Adaptive Probe Volumesの確認(4/4)  Debug Draw ModeでRendering Debugerの設定を開き、Probe Volumesの中にあるDisplay Probesをチェックします。

161.

Reflection Probeとは  反射をシミュレートするための機能です。シーン内の特定の地点から周囲360度の景色をキュー ブマップ(6方向のテクスチャ)としてキャプチャし、その画像をメタリック(金属質)やスムース(滑 らか)な表面を持つオブジェクトに映り込ませます。 これにより、リアルタイムで動的に反射を計算するのが難しい環境でも、まるで周囲の景色が本当 に映り込んでいるかのような、非常にリアルな反射表現を低コストで実現できます。Light Probe が光の色や明るさを動的オブジェクトに伝えていたのに対し、Reflection Probeは周囲の景色の 映り込みをオブジェクトに与えるものです。

162.

Reflection Probe(1/6)  HierarchyでCreate、Light -> Reflection Probeで作成します。

163.

Reflection Probe(2/6)  影響範囲をBox Sizeで指定できます。  TypeがBakedの場合、Lighting Settingsの Generate Lightingを押すことでBakeされます。

164.

Reflection Probe(3/6)  鏡面反射するマテリアルを作成し、Game Objectを配置し割り当てます。  Game ObjectをReflection Probeの外に配置すると、キャプチャされた映像は反映されませんが Boxの範囲内に配置するとキャプチャされた映像が反映されます。

165.

Reflection Probeの設定(4/6)  Type Backed 一度だけライティングをベイク(焼き付け)します。 実行時の負荷が最も軽いですが、ゲーム中に動くオ ブジェクトや光源の変化は反射に反映されません。 Realtime リアルタイムでキューブマップを更新します。動く オブジェクトも反射に映り込むため非常にリアルで すが、パフォーマンスへの負荷が最も高くなります。 ※Project SettingsのQualityにある、Realtime Reflection Probesにチェックが必要です。  Refresh Mode TypeがRealtimeの場合に重要になる設定で、キュー ブマップを更新するタイミングを決めます。

166.

Reflection Probeの設定(5/6)  Importance プローブの重要度です。複数のプローブの範囲が重 なっている場合、オブジェクトはよりImportanceの 値が高いプローブの反射を優先的に使用します。  Intensity 反射の強さを調整する乗数です。値を上げると反射が 明るく、はっきりとします。  Box Projection リフレクションプローブは、その中心点で全方位の景 色を撮影し、キューブマップという箱状のテクスチャ に貼り付けたものです。 • プローブの中心で見る場合は。撮影した場所と同じなので、 景色は正しく見えます。 • プローブの中心からずれた場所で見る場合は、箱の角や辺 が本来の位置とは違う角度で見えるため、写真自体が歪ん で見えてしまいます。 これをオンにすると反射の歪みが補正され、特に屋内 のような箱状の空間でより正確な映り込みになります。

167.

Reflection Probeの設定(6/6)  Probe Blendingの有効化 オブジェクトがプローブボックスボリュームに入った ときに、オブジェクト上に突然リフレクションが現れ る状況を回避できます。リフレクションプローブブレ ンディングを有効にすると、反射するオブジェクトが 1 つのボリュームから別のボリュームに移動したとき に、プローブキューブマップが徐々にフェードインお よびフェードアウトします。  Universal Render Pipeline Assetの設定でBox Projectionのチェックをオンにする必要があります。

168.

UnityでAnimationの作成 Animation

169.

Animation作成(1/4)  アニメーションさせるGameObjectを床に置 きます。Gaem Objectが選択された状態。  メニューよりWindow > Animationで Animation Windowを表示します。  Createボタンを押しアニメーションを保存し、 Animation Clipを作成します。  GameObjectを選択した状態で、Add PropartyでTransform.positionを追加します。

170.

Animation作成(2/4)  Doop Sheetの左上の赤丸をオンにし、 Keyframe Recordingモードに変更します。Doop Sheet上 のカレントのフレームを表す線が赤色に変わります。 このモードでGame Objectを動かすと、Doop Sheetの先ほど追加したTransformプロパティ値が 自動的に書き換わります。。

171.

Animation作成(3/4)  1秒後のキーフレームを選択、赤丸の部分をクリック すれば選択できます。  キーフレームが選択された状態で、GameObjectを 前方に進めます。

172.

Animation作成(4/4)  再生ボタン を押して、Animationの確認します。  Curvesを押して、Curve Editorでグラフで 値の変化を確認します。

173.

Curves  直線的な動き  ゆっくりスタート、ゆっくり停止

174.

設定済みのAnimation確認  Animationがついているモデルを選択、 InspectorのAnimationsセクションを開き ます。  Import Animationにチェックを入れ、 Applyを押下します。  設定されているクリップの確認します。  プレビューして動作を見ます。

175.

ステートマシンの作成(1/3)  Projectウィンドウで、Create > Animationで、 Animator Controllerを作ります。  作成したコントローラを開きます。 Any State どの状態からでも好きな状態に遷 移できるステートです。歩き、走 りとかのいかなる状態でも、いき なりプレイヤーが死ぬ場合など、 ここから遷移します。 Entry ステートマシン内での遷移開始時 に使用します。 Exit ステートマシンの終了状態を表す ために使われます。

176.

ステートマシンの作成(2/3)  プロジェクトウィンドウで、モデルの階層を開きます。  AnimationをAnimator Controllerにドラッグしてドロップします。  ステートの上で、右クリックしてMake Transitionしステート間を結んでいきます。

177.

ステートマシンの作成(3/3)  シーンにモデルをドロップします。  モデルのInspectorでAnimatorに作成した Animator Controllerを設定します。 GameObjectに、Animator Controllerをドラッ グアンドドロップすると、Animatorコンポーネン トが追加され、Controllerも設定されます。  実行すると、Idle が終わると Moveと状態に遷移し またIdelに戻るというAnimationが繰り返されます。

178.

新しいステートの作成方法  空(未設定)のステートを追加する場合は、何もない場所で右クリック。Create State -> Emptyを 選択します。

179.

デフォルトステートの変更方法  Play時に無条件で遷移するデフォルトステートを設定できます。 Entryステートの上で右クリックし、Set StateMachine Default Stateを選択し、デフォルトス テートにしたいステートを選択します。オレンジ色の線がデフォルトへの遷移Transitionです。

180.

Transitionの確認  Idle Stateを選択し、Transitionsを確認します。  デフォルトでは、Exit Timeを待って遷移します。 Animationの切り替わりはTransition Durationの時間 をかけて切り替えます。 Transition Durationの間、ブレンド(前後のアニメー ションを合成)して、Animationの切替わりを違和感をな くします。 アニメーションを最後まで再生し てから遷移 Exit Time(0.5秒) 待ってから遷移開 始 Transition Duration かけて遷移 (Idelアニメーションの 30%の時間)

181.

Transition削除  Transitionの遷移もとのStateで、名前を選択してマイナスを押下して削除します。  オレンジ色のTransitionは、デフォルトのTransition先を指し示すものなので消せません。Set Statemachine Default Stateで、EntryからデフォルトのStateへ引き直します。

182.

遷移を制御するパラメータ  Animator Controllerにパラメーターを追加する。Paramatersを選択し+を押し定義するパラメータ の型を選択します。 Walkという名前でBool型のパラメータを定義した例 用語 説明 Float 閾値をもとに遷移、Speedが一定速度に達すると歩くから走るに遷移させるような使い方 Int カウントをもとに遷移、3回チャージすると遷移するような使い方 Bool On/Off条件で遷移、アイテムを保持している状態で遷移するような使い方 Trigger Boolと同じTrue/Falseだが、Trueになり遷移すると自動でFalseにリセットされます。

183.

値の変化によるTransition  TransitionのSettingsで遷移条件のConditionsを指定します。 Walkがtrueになったら Idle -> Moveに遷移する Walkがfalseになったら Move -> Idleに遷移する

184.

Animation Override Controller  Animator Controllerをオーバーライドして、Animator Controllerをリマップすることができま す。  基底のControllerに、作成したAnimator Controllerを選択。別モデルのアニメーションクリップ でオーバーライドします。

185.

Animation Override Controller  Animation Controllerのアイコン、Animation Override Controllerのアイコンは+で表示され ます。Animatorの設定を開けるのはAnimation Controllerの方だけです。

186.

State Machine Behaviour  ステートマシンに入るとき、出るとき、特定のステート内に留まっているときに実行するコードを書く ことができます。ステートに入ったら音を鳴らすとか、ジャンプの時に着地判定するとか、パワーアッ プ中にオーラを出すなどに使えます。

187.

State Machine Behaviour  StateMachineBehaviourを継承して、五つの関数をoverrideして使います。 OnStateEnter : stateに入るときに一回呼ばれます。初期化のためなど OnStateUpdate : 最初と最後のフレームを除いて Update フレームごとに呼び出されます。 OnStateExit : stateが完了する時、ほかのstateに移動するとき一回呼ばれます。 clean upのためなど OnStateMove : root motion(座標移動が含まれるアニメーション)に関するロジックを書く OnStateIK : Inverse Kinematics に関するロジックを書く public class SMBSample : StateMachineBehaviour { // OnStateEnter override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {} // OnStateUpdate override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {} // OnStateExit override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {}

188.

Unity Scripting入門 メソッドの作成

189.

Scriptの基本  C#が利用できます。  GameObjectに張り付けて使います。張り付けた クラスはObject作成時にインスタンス化されます。  イベント関数が規定のタイミングで順次呼び出さ れます。ScriptからはアタッチされたObject (親) が参照できます。 ※gameObject、transformでScriptがアタッ チされたオブジェクトが参照可能です。  Public変数、Serialize Fieldアトリビュートが設 定されている変数は、貼り付け先のInspectorか ら参照できます。

190.

Scriptの作成  メニューのAsset -> Create -> C# Script  Projectウィンドウで右クリックして Create -> C# Script

191.

型、構造体、クラス  数値型(サフィックス) int 符号付き32ビット整数型 long 符号付き64ビット整数型 float 単精度32ビット浮動小数点 double 倍精度64ビット浮動小数点 Vector3 myVector = new Vector3(10.0f, 5.0f, 3.2f); myVector.x = 14.0f; (123l) (10.3f) (0.2d) GameObject myGameObject = GameObject.Find("Hand"); Transform myTransform = myGameObject.transform; myTransform.position = myVector;  文字列型 string  Vector3、Quaternion 3Dでの位置や方向を格納するためのクラスと、回転を表すクラス。  GameObject 全てのエンティティのベースクラス  Transform オブジェクトの位置(position)、回転(rotation)、スケール(scale)を扱うクラス

192.

変数のアクセス識別子 イベント関数 説明 Private 宣言クラス内でしか参照できない。 Public 他のクラスからも参照できます。Inspector上に表示され、Editor上から値を変更できす ようになります。

193.

代表的なイベント関数 イベント関数 説明 Awake() Game起動時、GameObjectが生成されたタイミングで実行されます。GameObjectが無効で も実行されます。 (Awakeのタイミングで有効無効は定まっていません。) OnEnable() AwakeとStartの間で呼ばれるか、無効なオブジェクトが有効になった場合に呼ばれます。 Start() オブジェクトの開始時に1度だけ、最初のフレームのアップデート前に呼び出されます。 Update() フレームごとに一度呼び出されます。 FixedUpdate() 一定のインターバルごとに呼ばれます。デフォルトで2msec. Updateメソッドがフレーム落ちしていても、独立して一定時間ごとに呼び出されるので、物理 演算の結果再現性が保てます。 Reset() Inspectorでリセットされた際に呼ばれます。

194.

簡単なScriptの作成  位置を初期化する。Scriptを作成します。  Objectに割り当て、Inspectorを確認します。 public class CustomMethods : MonoBehaviour { public bool shouldInit = false; // Use this for initialization void Start () { Init(); } // Update is called once per frame void Update () { if(shouldInit) { shouldInit = false; Init(); } }  実際に動かして動作を確認します。 public void Init() { transform.position = Vector3.zero; transform.rotation = Quaternion.identity; transform.localScale = Vector3.one; } }

195.

Vector3  3Dベクトルの位置の表現に使うクラス。Float値を3つ(x ,y, z)保持する。 xyzの値 Static変数 (0,0,0) Vector3.zero = new Vector3(0, 0, 0) = default(Vector3) (0,0,1)/(0,0,-1) Forward/Back (-1,0,0) Right/Left (1,1,1) One (0,1,0)/(0,-1,0) Up/down

196.

Serialize fieldアトリビュート  さきほどの位置を初期化するScriptを変更し ます。public shouldInitをコメントアウト して、publicの代わりに[SerializeField]を 追加した変数を追加します。 public class CustomMethods : MonoBehaviour { // public bool shouldInit = false; [SerializeField] bool shouldInit = false; // Use this for initialization void Start () { Init(); }  このスクリプトを追加したGameObjectを、 インスペクターで確認します。 // Update is called once per frame void Update () { if(shouldInit) { shouldInit = false; Init(); } } ※他のクラスからアクセスさせたくない場合、ア トリビュートで[SerializeField]を指定すれば、 Inspectorで見えるが、他のクラスからはアク セスできないようにできます。 public void Init() { transform.position = Vector3.zero; transform.rotation = Quaternion.identity; transform.localScale = Vector3.one; } }

197.

その他のアトリビュート  [RequireComponent(typeof(Rigidbody))] RigidbodyコンポーネントがGameObjectについてることを強制します。  [SerializeField, Range(0, 5)] int count;  [FormerlySerializedAs(“first”)] public float second; インスペクターから値を割り当てた後に名前を変更すると、値の設定が外れてしまう。 FormerlySerializedAsで前の変数名を指定することで、名前を変更しても値が保持される。

198.

その他のアトリビュート  [SerializeField, TooltipAttribute("説明文")] int count5;  [SerializeField, MultilineAttribute (2)] string message1;

199.

移動距離(等速運動させる)  速度[m/s] × 経過時間 で動かせば等速運動します。  前回のフレームからの経過時間は、Time.deltatime[s]を使います。 public class Speed : MonoBehaviour { float speed = 5; // 5[m/s] // Update is called once per frame void Update () { // 1秒経過していたら5[m/s] * 1[s] = 5m進む float distance = speed * Time.deltaTime; // 前方に移動する場合 (1, 0 ,0) * 5 = (5, 0, 0) Vector3 pos = Vector3.forward * distance; } }

200.

移動方向  単位ベクトル(長さが1になるベクトル)で移動方向を示します。2Dも3Dも同じです。  単位ベクトルに移動距離をかけると、各軸での移動量がわかります。 (1/√2, 1/√2)の向きに3mすすむ = (1/√2, 1/√2) × 3m = (3/√2, 3/√2) 現在位置から(3/√2, 3/√2)進むということになります。 (1/√2, 1/√2) 1 1 (1, 0)

201.

移動:Translate  public void Translate (float x, float y, float z);  public void Translate (float x, float y, float z, Space relativeTo= Space.Self or Space.World); Transform をの x軸に沿って x、 y 軸に沿って y、z 軸に沿って z、現在のポジションから”相対位 置”に移動させます。デフォオルトはローカル座標が使われます。 前に1m進める場合。 Transform.Translate(0, 0, 1);

202.

移動: Movetowards  public static Vector3 MoveTowards (Vector3 current, Vector3 target, float maxDistanceDelta); 現在の位置 current から target に向けて指定距離を移動します。 Vector3 current Vector3 target maxDistanceDelta

203.

LERP関数  public static float Lerp (float a, float b, float t); a と b の間で t による線形補間します。パラメーター t は [0, 1] の範囲で制限されます。 Vector3.Lerp(pos1, pos2, t) Lerp(線形補間) Vector3 pos1 Vector3 pos2 Slerp(球面線形補間) t : 0~1 Vector3.Slerp(pos1, pos2, t)

204.
[beta]
MathF.Pingpong
 0~lengthの値を往復する値を返す関数です。明滅や、左右(上下)に移動する床などに利用できます。
 public static float PingPong (float t, float length);

public class PingPong : MonoBehaviour {
Light myLight;
void Start()
{
myLight = GetComponent<Light>();
}
void Update()
{
myLight.intensity = Mathf.PingPong(Time.time, 8);
}
}

205.

RANDOM関数の使い方  乱数を使う際にUnityではInitStateというメソッドを使って初期化します。  Unityの乱数は完全にランダムな数値ではなくシード値を元に決められた数値を作り出す仕組みと なっています。数値を固定にすることで毎回同じ乱数の値を作り出すことが可能となります。 Random.InitState(435);  Valueで0~1の浮動小数点のランダムな値が取得できます。 int damege = (int)(Random.value * 1000.0f);

206.

Bounds  バウンディングボックスを定義する構造体。 Bounds bounds = new Bounds(new Vector3(0, 0, 0), new Vector3(1, 2, 1)); Bounds bounds = new Bounds(boxCollider.center, boxCollider.size); メソッド 機能 ClosestPoint 設定した point が、バウンディングボックスからはみ出た場合に、ボックスに収まる値で返してくれ ます。 Contains 設定した point が、バウンディングボックスに含まれているか確認します。 Expand 設定した amount によって size を大きくします。 IntersectRay ray が交差しているか確認します。 Intersects 他のバウンズが設定したバウンズと交差しているか確認します。

207.

Destroy  public static void Destroy(Object obj, float t = 0.0F); ゲームオブジェクト、コンポーネントを破棄します。 Destroy は常に遅延します (ただし、同じフレー ム内で実行されます)。 パラメータ 説明 obj 破棄するオブジェクト、コンポーネントを指定します。 t 破棄するまでの時間を指定します。 // 子オブジェクトをループして取得 foreach ( Transform child in this.transform ) { // 一つずつ破棄する Destroy(child.gameObject); }  public static void DestroyImmediate ( Object obj , bool allowDestroyingAssets = false); オブジェクトobjを即座に破棄します。代わりに Destroy を使用することを強くお勧めします。この関 数はエディター コードを記述する場合にのみ使用してください。

208.

Transform  Transform オブジェクトの位置、回転、スケールを扱うクラスです。 メソッド 機能 LookAt 対象の Transform を設定し、その方向へと向かせます。 SetParent Transform の親を設定します。 SetPositionAndRotation ワールド座標の位置と回転をトランスフォームコンポーネントで設定します。 SetAsFirstSibling Transformを子要素のうち先頭になるよう移動します。 SetAsLastSibling Transformを子要素のうち最後尾になるよう移動します。 SetSiblingIndex 指定のインデックスに Transform を移動させます。 GetSiblingIndex 現在の Transform のインデックスを取得します。

209.

Coroutineとは  処理を途中で中断し、後で再開できる関数のことです。 通常のC#の関数は、一度呼び出されると最後まで処理を実行し終えないと、呼び出し元に戻るこ とはありません。しかしコルーチンは、処理の途中で一時停止しUnity本体に処理の制御を一旦戻 すことができます。そして、指定した条件(例えば「1秒経過後」や「次のフレーム」など)が満 たされると、先ほど中断したまさにその場所から処理を再開できます。 1. 関数の戻り値の型を IEnumerator にします。 2. 処理を中断したい場所で yield return という命令を書きます。 yield return new WaitForEndOfFrame(); 次のフレームに再開します。 yield return new WaitForSeconds(秒数); 指定秒数後に再開します。 yield return new WaitUntil(再開条件); 再開条件に指定した関数がtrueを返すと再開します。 yield return new WaitWhile(待機条件); 待機条件にした関数がfalseを返すと再開します。 yield break; 関数は再開されずにそこで終わります。 yield return StartCoroutine(); 別のコルーチンを新たに実行しそれが終わるまで中断します。 yield return 一部非同期オブジェクト; 3. StartCoroutine() メソッドでコルーチンを開始します。

210.

Coroutine(1/2)  IEnumratorを戻り値でメソッドを作成します。 (System.Collections) using System.Collections; using System.Collections.Generic; using UnityEngine;  yield returnで一旦処理を戻すことができます。 public class CoroutineSample : MonoBehaviour { // Use this for initialization void Start () { StartCoroutine("testRoutine"); } レスポンスが返るまで、呼びもとに処理を戻します。 終了処理中は、少しづつ画面を暗くするなど・・・ // Update is called once per frame void Update () { Debug.Log("Tick"); } IEnumerator testRoutine() { Debug.Log("Start"); yield return null; Debug.Log("One frame Skipped."); yield return new WaitForSeconds(.1f); Debug.Log("End"); } }

211.

Coroutine(2/2)  一時停止は、StopCoroutine。コルーチンに終了通 知は行きません。  Coroutine側で処理の中止はyield break; public class CoroutineSample : MonoBehaviour { IEnumerator myEnumrator; public bool flag; // Use this for initialization void Start () { myEnumrator = testRoutine(); } Updateの中でCoroutineを呼ぶ場合には注意。増殖 します。 // Update is called once per frame void Update () { if (flag) { StartCoroutine(myEnumrator); } else { StopCoroutine(myEnumrator); } } IEnumerator testRoutine() { Debug.Log("Start"); yield return null; Debug.Log("End"); } }

212.

インプット ユーザーからの入力を受け取る

213.

INPUTクラス(GETKEY) キーボードからの入力 • Input.GetKey // 列挙型 if (Input.GetKey(KeyCode.Space)){ Debug.Log(“Spaceキーを押した”); } // 文字列 if (Input.GetKey("Space")){ Debug.Log("Spaceキーを押した"); } if (Input.GetKeyDown("Space")){ Debug.Log("Spaceキーを押した"); } if (Input.GetKeyUp("Space")){ Debug.Log("Spaceキーを離した"); }

214.

INPUTクラス(GetButton) インプットマネジャーで管理された入力 • Input.GetButton if (Input.GetButton("Jump")){ Debug.Log("Jumpに対応するキーを押した"); }

215.

INPUTクラス(GetAxis) 方向キーの入力 • Input.GetAxis()は、入力された軸に補正をかけて、-1~1の範囲をfloat型で返します。 • Input.GetAxisRaw()は、入力された軸に補正をかけず、-1か0か1でをfloat型で返します。 float h = Input.GetAxis("Horizontal"); Debug.Log(h); float v = Input.GetAxis("Vertical"); Debug.Log(v);

216.

INPUTクラス(GetMouseButton) マウスボタンの入力 • Input.GetMouseButton if (Input.GetMouseButton(0)) { Debug.Log("左クリック"); } if (Input.GetMouseButton(1)) { Debug.Log("右クリック"); } if (Input.GetMouseButton(2)) { Debug.Log("中クリック"); }

217.

INPUTクラス(GetTouch) スマホなどのモバイルからの入力 • Input.GetTouch // タッチされているかチェック if (Input.touchCount > 0) { // タッチ情報の取得 Touch touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { Debug.Log("押した瞬間"); } if (touch.phase == TouchPhase.Ended) { Debug.Log("離した瞬間"); } if (touch.phase == TouchPhase.Moved) { Debug.Log("押しっぱなし"); } }

218.

Navigation Mesh 歩行可能面の設定

219.

NavMeshとは  地形からキャラクター(Agent)が歩行可能な地図を作成する機能。Nav MeshをBakeすることで 地図が作成されます。  Nav Meshの独自の座標系が使われる、地面への設置もNav Meshがやってくれるため、Rigid Bodyとの併用は面倒です。

220.

NavMesh  HierarchyでCreate、 AI -> NavMesh Surfaceで作成します。NavMesh SurfaceはAgent typeごとに作成するため複数作成することが可能です。

221.

NavMesh Surface 歩ける領域を定義するためのコンポーネント  Agent Type どのエージェントタイプの歩ける領域を定義する 設定します。  Collect Objects 地形として利用するオブジェクトを指定します。 • All Game Objects シーンの全GameObjectを対象 • Volume • Current Object Hierarchy NavMesh Surfaceの階層の下にぶら下がるものを対象  Include Layers 対象とするレイヤーを指定できます。

222.

NavMeshのベイク  NavMesh SurfaceコンポーネントのBakeボタンを押下しNav Meshをベイクします。

223.

NavMeshの情報表示  NavMesh 関連の情報を可視化するには、Overlay MenuよりAI Navigationを選択します。

224.

NavMesh Agent  BakeされたNavMesh上を移動するためのAgentです。  NPCのキャラクター付けたり、Playerに非アクティブで付与しておき、オートモード時に有効化 させたりして利用します。 NPC:ノンプレイヤーキャラクター、人が操作しないコンピューターに制御されるキャラクター 224

225.

NavMesh Agentの設定  Speed 歩行速度(単位: メートル/秒)  Angular Speed 旋回速度(単位: 度/秒)  Acceleration 静止状態からの加速度(単位: メートル/秒 の2乗)  Stopping Distance ターゲットに追いついた際に減速や停止を 行う距離の設定。  Auto Breaking 目的地点の到着時にエージェントの移動速 度が減速します。

226.

NavMesh Agentの設定  Obstacle Avoidance(障害物回避) Nav Mesh Obstacle(障害物)や NavMesh Agentに対する回避の設定。  Radius エージェントの半径、障害物や他の エージェント間の衝突の計算に使用さ れます。  Height エージェントの高さ、頭上にある障害 物の下を通り抜ける計算に使用されま す。  Quality エージェント同士の衝突を厳密にみる かどうかの設定。  Priority エージェントは、この数値より低いエー ジェントを無視して回避します。

227.

NavMesh Agentの設定  Path Finding(経路の探索)  Auto Traverse OffMesh Link OffMesh Link(2つ以上のMeshをつな げる)を自動で越えるようにしたい場合 はオンにします。  Auto Repath 有効になっていると、エージェントは部 分的な経路の終了地点へ到達した際に、 再度経路の探索を行います。  Area Mask 経路を探索する際にどのナビゲーション エリアとコストを確認するかを設定しま す。

228.

NavMesh Agentの設定 Window -> AI -> Navigation  Agent Radius エージェントの中心が壁などにどの程度近 づけるか設定できます。  Agent Height エージェントの手が届く高さです。  Max Slope エージェントが登れる斜面の角度です。  Step Height エージェントが登ることができる障害物の 高さです。

229.

オフメッシュリンク  オフメッシュリンクは地続きでない場所を移動したり、高い所から下りたりするような位置を繋ぐ 機能です。

230.
[beta]
Targetを指定する
AgentをTargetに向けて移動させる。
 SetDestinationでどこに向かうかを指定します。
 Stopping Distanceでゴールの手前で止まるように指
定します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Navigation : MonoBehaviour {
[SerializeField] Transform target;
[SerializeField] NavMeshAgent agent;
void Reset () {
agent = GetComponent<NavMeshAgent>();
}
void Start() {
agent.SetDestination(target.position);
}
}

231.
[beta]
Targetを指定する
Targetが動いても追いかけるようにDestinationを更
新する。
 Update Delayの間隔で、SetDestinationを更新す
るように修正します。
public class Navigation : MonoBehaviour {
[SerializeField] Transform target;
[SerializeField] NavMeshAgent agent;
[SerializeField] float updateDelay = .3f;
void Reset () {
agent = GetComponent<NavMeshAgent>();
}
void Start () {
// 設定した時間ごとに呼び出し
InvokeRepeating("FollowTarget", 0f, updateDelay);
}
void FollowTarget()
{
agent.SetDestination(target.position);
}
}

232.

Obstacle(障害物)  動的に生成する障害物でたまにしか動かないコン ポーネントには、Nav Mesh Obstacleを追加し ます。  Shape Capsule、Boxの形状  Carve(Nav Meshに反映されます。) • Move Threshold 動いている障害物が反映される距離の閾値です。 • Time to Stationary 障害物が静止物として扱われるまでの待ち時間 です。 • Carve Only Stationary 有効になっていると、障害物は静止時にのみ穴 をつくります。

233.

Particle / VFX ゲーム内のエフェクト

234.

パーティクルとは  運動する粒子により構成される事象を表現するために使われます。  模擬される事象の例としては、炎、爆発、煙、流水、火花、落葉、雲、霧、雪、埃、流星、毛髪、 毛皮、草地、あるいは光跡や呪文の視覚効果などです。

235.

エフェクトアーティストの役割  ビジュアルイフェクトの設計と作成  効果の追加、ムード作りをサポート  アニメーター、ゲームデザイナー、ステージデザイナとの連携  リアルタイムシミュレーションのための最適化  役割の専門性  衣服のシミュレーション  髪のシミュレーション  Particle System  ポストエフェクト(レンダリング後の絵に与える効果)およびシネマトグラフィ(映画の撮影技術)

236.

Unityにおけるビジュアルイフェクト  Unityにおけるビジュアルエフェクト制作には、主に2つの強力なツール、「Particle System(Shuriken)」と「VFX Graph」が存在します。これらは似た目的を持ちながら、その仕 組みと得意なことが大きく異なります。

237.

Particle Systemとは  手軽で堅実な従来型ツール「Particle System」とは、Unityに標準で組み込まれている従来のエ フェクト作成機能のことで、開発者からはその開発コードネーム「Shuriken」の名で親しまれて います。これはCPUベースで動作するシステムで、インスペクター上で様々なモジュール(設定項 目)を調整してエフェクトを構築します。 • CPUベースの動作 パーティクル一つひとつの生成、動き、色の変化などをCPUが計算します。そのため、何万も のパーティクルを同時に扱うような非常に大規模なエフェクトには向きませんが、数千個程度 までなら軽快に動作します。 • コンポーネントベースの直感的な設定 コードを書く必要はなく、インスペクター上で各モジュールのチェックボックスをオンにし、 数値を調整するだけでエフェクトを構築できます。 • 幅広い互換性 標準のレンダリングパイプラインはもちろん、URPやHDRPでも動作します。特にモバイル ゲームなど、スペックが限られる環境や、古いデバイスへの対応が必要な場合に非常に頼りに なります。

238.

Particle Systemを作る  Hierarchy ウィンドウで右クリック、 EffectsのParticle Systemを選択します。  Z軸方向に吹き出していることを確認します。  言葉の定義  Perticle System : 1インスタンスを指す  Perticle Effect : 煙、炎などの複数のPerticle Systemの 集合体

239.

Particleのパラメーター  基本的なパラメーター 値は固定値、Curveや乱数範囲を設定可能です。 パラメーター 概要 Duration 放出の継続時間 Looping 放出が繰り返される Start Lifetime Particleの寿命(秒) Start Speed Particleの移動速度 Start Size Particleの大きさ Start Color Particleの色、Gradientを指定可能 Gravity Modifier 重力の影響度

240.

Particleのパラメーター  基本的なパラメーター パラメーター 概要 Play on Awake Partice System開始時にParticleの放出を開始するかどうか Simulation Space Emitterを動かした際に、発生済みのParticleが追従するかどう か。 Worldは、ParticleはEmitterの移動に引きづられません。 Localだと発生済みのParticleも一緒に動きます。

241.

Emmisionのパラメーター  Emmisionモジュールのパラメーター パラメーター 概要 Rate over Time 1秒間あたりのパーティクル発生数 Rate over Distance Emitterが1m移動する毎に発生するパーティクル発生数 を設定します。 Bursts 一定のタイミングで放出するParticleのかたまりを設定で きます。

242.

Shapeのパラメーター  Shapeモジュールのパラメーター パラメーター 概要 Shape Particle放出のジオメトリ(形状)を設定します。 Angle(Cone) 放出角度 Radius(Cone) 放出もとの半径 Emit From(Cone) 放出もとの場所 Cone :Base(底面) 、Volume(Radius × Angle × Length)の内側 Box :Edge(外面の辺)、Shell(外面)、Volume(体積全体)

243.

その他のモジュール  個々のParticleのLifetime単位の設定 モジュール 概要 Velocity over Lifetime 個々のParticleのLifetime内での速度 Limit Velocity over Lifetime Particleの速度が制限を超えた場合にスローダウンさせる。 特定の軸にだけ制限をかけることもできます。 Dampen 減速係数 Inherent Velocity Emitterの速度を引き継ぐ Force over Lifetime Lifetime内での力の量をきめます Color over Lifetime Lifetime経過に応じた個々のParticleの色の変化

244.

その他のモジュール  個々のParticleのLifetime単位の設定 モジュール 概要 Color by Speed 速度に応じて色を変えれます Size over Lifetime 個々のParticleのLifetime内での大きさの変化 Size by Speed 速度に応じて大きさを変えれます Rotation over Lifetime 個々のParticleのLifetime内での回転 Rotation by Speed 速度に応じて回転を変えれます External Force 風などの外的な力の影響を受けるかどうか

245.

その他のモジュール  個々のParticleのLifetime単位の設定 モジュール 概要 Collision 他のオブジェクトと衝突するかどうか Plane 特定の平面との衝突 World すべてのオブジェクトが対象 Sub Emitters Particle発生時、衝突時、消滅時などのイベントのタイミ ングで、別のEmitterを追加することができる Texture Sheet Animation Texture Sheet Animation(パラパラ漫画)をParticleに適 用することができる

246.

その他のモジュール  個々のParticleのLifetime単位の設定 モジュール 概要 Renderer 描画モード、描画素材、描画順、影の有無などを設定

247.

Particleのパラメータを試す  Start Colorで、Gradientを選択。開始時の色を白、徐々に赤色に代わるように設定します。

248.

Particleのパラメータを試す  Color over Lifetimeで、Gradientを選択。開始時の色を白、徐々に赤色に代わるように設定しま す。  Start Colorとの設定との違いは?

249.

Particleのパラメータを試す  EmissionのRate over Timeに50を設定  Simulation SpaceをWorldに、Emission のRate over Timeに0を設定、 Rate over Distanceに50を設定、Particle Systemを 動かします。

250.

VFX Graphとは  VFX Graph (Visual Effect Graph)は、GPUの能力を最大限に活用することで、数百万もの パーティクル(粒子)をリアルタイムでシミュレーションし、描画することが可能です。 • ノードベースの直感的な制作 プログラミングコードを書くことなく、ノードと呼ばれる機能のブロックを線で繋いでいくこと で、視覚的にエフェクトを構築できます。これにより、アーティストやデザイナーも複雑なVFX を直感的に作成することが可能です。 • GPUアクセラレーション 従来のCPUベースのパーティクルシステム(Shuriken)と比較して、膨大な数のパーティクルを 遥かに高いパフォーマンスで処理できます。これにより、従来は実現が難しかった大規模でリッ チな表現が可能になります。

251.

VFXの構成  Visual Effect Asset VFX Graphで作成したエフェクトそのものの設計図やデータ本体です。VFX Graphエディタで ノードを組んで作成した、パーティクルの発生条件、動き、色、形といったエフェクトのロジック と設定のすべてを保存しています。このアセットファイル自体は、プロジェクトのProjectウィン ドウ内に格納されるデータであり、単体ではシーンに表示されません。設計図に相当します。  Visual Effectコンポーネント 作成したVisual Effect Assetをゲームシーン内に実際に配置し、再生・制御するための実行装置 です。シーン内のGameObjectにアタッチして使用します。どのVisual Effect Asset(設計図)を 再生するかを指定します。エフェクトの再生、一時停止、停止といったライフサイクルを管理しま す。エフェクトの初期位置、角度、スケールなどを、アタッチされたゲームオブジェクトの Transform(位置情報)と連動させます。

252.

VFXのインストール  VFX Graphのインストール Package ManagerでVisual Effect Graphをインストールします。

253.

VFXアセットの作成  Projectウィンドウで右クリックし、Create -> Visual Effects -> Visual Effect Graphで作成 します。Templateを選択しCreateを押下します。  作成されたVFXアセットを開きます、4つのコンテキストノードで構成されています。

254.

VFXアセットのコンテキストノード  Spawn パーティクルをいつ、どれだけの量、発生させる かを決定します。パーティクルの生成タイミング とレート(頻度)を制御します。  Initialize Particles Spawnで生まれたパーティクルに、初期状態と してどのような特性を持たせるかを設定する場所 です。パーティクルの寿命、初期位置、初速、初 期色、初期サイズなど、基本的な属性を定義しま す。  Update Particles パーティクルが寿命を迎えるまでの間、毎フレー ムどのように振る舞い、変化していくかを定義す る場所です。時間の経過と共にパーティクルの位 置、向き、色、サイズなどを変化させます。  Output Particle 最終的にどのような形状と見た目で画面にレンダ リングするかを決定します。パーティクル一つひ とつを具体的な形(板ポリゴン、メッシュなど)に 変換し、マテリアル(テクスチャやシェーダー)を 割り当てて描画します。

255.

Spawnコンテキストノード  Constant Spawn Rate 1秒間に100個のように、継続的かつ一定のペースでパーティクルを生成し続けます。火の粉や煙、雨 など、持続的に発生するエフェクトの基本です。  Single Burst 一度に500個のように、指定した数のパーティクルを一瞬でまとめて生成します。爆発や魔法の発動 時など、瞬間的なエフェクトに使われます。  GPU Event 他のVFX Graphから送られてくる信号(イベント)をきっかけにパーティクルを生成します。例えば、 メインの爆発エフェクトが終わった瞬間に、小さな火花エフェクトを発生させるといった連携が可能で す。

256.

Initialize Particlesコンテキストノード  Set Lifetime パーティクルの寿命(何秒間存在するか)を設定します。ランダムな値にすることで、各パーティクルの 消えるタイミングをずらし、自然な見た目にすることができます。  Set Position パーティクルの発生位置を決めます。球体や円盤、線の形に沿って発生させるなど、様々な形状を指定 できます。  Set Velocity パーティクルの初速を設定します。例えば、Add Velocity from Directionを使えば、特定方向に飛び 出す動きを作れます。  Set Color / Set Size パーティクルの初期の色やサイズを決めます。

257.

Update Particlesコンテキストノード  Gravity パーティクルに重力を加え、放物線を描いて落下させます。  Turbulence 乱気流を加え、煙や炎のように予測不能で有機的な動きを表現します。  Conform to Sphere / Conform to Plane 球体や平面に沿ってパーティクルを動かしたり、衝突させたりします。  Set Color over Life / Set Size over Life 寿命(Life)に応じて色やサイズを変化させます。例えば、生まれた時は白く、徐々に赤くなり、最後は 黒くなって消える、といった色の変化をカーブで直感的に設定できます。  Collide with... Collide with PlaneやCollide with Depthを使い、床や他のオブジェクトと衝突する物理的な挙動を シミュレートします。

258.

Output Particleコンテキストノード  Output Particle Quad 最も一般的な出力で、パーティクルをカメラに常に向く四角い板ポリゴン(Quad)として描画します。 テクスチャを貼り付けたり、フリップブック機能でアニメーションさせたりできます。  Output Particle Mesh パーティクルを任意の3Dメッシュ(モデル)として描画します。火の玉の代わりに、燃えながら飛び散 る岩の破片などを表現できます。  Output Particle Lit Quad / Output Particle Lit Mesh URPのライティングシステムの影響を受けるパーティクルを描画します。シーン内の光源によって照 らされたり、影を落としたりすることが可能です。

259.

Simple Loop Template Simple Loop Templateを作成し中身を確認 していきます。

260.

Simple Loop Template  Constant Spawn Rateブロック Rateに入力されている 64個/秒 Spawnイ ベントが発行されています。

261.

Simple Loop Template  Set LifeTime Random Uniformブロック 指定した最小値(A)と最大値(B)の範囲内で、 各パーティクルにランダムな寿命(秒数)を 割り当てます。  Set Position Shapeブロック パーティクルの初期位置を、指定した形状 (Shape)の表面または内部にランダムに配 置します。Sphere(球)のSurface(表面)か らランダムの位置から発生させます。  Set Velocity from Direction & Speedブ ロック パーティクルに特定の方向と速さを持った 初速を与えるために使用します。Y方向へ 4.8~7.5m/secの初速を与えます。

262.

Simple Loop Template  Gravityブロック パーティクルに一定方向の重力をシミュ レートして適用します。 Forceに重力のか かる方向と強さを設定します。Y軸方向に9.81は地球の重力をシミュレートする値で 重力で下に落ちる設定です。  Liner Dragブロック パーティクルの動きに対して空気抵抗や水 中での抵抗のような力をシミュレートしま す。 Use Particle Sizeは抵抗がパーティ クルサイズに影響するかどうかの設定です。 Drag Coefficientは抵抗の強さを表します。

263.

Simple Loop Template  Orientブロック パーティクル(特に板ポリゴン/Quad)の向 きを特定のベクトルに揃えるために使用し ます。Face Camera Planeは、カメラの 方向を向く設定です。  Size Over Lifeブロック パーティクルの寿命(Life)に応じて、大きさ を変化させるためのブロックです。パー ティクルが生まれてから(Life = 0)消えるま で(Life = 1)の間に、サイズがどのように変 化するかCurveで設定します。  Set Color Over Lifeブロック パーティクルの寿命(Life)に応じて、その色 (Color)を変化させるためのブロックです。 パーティクルが生まれてから(Life = 0)消え るまで(Life = 1)の間に、色がどのように変 化するかをカラーグラデーションで設定し ます。

264.

Audio ゲーム内のエフェクト

265.

Audioの基本  Unityでの音源に関する核となるObjectとComponentは3種類 メディア スピーカーからの音を聞く耳 メディアを再生するスピーカー ※Audio Listenerは、Sceneにひとつ。通常はカメラに付属している

266.

Audio Clip  Audio ClipのImport設定 プロパティ 概要 Force to Mono デフォルトでステレオでImportされる。モノラルで取り込みたい場 合にチェックします。 Normalize 左右のトラックのボリュームを均一にします。 Load in Background デフォルトではScene読込時にロードされる。Scene開始が間延び しないように、Backgroundで読込を行う場合にチェック。再生時 にまだ読み込まれていない場合があるので注意します。

267.

Audio Clip  Audio ClipのImport設定 プロパティ 概要 Compress Format プラットフォームとロードするオーディオクリップにより異なる。 Ogg Vorbisなど圧縮形式によっては品質設定のスライダが使え品質と ファイルサイズのバランスを調整できます。 Sampling Rate Data サンプリングレートの設定

268.

Audio Clip  Audio ClipのImport設定 プロパティ 概要 Preload Audio Data プロジェクト開始時にすべてのAudioデータを読み込む場 合。 任意のタイミングで読みださせたい場合は、 AudioSource.LoadAudioDataを使う。 LoadType Decompress on Load メモリに非圧縮で読込。小さなオーディオソースの場合は、 非圧縮でも構わない。 Compressed in Memory メモリに圧縮で読込。大きなオーディオソースの場合には 圧縮します。 Streaming ロードしながら再生、再生までのタイムラグが長くなる。 メモリ消費量はかなり低い。

269.

Audio Clip  Audio ClipのImport情報  Preview情報、再生して確かめることができる

270.

Unity サポート形式  サウンド 形式 MPEG layer 3 拡張子 .mp3 Ogg Vorbis .ogg WAV .wav AIFF .aiff / .aif Ultimate Soundtracker モジュール .mod Impulse Tracker モジュール .it Scream Tracker モジュール .s3m FastTracker 2 モジュール .xm

271.

Audio Sourceの設定 プロパティ 概要 Audio Resource 再生したいAudio Clipを選択 Mute チェックが入るとボリュームが0になる。 Bypass Listener Effect Audio Listenerに適用されるListener Effectを無効化します。 Bypass Reverb Zones Reverb Zoneを無効化します。 Play on Awake GameObject開始時にAudioが再生される。 Loop 再生がリピートされる。

272.

Audio Sourceの設定 プロパティ 概要 Priority 複数の同時発声する場合に、低いものは聞こえなくなったり、途切れる。 Audio Chanel数に依存します。 Volume Audio Clipの再生ボリューム Pitch 再生速度の調整 Stereo Pan 左右のボリュームの調整

273.

Audio Sourceの設定 プロパティ 概要 Spatial Blend 右に行くと3D(SourceとListenerの距離や向きの影響を受ける)、左に 行くと2Dサウンドとなる。 Reverb Zone Mix どの程度Reverb Zoneの影響を受けるか設定。 ※2Dサウンドは位置関係で音量が変化しない、一定の音量で再生されAudio SourceとAudio Listnerの距離の影響を受けない。

274.

Audio Sourceの設定 プロパティ 3D Sound Settings 概要 Doppler Level ドップラー効果の度合いを設定 Spread 距離に対する角度 Volume Rolloff 距離によるボリュームの変化を設定 Min Distance Volume Rolloffの下限、これ以下の距離は聞こえない。 Max Distance Volume Rolloffの上限、これ以上の距離は聞こえない。

275.

Audio Source SourceとListenerの 距離がPlay時に確認で きます。

276.

Audio Source  Playせずにオーディオ再生を確認する方法、Sceneビューのオーディオボタンを押します。  Play on Awakeの音源だけ再生されます。  この状態で、ListenerはScene上のカメラ(現時点の視点)となる。ウォークスルーモードで移動し て、距離による変化を確認します。

277.

オーディオソース Script 機能 メソッド 機能 再生 Play BGM再生します。 (重ねて再生×) PlayOneShot SE再生します。 (重ねて再生〇) UnPause 一時停止を解除します。 Stop 再度再生すると最初からの再生になります。 Pause 一時停止します。 停止 [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip AudioClipBGM; [SerializeField] private AudioClip AudioClipSE; void Start() { // 同時になる可能性のある効果音 audioSource.PlayOneShot(audioClipSE); } // 同時にならないBGM audioSource.clip = AudioClipBGM; audioSource.Play();

278.

Audio Mixer  Project Viewウィンドウで、Asset > Audio配下にAudio Mixerを作成し、名前をSamplAudioMixer とします。  SamplAudioMixerをダブルクリックしてMixerの設定を開きます。  グループの横の+を押しグループを追加し、名前をScene Audioとします。

279.

Audio Mixer  HierarchyウィンドウのAudio Sourceを選択し、InspectorでOutputにScene Audioを選択し ます。

280.

Audio Mixer  Group単位のボリューム調整は、 Attenuationフェーダーで調整します。  Groupの表示と非表示をViewとして定義 できます。Viewsの+を押下し、新しい Viewを作成します。Scene Audioを目の アイコンを消し不可視に設定するViewを 選択することでMixerのグループ表示を切 り替えることができます。

281.

実行中に音量調整  実行中に音量調整(Play中にAudio Mixerの編集)したい場合は、Edit in Playmodeを押下します。

282.

Snap Shotsの設定  Snapshotsの+ボタンを押下し、Snapshotごとにボリュームの設定を保存することが可能です。

283.

Audio Effect  Audio Sourceと同じGameObjectにAudio Effectを追加することで、Effectが適用されます。 Sound Emitterを選択し、Audio Low Pass Filterを追加します。  Playして、 Low Pass FilterのCut Off Frequencyのスライダーを動かし、動作を確認します。

284.

Audio Effect  もうひとつのAudio Effectを適用する方法 は、Audio MixerのGroupにEffectを追加 する方法です。  MixersのSampleAudioMixerを選択し、 BGMグループのAddを押下します。Echo を選択します。  Playして、Edit in Playmodeを押下し Delayを変更し変化を確認します。  Echoを削除、Echoを選択し右クリックし Removeを選択します。

285.

いろいろなAudio Effect 種類 効果 Duck Volume Sendされた音をReceiveで受け取り、音量を操作します。 Lowpass 高周波をカットし、こもったような音を出せる。 Highpass 低周波をカット出来る。 Echo エコー、つまりやまびこ効果を付けられる。 Flange 音を波打たせるような効果を得られる。 Distortion 音量を増幅し、硬い感じにします。 Normalize 音を正規化して一定に安定させる。 ParamEQ 特定のHz帯を減衰あるいは増幅出来る。 Pitch Shifter ピッチを変更し、甲高い音や鈍い音にしたり出来る。 Chorus Flange に似ているが、より滑らかで大きく波打つ感じ。 Compressor Normalize に似ているが、大きな音と小さな音を平坦に近づける。 SFX Reverb リバーブを付け、広い講堂や洞窟にいるような音になる。

286.

Audio Reverb Zone • 残響効果を与える領域を設定することができます。GameObjectにAudio Reverb Zoneコンポー ネントを追加すると、残響効果が発生するゾーンが表示されます。その中に、Audio Listenerが 入ると残響効果がかかります。残響効果にはプリセットで、お風呂や洞窟などが用意されています。

287.

Ducking(Duck Volume)  Duck Volumeは、音声再生時に他の音量(例えば会話時にBGM)を絞るための仕組みです。  Audio MixerでMusicグループのAddを押下、Duck Volumeを追加します。 (Inspectorには、No Send sources connectedと表示される。)

288.

Ducking(Duck Volume)  Audio MixerでVOICEグループのAddを押下、Sendを追加します。他のGroupに音を送ること ができます。  SendをInspectorで確認。ReceiveにBGM/Duck Volumeを選択するSend levelを0.00dBとし、 全音量を送るように設定します。

289.

Ducking(Duck Volume)  Playして、Mixerの出力をみながら、VOICEに音がながれた際にBGMの音量が少し絞られること を確認します。  よりBGMを絞りこみたい場合はThresholdを下げます。

290.

UI インターフェース設計

291.

UI  Text、Imageなどのビジュアルコンポーネントや、ButtonやSliderなどのインタラクションコン ポーネントが用意されています。

292.

Canvas  UI要素(ボタン、テキスト、画像など)を配置し、描画するための土台となるコンポーネントです。 シーン内に存在するすべてのUI要素は、必ずこのCanvasの子オブジェクトとして配置される必要 があります。

293.

Canvasの設定 プロパティ Render Mode 意味 Screen Space – Overlay デバイスの画面いっぱいに重ねあわされ表示さ れる。画面の解像度が変更された場合、 Canvas は画面にマッチするよう自動的にサイ ズが変更される(平行投影) Screen Space – Camera 指定した距離の Camera の前に配置されます World Space World Spaceに3Dオブジェクトのひとつとし て配置するRect Transformが有効になる

294.

Canvasの設定  Canvas 内の UI 要素の全体的なスケールとピクセル密度を制御するために使用されます。 プロパティ UI Scaler Mode 意味 Constant Pixel Size UI 要素をスクリーンサイズによらずピクセル 単位でサイズを固定します。 Scale With Screen Size 画面サイズが大きいほどに、UI 要素を大きく します。 Constant Physical Size UI 要素をスクリーンサイズや解像度によらず、 物理的に同じサイズに保ちます。

295.

Rect Transform  Canvasを選択した状態で。Menuから、 GameObject > UI > Buttonを作成します。  Anchor Presetsから、左上をAnchorに設定します。 画面サイズが変わっても、Anchorからの相対位置を 維持するようにUIが配置されます。

296.

Rect Transform  Anchor Presetsから、左右にAnchorを設 定すると、左右の画面端までの距離を維持し ようとするので、横に引き伸ばされます。 Game ViewウィンドウでAspect比を変換 して確認できます。

297.

Rect Transform  Anchor の4つ葉をScene上で選択すると自由にアンカー位置を設定することができます。特定の 領域(親のObject) に合わせて拡大する際などに詳細に調整できます。  回転時のPivotをPivotプロパティで設定できます。

298.

CANVASのレンダーモード https://light11.hatenadiary.com/entry/2019/04/15/232416  Screen Space – Overlay カメラに関係なく、スクリーンに直接描画されるため、必ず前面に出るUIになります。

299.

CANVASのレンダーモード  Screen Space – Camera Canvasは指定したカメラによって描画されます。UIのサイズは画面内に収まるように自動で調整され、 カメラからの距離ではPlane Distance(前後関係)のみが考慮されます。

300.

CANVASのレンダーモード  Screen Space - World Space 3D空間上に存在するオブジェクトと同様として描画されます。Canvasを3Dオブジェクトの子要素し て、オブジェクトに追従するUIを作成することも可能です。

301.

UIゲージのfill Amountの5つのタイプ https://unity-shoshinsha.biz/archives/425  ImageのTypeをFilledにして、Fill Methodを設定します。

302.

Button  押下可能なボタンのためのUIです。単色のボタンや、画像のボタン、アニメーションするボタンを作成 でき、クリック時のイベント処理をすることができます。

303.

Button  Buttonのプロパティを、Inspectorを確認します。 プロパティ Interactable ボタンの使用可否 ボタン表面に表示するGraphicを指定 Target Graphic Transition 意味 None ステート(マウスオーバー、押された、使用不可時など)イ フェクトを使わない Color Tint ステートに応じて色を変える Sprite Swap ステートに応じたスプライトを表示 Animation ボタンのステートに応じたアニメーションを再生させる

304.

Button  On Click()にPublicメソッドを指定することで、On Click時の動作が設定できます。どのGameObject のコンポーネント(c#クラス)のどのメソッドを呼ぶか設定できます。 この例だと PlayerObjectの PlayerClassクラスの Fireメソッドを呼びます。

305.

Image  Spriteを表示するためのUIです。Spriteで画像を指定するか、Colorで単色で塗りつぶすことがで きます。

306.

Text Mesh Pro  Textを表示するためのUIです。フォントに関 連する設定や、テキストの折り返しの設定など があります。

307.

イベントリスナー  UIのオブジェクトの押下などをメソッドに紐づける機能です。  以下のようなメソッドをイベントリスナーとして登録可能です。  引数・戻り値のないpublicメソッド  引数が特定の型で1つのみ・戻り値のないpublicメソッド  特定の型の読み書き両用のpublicプロパティ  特定の型:bool/int/float/string/GameObject or MonoBehaviourを継承したクラス  イベントリスナーはInspector上で指定した値を引数として受け取ることが出来ます。 307

308.
[beta]
イベントリスナーの設定
 Hierarchy上で右クリック>UI>Buttonを配置。
 下記のScriptをClickListenerという名前で新しく作成します。
 配置したButtonに対し、 AddComponentでスクリプトを追加します。
public class ClickListener : MonoBehaviour {
public void OnClick(GameObject obj) {
Debug.Log (obj.name);
}
public void OnClick() {
Debug.Log ("no params");
}
}

308

309.

イベントリスナーの設定  配置したButtonのOnClickの+を押下します。  HierarchyからButton自身をRuntimeOnlyの下にD&Dします。  RuntimeOnlyの右側のプルダウンで作成したClickListener>OnClick(GameObject)を選択します。  その下の項目にButtonを再度D&Dします。同様に引数なし版OnClickを下記のように設定します。 309

310.

イベントリスナーの設定  再生し、表示されるボタン押下時にConsoleへログが出力されることを確認します。 310

311.

参考:画面遷移  遷移先のシーンを作成します。 • ProjectWindowのAssetsを右クリック Create -> Scene -> Sceneを選択します。 • 名前をSampleに変更します。 • ProjectWindowでSampleシーンをダブルクリックし開きます。 • File > Build Profilesを開きます。Open Scene List を押下します。 • Add Open Scenes を押下しScene ListにSampleシーンを追加します。 311

312.

参考:画面遷移  遷移元のシーン上で遷移処理を書きます。 • Buttonに付与した ClickListenerを右記の通り修正します。  再生ボタンを押下し、Buttonをクリックし、 何もないSampleシーンが表示されることを 確認します。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class ClickListener : MonoBehaviour { public void OnClick(GameObject obj) { Debug.Log (obj.name); } public void OnClick() { // Debug.Log ("no params"); SceneManager.LoadScene ("Sample"); } }

313.

Bitmap Font  Asciiコードと画像の位置を紐づけるfontsettingsを作成することで画像をフォントにできます。

314.

UIの描画の流れ 出典: https://www.slideshare.net/slideshow/unityuitips/128780358#14 https://logmi.jp/tech/articles/320742  Canvas単位にまとめ、後ろから順番に前に絵を描画していきUIを表示します。 マテリアルでポリゴンを塗る ひとつづつだと効率が悪い

315.

バッチング 出典: https://www.slideshare.net/slideshow/unityuitips/128780358#14  基本的には同じテクスチャやマテリアルに ついては、まとめて描画できます。 • 同じCanvasに所属 • 同じマテリアル、テクスチャを使用 (Atlas化) • 描画順序が同じ時 マテリアルが異なると、別のポリ ゴンを用意してわけて描画します。 入れ子になっていて、描画順序を 意識しないといけない場合はまと めて描画できません。

316.

オーバードロー 出典: https://www.slideshare.net/slideshow/unityuitips/128780358#14  UIが重なってあった場合、「色が塗られているか」「完全に透過しているか」を気にせずに色は塗 られます。何度も塗ってしまう箇所がでてきます。「透明を塗って、その上に透明を塗って、その 上に透明を塗って」という場合で、これをオーバードローと言います。

317.

UIのリビルド 出典: https://www.slideshare.net/slideshow/unityuitips/128780358#14 https://logmi.jp/tech/articles/320743  UnityのCanvasは、描画をまとめてバッファを作って、それを使って描画します。バッファを使 い回すということは、同じデータしか使えないことを意味しています。もしそのバッファの情報に 変化があった場合、Canvasに情報をまとめて1回統合して、バッファを作り直す必要があります。 • UIをenable/disableした場合。消したら当然非表示になるのでバッファは消えます。 • マテリアル、バッチングが切り替えられた場合にも更新されます。 • UIのRectTransform、UIの大きさが変わってしまった場合でも更新されます。 • transformの親が変わった場合も更新されます。

318.

SPRITE Atlas  複数のテクスチャを 1 つのテクスチャに統合するアセットです。Unity は、この単一のテクス チャを呼び出して、複数のドローコールの代わりに 1 回のドローコールを送信し、小さいパ フォーマンスオーバーヘッドで、パックされたテクスチャすべてにまとめてにアクセスします。 出典 : https://docs.unity3d.com/ja/2021.3/Manual/SpriteAtlasWorkflow.html

319.

ビルドプロファイル ビルドプロセス

320.

ビルドプロファイル  開発ビルドやリリースビルド、特定のプラットフォーム向けなど、様々なビルド設定を保存し、簡 単に切り替えられるようにする非常に便利な機能です。  MenuのFile > Build Profilesを選びます。

321.

Scene List  ビルドに含めるシーンを追加します。1番上のシーンが実行時に起動されます。

322.

Platforms  ビルドするプラットフォーム毎の設定を行います。Switch Platformを選択することでビルド対象 のプラットフォームを選択します。

323.

プラットフォームの切り替え  Platforms ビルドするプラットフォーム毎の設定を行います。Switch Platformを選択することでビルド対象 のプラットフォームを選択し、プラットフォーム毎の設定を行います。  Activeと表示されているPlatformが現在選択されているプラットフォームです。

324.

ビルド  Build / Build And Run Buildを押下することで、ActiveなPlatform向けにプロジェクトがビルドされます。 Build And Runを押下することで、ビルド後に実行されます。

325.

ビルドプロファイルの作成  開発ビルドやリリースビルド、特定のプラットフォーム向けなど、様々なビルド設定を保存し、簡 単に切り替えられるようにできる仕組みです。プラットフォーム、用途別の設定をボタン一つで瞬 時に切り替え、ビルドを実行できるようになります。  Add Build Profileを押下します。

326.

ビルドプロファイルの作成  プラットフォームを選択し、プロファイルの名前を入力しAdd Build Profileを押下します。  Build Profilesに新しいプロファイルが追加されます。

327.

ビルドプロファイルの作成  追加したプロファイルを選択し、Platformの設定を変更します。

328.

ビルドプロファイルの作成  個別にPlayer Settingsを設定したい場合、Customize Player Settingsを押下します。  Player Settings Overridesが表示されます。個別の設定をオーバーライドして設定することが可 能です。

329.

ビルドプロファイルの利用  追加したプロファイルを選択し、Switch Profileを選択します。  プロファイルがActiveに設定されます。切り替えたプロファイル設定でビルドが可能となります。

330.

プロジェクト設定 プレイヤー設定 / クオリティ設定 / グラフィック設定

331.

Player Settings  スプラッシュスクリーン、解像度、デフォルトアイコンなどを設定するMenuのEdit > Project Settings を開きます。Playerタブを選択します。

332.

Player Settings ここでは、アプリケーション名やアイコンと いった基本的な情報から、パフォーマンスや各 プラットフォーム固有の挙動に至るまで、多岐 にわたる項目を設定します。  Company Name 会社名や組織名、または個人名を設定します。 これは、ビルドされたアプリケーションのプ ロパティや、レジストリのパス(Windowsの 場合)などに使用されます。  Product Name アプリケーションの正式名称です。実行ファ イルのタイトルや、インストール後の表示名 として使用されます。

333.

Player Settings  Color Space 色空間は、色の範囲の定義であり、色を管理 しやすくするものです。  ガンマ色空間 (Gamma Color Space) 人間の目は、暗い部分の明るさの変化には敏感ですが、 明るい部分の変化には鈍感という特性を持っています。 モニターの特性や人間の目の知覚に合わせて、あらかじ め色や明るさのデータに「ガンマ補正」というカーブを かけた状態で計算を行います。ライティングのような物 理計算は、本来「光のエネルギーが2倍になれば、明る さも2倍になる」という線形(リニア)な世界で行われる べきです。しかし、ガンマ空間では、すでに補正がか かった歪んだ値で計算してしまうため、数学的に正しく ない結果になります。  リニア色空間 (Linear Color Space) 物理的に正しい方法です。リニア色空間では、すべての 計算を光のエネルギー量に比例した「線形な」値で行い ます。光の計算が現実世界に近いため、非常にリアルで 高品質な光と影の表現が可能になります。  MSAA Fallback あなたが設定したMSAAレベル(2x, 4x, 8x) を適用しようと試みますが、特定の状況下で は利用できません。その際に、エラーで描画 が停止するのではなく、MSAAをオフにし てレンダリングを続行します。

334.

Player Settings  Graphics API グラフィックスAPIは、ソフトウェア(Unity) とハードウェア(GPU)の橋渡しをします。プ ラットフォーム(OS)ごとに最適なAPIは異な ります(WindowsならDirectX, Appleなら Metalなど)。 API名 プラット フォーム 特徴 DirectX 12 Windows, Xbox Microsoft製の最新API。GPUの性能を極限まで引き 出す「ローレベル」な制御が可能で、高いパフォーマ ンスを発揮しますが、扱いが少し複雑です。 Vulkan Windows, Android, Linux DirectX 12に対抗する、オープンな標準規格。クロス プラットフォームで高いパフォーマンスを発揮します。 特にMeta QuestのようなAndroidベースのXRデバイ スでは、現在Vulkanが推奨されています。 Metal iOS, macOS, visionOS Apple製品専用のAPI。Appleのハードウェアに最適化 されており、iPhoneやMac、Vision Proで最高のパ フォーマンスを出すためには必須です。 Web, OpenGL / OpenGL ES Android, Linux 古くからあるオープンな標準規格。幅広いプラット フォームで動作する汎用性の高さが魅力ですが、 DirectX 12やVulkanに比べてパフォーマンスでは劣 ります。WebGLのベースにもなっています。 DirectX 11 DirectX 12の一つ前の世代のAPI。今でも多くのPCで サポートされており、安定性と互換性に優れています。 Windows

335.

ドローコールとは  ドローコールとは、CPUがGPUに対して出すこれを描画してくださいという1回分の描画命令のこと です。1つのドローコールには、より詳細な情報が含まれています。 • 形状データ どんな形のものを描くか。 • マテリアルとシェーダー どんな質感で、どんな光の反射をさせて描くか。 • テクスチャ: どんな模様を貼り付けて描くか。 • トランスフォーム: どこに、どの向きで、どのくらいの大きさで描くか。 ドローコールの中で高コストな処理がステートチェンジです。ドローコール間で異なるマテリアル (シェーダーやテクスチャ)を使うオブジェクトを描画するたびに発生します。 • バッチング (Static Batching,、Dynamic Batching) 同じマテリアルを共有している複数のオブジェクトをまとめて1回のドローコールで描画します。そのため、より効果的な バッチングをするには、できる限り違うオブジェクト間で多くのマテリアルを共有する必要があります。 • GPUインスタンシング (GPU Instancing) 全く同じメッシュとマテリアルを持つオブジェクトを、1回のドローコールで複数箇所に効率的に描画します。草や木、弾丸 などに非常に有効です。 • テクスチャアトラス (Texture Atlas) 複数の小さなテクスチャを、1枚の大きなテクスチャにまとめます。これにより、異なる見た目のオブジェクトが同じマテリ アルを共有できるようになり、バッチングの対象にしやすくなります。

336.

Player Settings  Static Batching ドローコールを減らすために、移動しない メッシュを結合する ドローコールバッチ処 理 のメソッドです。シーン内で動かない複 数のオブジェクトを、事前に一つに結合した メッシュを作成します、結合したすべてのオ ブジェクトを一度に描画する単一のドロー コールを実行します。 ドローコールを大幅に削減できるため、 CPUの負荷が大きく下がり、パフォーマン スが向上します。オブジェクト数の多い静的 な背景に絶大な効果があります。 オブジェクトを結合して作られた巨大なメッ シュをメモリ上に保持する必要があるためメ モリ使用量が増えます。また、カリングの効 率が低下する場合があります。巨大な一つの 塊にまとめられると、その一部でもカメラに 映ると塊全体が描画対象となり、GPUの負 荷が逆に増える可能性があります。

337.

Player Settings  Lightmap Streaming シーン内のライトマップを一度にすべて読み 込むのではなく、カメラが必要とする部分だ けを動的にメモリへロードする技術です。 特にモバイルやMeta QuestのようなXRデ バイスでは、使用できるメモリに限りがある ため、ライトマップだけでメモリを使い果た してしまう可能性があります。シーン開始時 には、すべてのライトマップの最も解像度が 低いMIPレベルだけをメモリに読み込みます。 これにより、初期ロードは非常に高速になり ます。そのオブジェクトに貼られたライト マップが詳細に表示される必要が出てくると、 より高解像度なMIPレベルのデータを、バッ クグラウンドで非同期にストリーミング(追 加ロード)します。

338.

Player Settings  Frame Timing Stats 1枚のフレームをレンダリング(描画)するの にかかった時間を、処理の段階ごとに分解し て示したものです。CPUとGPUがそれぞれ どれくらいの時間作業していたかを参照でき るようになります。 • CPUバウンド (CPU-bound) CPUの処理がGPUよりも長くかかっている状態で す。Main Thread の時間が Render Thread (GPU) の時間より著しく長い。 ドローコールの削減、コードの最適化、物理演算の 負荷軽減などが中心になります。 • GPUバウンド (GPU-bound) GPUの処理がCPUよりも長くかかっている状態で す。Render Thread (GPU) の時間が Main Thread の時間より著しく長い。 シェーダーの最適化、ポリゴン数の削減、ポストプ ロセスの見直し、解像度の調整などが中心になりま す。 取得した値は、プロファイラーを使って表示 させたり、ProfilerRecorder API を使用し てデバッグ表示させることが可能となります。

339.

Player Settings  Virtual Texturing GPUのメモリ(VRAM)に収まりきらないほ ど巨大なテクスチャを、まるでメモリ上にす べて存在するかのように扱えるようにするス トリーミング技術です。必要な部分だけを、 必要な解像度で、リアルタイムにディスクか らGPUメモリへ転送することで、理論上は テラバイト級のテクスチャでさえも利用可能 にします。  360 Stereo Capture チェックを入れることで、Unity Recorder パッケージ等を使って、360ステレオ動画を 撮影できます。

340.

Player Settings  SRGB Write Mode リニアからガンマ空間(sRGB)への書き込み 色変換を一時的にオフにしたい場合に有効に ます。モバイルのタイルベース GPU のパ フォーマンスに悪影響を与えるので、モバイ ルでは有効にしないでください。  Number of swapchain buffers GPUが画面に表示するために準備しておく、 完成したフレーム画像のバッファの数を設定 します。このオプションを 2 に設定すると ダブルバッファリング、3 に設定するとトリ プルバッファリングが、Vulkan レンダラー に使用されます。一部のプラットフォームで は待ち時間の改善に役立つ場合がありますが、 ほとんどの場合はデフォルト値の 3 のまま にすることが推奨されます。。

341.

Player Settings  Arquire swapchain image late as possible CPUとGPUの並列性を最大化し、CPUが GPUの処理完了を待つストール(待機時間) をなくすことです。有効にすると: CPUは GPUの状況を気にせず、まず自身の処理を 完了させます。これにより、CPUとGPUが 互いに干渉せず、並列で作業する時間が増え、 フレーム全体の処理時間が短縮される可能性 があります。特にCPUバウンドの状況で効 果を発揮します。  Recycle Command Buffers CPUがGPUへ送る命令の塊であるコマンド バッファのメモリ管理に関する設定です。有 効にすると、一度使用したコマンドバッファ のメモリを破棄せず、次のフレームで再利用 します。効にすると、この無駄なメモリ確保 処理がなくなり、CPUの負荷が安定します。

342.

Player Settings  Override Default Package Name アプリケーションのデフォルトのパッケージ 名をオーバーライドするかどうかを示します。  Package Name アプリケーション ID を設定します。この ID は、デバイス上と Google Play ストア上で アプリケーションを識別します。アプリケー ション ID は、 com.YourCompanyName.YourProductN ame 規約に従い、英数字とアンダースコア 以外は使用できません。

343.

Player Settings  Minimum API Level アプリケーションを実行するのに必要な API の 最小バージョン(API レベル)  Target API Level アプリケーションをコンパイルするターゲット の Android バージョン(API レベル)  C++ Compiler Configuration • • • Debug Debug 設定は全ての最適化を無効にします。これにより、 コードのビルドがより素早くなりますが実行がより遅くな ります。 Release Release 設定を使用すると最適化が有効になるため、コン パイルされたコードの実行がより速くなり、バイナリサイ ズがより小さくなりますが、コンパイル時間がより長くな ります。 Master Master 設定は、考えられる全ての最適化を有効にし、パ フォーマンスを可能な限り向上させます。  Use incremental GC インクリメンタルガベージコレクターを使用し ます。ガベージコレクションを数フレームにわ たって分散させ、フレーム中におけるガベージ コレクション関連のスパイクを減らします。

344.

Player Settings  Target Architectures ターゲットとするアーキテクチャを指定しま す。

345.

Player Settings  Internet Access Androidアプリマニフェストに、Internet Access権限を追加するかどうかを選択しま す。  Write Permission 外部ストレージ(SDカードなど)への書き込 みアクセスを有効にするかどうかを選択し、 Androidアプリマニフェストに適切な権限を 追加します。開発ビルドでは、デフォルトで External(SDCard)に設定されます。  Sustained Performance Mode サステインドパフォーマンスモードとは、デ バイスの性能を最大瞬間風速的に引き出すの ではなく、 OSはCPU/GPUのクロック周波 数を、オーバーヒートしない一定の、しかし 持続可能なレベルに固定します。

346.

Player Settings  Vertex Compression メッシュの頂点は、位置座標、法線、UV座 標などの情報を持っています。これらのデー タは32ビットの浮動小数点数のような高い 精度で保存されています。圧縮を有効にする と、チャンネルごとの精度を下げてメッシュ データが小さくなるため、特にメモリが限ら れているモバイルやXRデバイスで大きな効 果があります。  Optimize Mesh Data メッシュに法線、頂点カラー、UV1のデー タが含まれているとします。しかし、実際に 適用したマテリアルが、ライティング計算を 行わず、頂点カラーも使わないものであれば、 この設定を有効にすることで、法線と頂点カ ラーのデータはビルド後のメッシュから削除 されます。メッシュ内のデータ量を削減し、 ビルドサイズ、読み込み時間、ランタイムメ モリ使用量の削減に役立ちます。

347.

Player Settings  Texture MipMap Stripping すべてのプラットフォームでミップマップの 除去を有効にします。ビルド時にテクスチャ から未使用のミップマップを除去します。

348.

Quality Settings  Levelごとに品質設定を行え、プロットフォームごとにどのQuality LevelをDefaultで使うかを設 定可能です。  Defaultの横の▼を押し、AndroidプラットフォームのデフォルトをGoodに変更します。

349.

Quality Settings  Realtime Reflection Probes Reflection ProbeのTypeでRealtimeを利用 する場合はチェックします。  Realtime GI CPU Usage リアルタイムグローバルイルミネーションの 更新処理に、CPUの計算能力をどれだけ割 り当てるかを決めるパフォーマンス設定です。  Low CPU使用量を低く抑えます。間接光の更新頻度が下 がり、ライトの色や位置を変えても、その影響が シーンに反映されるのが遅くなります。  Medium 品質とパフォーマンスのバランスが取れた設定です。  High CPUを積極的に使用して、間接光をより速く更新し ます。ライトの変化に対する反応が良くなります。  Unlimited CPUリソースを可能な限り使用して、最速で更新し ようとします。ゲームロジックや物理演算など、他 のCPU処理を圧迫し、ゲーム全体のフレームレート を低下させる危険性があります。

350.

Quality Settings  Mipmap Limit Groups Global Mipmap Limitは、URPやHDRPで 利用できるプロジェクト全体のマスター設定 で、すべてのテクスチャの最大解像度を一括 で制限(キャップ)する機能です。 仕組みとしては、すべてのテクスチャに対し て、最も解像度が高いミップマップレベルを いくつ使用しないかを指定します。例えば、 Limitを1に設定すると、1024x1024のテ クスチャは、最も大きいミップマップレベル (1024x1024)を破棄し、512x512を最大 解像度として扱います。Limitを2にすれば、 最大解像度は256x256になります。

351.

Quality Settings  Anisotropic Textures Unity が異方性テクスチャの使用方法を設定 します。オプションは Disabled (無効)、 Per Texture (テクスチャ毎)、Forced On (強制、つまり常に有効) です。  Mipmap Streaming テクスチャを1枚使用すると、そのテクス チャの全てのミップマップレベルがGPUメ モリにロードされます。しかし、遠くにある オブジェクトには低解像度のミップマップし か必要ありません。最初は、非常に低い解像 度のミップマップ(または全くロードしない) だけをメモリに配置します。より鮮明なテク スチャが必要になると、システムは必要な高 解像度のミップマップレベルをディスクから 非同期でストリーミングします。  Particle Raycast Budget 近似パーティクルシステムの衝突のために使 用する レイキャスト の最大数を設定します。

352.

Quality Settings  Shadowmask Mode Shadowmask の Mixed lighting モードを 使用するときのシャドウマスクの動作を選び ます。 • Distance Shadowmask Shadow Distance に達するまでリアルタイムの影を 使用し、それを超える場合はベイクした影を使用しま す。 • Shadowmask シャドウを投影する静的ゲームオブジェクトは、常に ベイクしたシャドウを投影します。  Time Slice バッファリングされたテクスチャとメッシュ データデータを GPU にアップロードするの に費やす CPU 時間を、ミリ秒/フレーム単 位で設定します。  Buffer Size GPU への テクスチャとメッシュデータのス トリーミングに使用する Async Upload BufferのサイズをMB単位で設定します。

353.

Quality Settings  LOD Bias LODが切り替わる距離を全体的に調整する ための倍率です。LOD Biasを高くするのは、 少し視力が悪い状態に似ています。物がかな り近づかないとディテールが見えません。逆 に低くするのは、視力が良い状態に似ていて、 遠くの物のディテールまでよく見えます。  Maximum LOD Level プロジェクト全体で使用を許可する、最も ディテールが高いLODレベルを制限(キャッ プ)する設定です。 あるオブジェクトがLOD0~LOD2を持って いるとします。ここでMaximum LOD Levelを1に設定すると、最も高品質な LOD0はビルドに含まれなくなり、ゲーム中 で表示される最も綺麗なモデルはLOD1にな ります。主な用途:ビルドサイズの削減が最大 の目的です。ビルドから除外することで、ビ ルドサイズを効果的に削減できます。

354.

Graphics Settings  Shader Stripping あなたのプロジェクトで絶対に使用しないと わかっている機能のシェーダーバリアントを、 ビルド時に一括で削除することができます。 不要なシェーダーバリアントを削除すること で、ビルドサイズを劇的に削減し、ビルド時 間も短縮できます。 • Lightmap Modes ライトマップ関連シェーダーのシェーダーバリアント ストリッピングの動作を決定します。 • Instancing Variants GPU インスタンス化に関連するシェーダーのバリアン トストリッピング動作を決定します。 • Fog Modes フォグ効果に関連するシェーダーのバリアントスト リッピングの動作を決定します。

355.

Graphics Settings  Log Shader Compilation どのシェーダーが、いつ、なぜコンパイルさ れたかという詳細な情報をログに出力する、 開発者向けのデバッグ機能です。  Camera-Relative Culling 特に広大なワールドを持つゲームにおいて、 カリング(描画しないオブジェクトを選別す る処理)の精度を向上させるための最適化技 術です。これは、カリングの計算をワールド の原点(0,0,0)基準で行うのではなく、カメ ラを一時的な原点と見なして行うことで、浮 動小数点数の精度誤差の問題を回避します。

356.

Graphics Settings  Log Shader Compilation どのシェーダーが、いつ、なぜコンパイルさ れたかという詳細な情報をログに出力する、 開発者向けのデバッグ機能です。  Probe Volume Disable Streaming AVP APVの全データをシーンのロード時に一括 でメモリにロードし、動的なストリーミング を無効にする、開発者向けのデバッグおよび パフォーマンス測定用の設定です。  Use Bicubic Lightmap Sampling ベイクされたライトマップを読み取る際の品 質を向上させる設定です。有効にすると、標 準のサンプリング方法よりも高品質で滑らか なライティング結果を得られます。  Additional Shader Stripping Settings プロジェクトで使用しない特定のレンダリン グ機能のシェーダーバリアントを削除するこ とで、ビルドサイズを削減します。

357.

URPの設定 Universal Render Pipeline Asset / Universal Render Data

358.

Universal Render Pipeline Asset  Universal Render Pipeline (URP) Assetは、URPプロジェクトのレンダリング品質とパフォーマンス に関する大元の設定を管理するファイルです。ここでURPの基本的な動作を定義します。

359.

Universal Render Pipeline Asset Rendering  Depth Texture カメラからの深度をグレースケールで持つ _CameraDepthTextureを生成するかどうかを 設定いします。  Opaque Texture 不透明のオブジェクトを描画してから半透明のオ ブジェクトを描画しますが、半透明のオブジェク トを描画する前の_CameraOpaqueTextureを 生成するかどうかを設定します。  Terrain Holes テレインで穴を有効にするかどうかの設定です。

360.

Universal Render Pipeline Asset Rendering  GPU Resident Drawer CPUの代わりにGPUに描画の管理を大きく任せ ることで、CPUの負荷を劇的に下げる仕組みで す。 XRでは右目用と左目用のカメラを描画する必要 があり、ドローコールが増加します。 このような厳しい制約の中で • CPUボトルネックを解消することで、FPSの低下 を防ぎ、VR酔いのリスクを低減します。 • パフォーマンスに余裕が生まれることで、より多く のオブジェクトを配置でき、没入感の高い、リッチ で詳細な仮想世界を構築することが可能になります。 Meta XR SDKを使った開発においても、GPU Resident Drawerを有効にすることは、パ フォーマンスを最適化する上で非常に効果的な手 法の一つです。 ※ 利用条件 1. Rendering PathをForward+にすること 2. Compute Shaderがサポートされていること(OpenGL ESを除く) 3. Mesh Rendererコンポーネントを持つGame Objectであること 4. BatchRendererGroup Variantsの設定をKeep Allにする必要があります。 修正するには、Graphics設定を変更し、BatchRendererGroup Variants をKeep Allに設定してください。 ※ 静的バッチング(Static Batching)は推奨されません。Player Settingsで静的 バッチングを無効にすると、パフォーマンスが向上する可能性があります。

361.

GPU Resident Drawerとは  これまでのレンダリングでは、毎フレームCPUがどのオブジェクトを、どこに、どのように描画するか という詳細な情報(メッシュ、マテリアル、位置など)を一つ一つ準備し、GPUに送信していました。 シーンに多くのオブジェクトがあると、このCPUからGPUへのデータ転送と描画命令(ドローコール)が 膨大になり、CPUが非常に忙しくなってしまうCPUボトルネックという問題が起こりがちでした。 それに対し、GPU Resident Drawerは以下のようなアプローチを取ります。 1. データの常駐 シーン内の静的なオブジェクトのメッシュやマテリアルといった描画データを、あらかじめGPU メモリにまとめて転送し常駐させます。 2. 命令の簡略化 CPUは毎フレーム詳細なデータを送る必要がなくなり、GPU上にある、あのデータとこのデータ を使って描画してという、ごく簡単な命令を出すだけで済みます。 3. GPUによる描画管理 どのオブジェクトを描画するかといった判断(カリング)なども含め、GPUが主体となって効率的 に描画処理を行います。 これにより、CPUは描画に関する膨大な雑務から解放され、ゲームロジックや物理演算など、他の重 要な処理にリソースを集中できるようになります。

362.

Universal Render Pipeline Asset Rendering  GPU Occlusion Culling あるオブジェクトが他のオブジェクトに完全 に隠れていてカメラから見えない場合に、そ の見えないオブジェクトの描画処理を省略す る技術(オクルージョンカリング)を、GPUに 担当させる機能です。 従来はCPUがこの計算を行っていましたが、 GPUに任せることでCPUの負荷を大幅に削減 し、解放されたCPUリソースをゲームロジッ クや物理演算などに回すことができます。 これにより、特にオブジェクト数の多い複雑 なシーンでのパフォーマンスが大きく向上し ます。

363.

Universal Render Pipeline Asset Quality  HDR ハイダイナミックレンジレンダリングを有効に するか。ブルームなどのポストプロセスや、よ りリアルなライティング表現に必須です。XR やモバイルではパフォーマンスを考慮して選択 します。  Anti Aliasing MSAA (Multi-Sample Anti-Aliasing) ポリゴ ンのエッジのギザギザを軽減するアンチエイリ アシングの方式。数値を上げるほど綺麗になり ますが、GPU負荷も増加します。  Render Scale 画面解像度に対して、内部的にどのくらいの解 像度でレンダリングするかのスケール値。1未 満にすると描画負荷が下がりますが、画質は低 下します。  Upscaling Filter アップスケーリング時にUnityが使用する画像 フィルターを選択します。レンダリングスケー ルの値が1.0未満の場合にUnityはアップスケ ーリングを実行します。

364.

Universal Render Pipeline Asset Lighting  Main Light 太陽の光源に指定しているライト、設定がなけれ ば、シーン内で最も明るいDirectional Lightを メインライトとして扱う。  Cast Shadows メインライトが影を落とすかどうか設定します。  Shadow Resolution メインライトのシャドウマップのテクスチャーサ イズを指定します。  Light Probe System APVか、Light Probe Groupsのどちらを使う を設定します。

365.

Universal Render Pipeline Asset Lighting  Additional Lights 追加ライトのライティング計算を、どの単位で行 うかを決める設定です。品質とパフォーマンスの トレードオフ関係にあります。 Per Vertex 頂点ごとにライティングを計算し、頂点と頂点の間 は色を補間(グラデーション)して描画します。 低品質です。ポリゴン数が少ないオブジェクトでは ライトの当たり方がカクカクして見えたり、スポッ トライトの形が歪んだりします。 Per Pixel ピクセルごとに、法線や光の方向を考慮してライテ ィングを計算します。  Per Object Limit オブジェクトあたりに影響を与えることができ る追加ライトの最大数。

366.

Universal Render Pipeline Asset Lighting  Shadow Atlas Resolution これはシーン内に存在する全ての追加ライトの影 をまとめて描き込む、一枚の巨大なテクスチャ(シ ャドウアトラス)の全体の大きさを定義します。 例えば2048x2048に設定すると、Unityはこの領域に、影 を落とす全ての追加ライト(スポットライトやポイントライト )のシャドウマップを収まるように調整して格納します。  Shadow Resolution Tiers 個々のライトに割り当てられるシャドウマップの 解像度を、ライトの重要度(画面内のサイズや距離 など)に応じて設定するものです。 URPはライトの重要度を判断し、3段階(Tier)のい ずれかの解像度を割り当てます。 • Low: 低品質の影 (例: 512x 512) • Medium: 中品質の影 (例: 1024x1024) • High: 高品質の影 (例: 2048x2048)

367.

Universal Render Pipeline Asset Shadows (メインライト)  Max Distance カメラの位置から、どれだけ遠くまで動的な影を 生成・描画するかをメートル単位で設定します。  Cascade Count Shadow Mapの分割数を指定します。分割数が 増えるほど描画のオーバーヘッドが増加し、パフ ォーマンスに影響します。

368.

Shadow Cascades  Shadow Map(20×20ピクセル)をイメー ジしています。 カメラから見た際には、手前の4ピクセルと 奥の20ピクセルが同じサイズになります。 カメラに近いShadow Mapが遠くのものよ りも拡大されて荒くみえます。  シャドウカスケードを使用する場合、Unity はカメラからの距離に基づいて錐台領域を1 ~5つのゾーンに分割します。 近端のゾーンは、サイズを小さくした別のシ ャドウマップを使用します (解像度は同じ)。 シャドウマップサイズのこれらの段階的な削 減は、カスケードシャドウマップ と呼ばれ ます。 出典:https://docs.unity3d.com/ja/2019.4/Manual/shadow-cascades.html

369.

Universal Render Data Filtering どのレイヤーに属するオブジェクトを不透明オブジ ェクトとして、またどのオブジェクトを半透明オブ ジェクトとして描画するかを、レンダリングパイプ ライン全体で制御するためのフィルター設定です。  Opaque Layer Mask このマスクでチェックを入れたレイヤーに属する オブジェクトは、不透明オブジェクトとして扱わ れます。これらのオブジェクトのマテリアルは、 Surface TypeがOpaqueに設定されているべき です。  Transparent Layer Mask このマスクでチェックを入れたレイヤーに属する オブジェクトは、半透明オブジェクトとして扱わ れます。これらのオブジェクトのマテリアルは、 Surface TypeがTransparentに設定されている べきです。

370.

Universal Render Data  Rendering Path • デファードレンダリング (Deferred Rendering) ライティング計算を後回しにする手法です。最初に、シーン の形状や材質などの情報をG-Bufferという複数のテクスチ ャに書き込みます。そのG-Bufferの情報を使って、画面全 体に対してライトを一括で計算します。ライトの計算コスト がオブジェクト数に依存しないため、多数のライトに強いで す。 • デファード+ (Deferred+ Rendering) デファードレンダリングのライティングパスを、タイル化技 術で最適化する手法です(Tiled Deferredとも呼ばれます)。 デファードのライティングパスでは、画面の全ピクセルに対 して全ライトを計算する可能性があり無駄が多いため、タイ ルごとに影響するライトを絞り込むことで、計算をさらに高 速化します。これにより、デファードを上回る数のライトを 扱うことが可能になります。  Depth Priming Mode 本格的な描画の前に、シーン内の不透明オブジェクトを非常 に高速な深度のみのパスで描画し、デプスプリパスを完成さ せます。その後の本番の描画パスでは、デプスプリパスを利 用して既に手前に物があるピクセルの描画をスキップするこ とで、負荷を削減します。デプスプリパス自体がオブジェク トのドローコールを増やすため、CPU負荷は増加します。

371.

Universal Render Data  Rendering Path • フォワードレンダリング (Forward Rendering) 伝統的で、オブジェクトを1つずつ描画していく最もシンプ ルな方法です。各オブジェクトを描画する際、そのオブジェ クトに影響を与える全てのライトを計算します。ライトの数 が増えると、計算量が爆発的に増加する弱点があります。 • フォワード+ (Forward+ Rendering) フォワードレンダリングの弱点を克服するための最適化手法 です。タイル化という技術を使い、画面を細かいグリッドに 分割します。各タイルに影響を与えるライトのリストを事前 に作成し、オブジェクトを描画する際は、そのピクセルが含 まれるタイルのライトリストだけを参照します。シーン全体 のライト数ではなく、1タイルあたりのライト数にのみ影響 されるようになり、多数のライトを効率的に扱えます。  Accurate G-buffer Normals ライティング計算に必要な法線情報をG-Bufferというテクス チャに書き込みます。メモリ使用量と帯域を節約するために、 法線データは圧縮されて格納されます。しかし、この圧縮によ って精度が失われ、特に滑らかな曲面や法線マップを適用した 表面で、ライティングにバンディング(縞模様)のような不自然 な模様が出ることがあります。有効にすると、よりデータ量の 大きい、高精度なエンコーディング方式で法線を格納します。

372.

Universal Render Data 特徴 フォワード フォワード+ デファード デファード+ 基本アプローチ オブジェクト毎 オブジェクト毎(タイル 画面全体(G-Buffer使 で効率化) 用) 画面全体(G-Buffer + タイル) 多数のライトへの耐性 非常に低い 高い 高い 非常に高い 半透明オブジェクト 得意 得意 苦手(追加処理が必要) 苦手(追加処理が必要) MSAAの互換性 高い 高い 低い(非互換) 低い(非互換) GPUメモリ使用量 低い 中程度(ライトリスト用) 高い(G-Buffer用) 非常に高い(G-Buffer+ リスト) 主な長所 シンプル、半透明に強 い 多数のライトと半透明 /MSAAを両立 多数のライトに非常に 強い デファードを上回るラ イト数に対応 主な短所 ライト数に極端に弱い 処理がやや複雑 半透明/MSAAが苦手、 最も複雑、メモリ消費 メモリ消費大 が最大

373.

Universal Render Data  Rendering Path これはURPレンダラーアセットにある設定で、 シェーダーから読み取り可能なデプステクスチ ャを、いつ生成するかを制御します。ポストプ ロセスエフェクト、被写界深度などのように深 度情報が必要な処理のために使用します。 • • After Opaques (不透明パスの後) 不透明オブジェクトの描画が終わった時点で、デプステク スチャを生成します。このデプステクスチャには、半透明 オブジェクトの深度情報は含まれません。ほとんどのエフ ェクトでは、これで十分です。 After Transparents (半透明パスの後) 半透明オブジェクトまで描画した後に、デプステクスチャ を生成します。半透明オブジェクトを含めた深度情報が必 要な、特殊なエフェクト向けですが、より高コストになり ます。  Depth Attachment Format 前後関係の判定(Zテスト)に直接使用する、メイ ンのデプスバッファのデータ形式(精度)を定義し ます。Zファイティングを防ぎます。

374.

Universal Render Data  Depth Format Texture Depth Texture Modeによって生成される、シ ェーダーから読み取り可能なデプステクスチャ のデータ形式(精度)を定義します。この設定によ り、Zテストに使うメインのデプスバッファと、 シェーダーで読み取る用のデプステクスチャの 精度を、別々に設定できます。  Transparent Receive Shadows 半透明オブジェクト(ガラス、水、煙など)が、他 のオブジェクトから落とされる影を受けられる ようにするための設定です。この機能を有効に すると、半透明オブジェクトを描画するすべて のピクセルで追加のシャドウ計算が必要になる ため、GPU負荷が増加します。

375.

Universal Render Data  Post-processing Enabled URPレンダラーアセットにおけるポストプロセ スを有効にするかどうかのマスタースイッチで す。  Overrides Stencil ステンシルバッファとは:画面の各ピクセルに整 数値(通常0〜255)を記録できる、いわばスクリ ーンスペースのマスク用データ領域です。特定 の領域だけを描画したり、逆に描画しないよう にしたりといった、高度なマスキング処理に使 われます。

376.

Project Auditor 静的解析ツール

377.

Project Auditor  Unityプロジェクト全体をスキャンし、パフォーマンス、ビルドサイズ、メモリ使用量に関する潜 在的な問題点を自動で検出・報告してくれる、Unity公式の静的解析ツールです。  Package ManagerでProject Auditorをインストールします。

378.

Project Auditor  Menuから Window > Project Auditorを選択します。

379.

Project Auditor  Start Analysisボタンを押下します。Code / Assets / Shaders / Project / Build というカテ ゴリごとに分析結果が表示されます。

380.

Project Auditor  結果から一覧を参照、詳細と推奨を確認しプロジェクトに変更が必要と判断した項目の修正を加え ていくという流れになります。

381.

Unityプロファイラー 負荷状況の解析ツール

382.

Unityプロファイラー  Profiler ウィンドウにアクセスするには、ツールバーから Window > Profiler の順に選択します。

383.

詳細プロファイリング  Deep Profile (詳細プロファイル) を有効にすると すべての スクリプトコードがプロファイリン グされます。すなわちすべての関数コールが記録されます。これはゲームコードのどこで時間を要 したかを正確に知りたいときに便利です。  Deep Profile を使うと 非常に大きなオーバーヘッド を要するとともにメモリも大量に使用するた め、プロファイリングしている間はゲームが著しく遅くなります。もし複雑なスクリプトコードを 使用している場合、詳細プロファイリングは不可能である場合があります。

384.

CPU Usage プロファイラー  CPU Usage プロファイラー (CPU使用率プロファイラー) はゲームのどの部分で時間が使用され ているかを表示します。選択すると、下方のペインは選択されたフレームの階層的なタイムデータ を表示します。

385.

Rendering プロファイラー  Rendering プロファイラーにはレンダリング統計を表示します。バッチ数、セットパスコール、 レンダリングされた三角形数、および頂点数がタイムラインにグラフとして表示されます。下側の ペインに詳細なレンダリング統計を表示します。

386.

Memory プロファイラー  Simple ビューでは、Unity 全体でメモリがどのように使用されているのか、フレームごとにリア ルタイムの簡易な概要を表示します。 • Unity Unity のネイティブコードへのメモリ割り当て量。 • Mono 全体のヒープサイズとマネージドコードが使用している ヒープサイズ。このメモリはガベージコレクションされます。 • GfxDriver ドライバが Texture、レンダリングのターゲット、 Shader、Mesh データに使用している推定メモリ量。 • FMOD オーディオドライバが使用している推定メモリ量。 • Profiler プロファイラーデータに使用されているメモリ量。

387.

Copilotの活用 スクリプト作成での利用

388.

Copilotでスクリプトの作成 • チャットの切り替えからチャットを開くを選択します。 • 利用するモデルを選択します。

389.

Copilotでスクリプトの作成 • チャットに作成して欲しいスクリプトの内容を入力し送信します。

390.

Copilotでスクリプトの作成 • しばらくすると、スクリプトが作成され解説が表示されます。

391.

Copilotでスクリプトの作成 • 作成されたスクリプトのひとつは以下のような形です。

392.

Copilotでスクリプトの解析 • 既存のスクリプトに対し、処理内容を確認します。

393.

Copilotでスクリプトの解析 • 既存のスクリプトに対し、問題点を確認します。

394.

Copilotでスクリプトの修正 • 既存のスクリプトに対し、修正を指示します。 (中身を確認して問題があれば修正依頼を再度行うか自分で修正します。)

395.

参考 : 素材として使ったAsset  Tanks! | Complete Project https://assetstore.unity.com/packages/essentials/tutorial-projects/tanks-complete-project-46209