Skylight & Directional Light

Skylight(スカイライト)

 :Skylightは、シーン全体に均一な環境光を提供する。

 :主な特徴と役割は次の通り。

 (1) 環境光のシミュレーション
  : Skylightは、空全体からの散乱光をシミュレートする。これは、晴れた日や曇りの日のような、間接的な照明を表現するのに役立つ。

 (2) シャドウのソフト化
  : Skylightは、特定の方向からの光ではなく、全方向からの光を提供するため、シャドウがソフトで淡くなる。

 (3) 反射の改善
  : Skylightは、シーンのオブジェクトが反射する光を補完し、よりリアルな見た目を実現する。

Directional Light
(ディレクショナルナルライト)

 :Directional Light は、シーン全体に対して、特定の方向からの平行光を提供する。

 :主な特徴と役割は以下の通り。

 (1) 太陽光のシミュレーション
  : Directional Lightは、無限遠からの平行光をシミュレートし、太陽のような強い光源を表現する。

 (2)シャドウのキャスティング
  : Directional Lightは、シーン全体に対して明確なシャドウを生成する。シャドウの方向と長さは、ライトの角度によって決まる。

 (3)高い強度
  : Directional Lightは、非常に強い光を提供でき、シーンに強いコントラストと明るいハイライトをもたらす。

【Tips】

■ 太陽の日差しのモデル化

 :太陽の日差しをモデル化するために、SkylightとDirectional Lightを組み合わせて使用する。


 (1) Directional Lightの設定

  ・角度と方向
   :真昼は高い位置に、夕方のは低い位置に設定する。

  ・強度
   :太陽光の強度を調整して、自然な見た目を実現する。


 (2) Skylightの設定

  ・キャプチャ
   :シーンの環境をキャプチャし、Skylightが適切な環境光を提供するように設定する。

  ・強度
   :Skylightの強度を調整して、シーン全体の明るさをバランスさせる。

Off Screen(オフスクリーン)

【概要】

 :特定のオブジェクトやイベントがプレイヤーの視界やディスプレイ範囲外に存在することを意味する。
  
 :プレイヤーには直接見えないが、重要な情報やイベントを含んでいる場合がある。

【詳細】

 ・ナビゲーション
  :プレイヤーに対して、画面外にある重要なオブジェクトや目的地の方向を示すために使用される。

 ・イベント通知
  :プレイヤーが視界外で発生した重要なイベントを通知するために使用される。(例:敵の出現、アイテムのスポーンなど)

 ・パフォーマンスの最適化
  :描画や計算を省略し、ゲームのパフォーマンスを向上させる。

【例】

 ・オフスクリーンマーカー
  :プレイヤーに対して、画面外にある目的地や重要なオブジェクトの方向を示す。

  1)ウィジェット
    ブループリントの作成

    :コンテンツブラウザで、新しい「Widget Blueprint」を作成し、名前を付ける。(例:OffScreenMarker)

  2)マーカーのデザイン
    :ウィジェットブループリントを開き、矢印やポインターなどのマーカーをデザインする。

  3)ブループリントの設定
    :プレイヤーキャラクターのブループリントを開き、オフスクリーンオブジェクトの位置に基づいてマーカーを表示するロジックを追加する。

コンテクスチュアルウィジェット(Contextual Widget)

【概要】

 :特定のコンテキストや状況に基づいて表示されるユーザーインターフェース(UI)要素のこと。

 :コンテキスト(Context)は、ある事象や状況が発生する際の環境や背景情報のことを指す。

 :特定の操作やイベントが発生する際の「状況」や「条件」を意味する。

【例】

 ・プレイヤーの近接による
  コンテキスト

  1)プレイヤーが NPC に近づく
    :プレイヤーが NPC に一定の距離まで近づくと、特定のアクションやインタラクションが可能になる。この「状況」がコンテキスト。

  2)コンテクスチュアル
    ウィジェットの表示
    :NPC に近づいたときに「話す」「取引する」「クエストを受ける」などのウィジェットが表示する。このウィジェットは、その特定のコンテキストで表示されるように設計されている。

Kismet配列

【概要】

 :通常の配列のこと。
 :「Kismet」は、Unreal Engine 3時代のブループリントの名称。

HUDブループリント

【概要】

 :ユーザーインターフェース(UI)を構築するためのブループリントのこと。
 
 :HUD(Heads-Up Display)は、プレイヤーにゲーム情報を表示するための画面上のオーバーレイを指す。

【例】

 ・ヘルスバーの表示

  1)ウィジェット
    ブループリントの作成
    :「PlayerHUDWidget」という名前のウィジェットブループリントを作成する。

  2)UI要素の追加
    :ヘルスバー(Progress Bar)をウィジェットに追加し、サイズと位置を調整する。

  3)ウィジェット
    ブループリントの設定
    :ヘルスバーのプロパティを調整し、デザインを整える。ヘルスの値を変数として追加し、バインディングを設定する。

  4)HUDブループリントと
    ウィジェットの統合
    :HUDブループリント内で、PlayerHUDWidgetを作成して、表示する。

  5)ゲームモードの設定
    :ゲームモードブループリントで、HUDクラスをMyGameHUDに設定する。

イベントディスパッチャー(Event Dispatcher)

【概要】

 :あるオブジェクトが他のオブジェクトにイベントを通知する仕組みのこと。

 :異なるブループリント間での通信や、特定の条件が満たされたときのイベント処理を行うことができる。

【例】

 ・キャラクターの
  ヘルス変更イベント

  1)キャラクター
    ブループリントの開く

  2)OnHealthChanged
    イベントディスパッチャー
    を追加する
    :「Event Dispatchers」 >「Add Event Dispatcher」を選択する。ここでは、仮に「OnHealthChanged」と命名する。

  3)HUDブループリントを開く

  4)バインドノードを設定する
    ・イベントグラフで「Begin Play」イベントを追加する。
     :「Bind Event to OnHealthChanged」ノードを使用して、キャラクターブループリントの「OnHealthChanged」イベントディスパッチャーにバインドする。

    ・新しいカスタムイベント(例:UpdateHealthDisplay)を作成する。
     :「Bind Event to OnHealthChanged」ノードの出力に接続する。
     
  5)キャラクター
    ブループリントで
    ヘルス変更処理を実装する

    :ヘルスが変更されるロジック内で「Call OnHealthChanged」ノードを使用してイベントをブロードキャストする。例えば、ヘルスが減少したときにこのノードを呼び出す。

  6)HUDブループリントで
    イベントハンドラの実装
    :「UpdateHealthDisplay」イベントで、HUDのヘルス表示を更新するロジックを実装する。

ブループリントインヘリタンス(Blueprint Inheritance)

【概要】

 :親ブループリントから子ブループリントがプロパティ、関数、イベントを継承する仕組みのこと。

例】

 ・キャラクターの継承

  a. 親ブループリントの作成

   1)BaseCharacterの作成
     :BaseCharacterブループリントを作成する。共通のプロパティ(例:Health、Speed)や関数(例:Move、Attack)を定義する。

   2)プロパティの設定
     :Health や Speedの初期値を設定する。

   3)関数の定義
     :Move 関数と Attack 関数を定義する。

  b. 子ブループリントの作成

   1)WriorCharacterの作成
     :BaseCharacter ブループリントを基にWriorCharacterブループリントを作成する。

   2)プロパティの
     オーバーライド
     :WriorCharacter 内で、Health や Speed の値を上書きする。       (例:Health を 200、Speed を 300 に設定)。

   3)関数のオーバーライド
     :BaseCharacter の Attack 関数をオーバーライドし、特定の攻撃ロジックを実装する。  (例:Wrior特有の攻撃アニメーションを追加)。

エンム(Enum)

【概要】

 :データ型の一つで、関連する定数の集合を定義する。

【使い方】

 1.コンテンツブラウザで
   Enumを作成する
   :コンテンツブラウザで右クリック >「Blueprints」>「Enumeration」を選択する。
   :新しいEnumアセットに名前を付ける(例:ECharacterState)。

 2.Enumを定義する
   :Enumエディタを開き、列挙値を追加する。(例:Idle, Running, Jumping, Attacking)。

 3.変数の作成
   :ブループリント内で、新しいEnum型の変数を作成する。
   :変数の型を作成したEnum型(例:ECharacterState)に設定する。

 4.Enumの使用
   :Enum変数を条件分岐やスイッチノードで使用する。例えば、キャラクターの状態によって異なるアクションを実行するなど。

【例1】

 ・キャラクターの状態管理

  1)Enumの作成
    :キャラクター状態を管理するEnum(例:ECharacterState)を作成する。状態には、Idle, Running, Jumping, Attacking を含める。

  2)状態の変更
    :ゲームプレイ中に、キャラクターの動作に応じて状態を変更する。例えば、プレイヤーが移動キーを押したら Running 状態に変更するなど。

  3)状態に基づく処理
    :状態に基づいて異なるアニメーションやロジックを実行する。例えば、Running 状態では走るアニメーションを再生するなど。

【例2】

 ・アイテムのレアリティ

  1)Enumの作成
    :アイテムのレアリティを管理するEnum(例:EItemRarity)を作成する。レアリティには、Common, Uncommon, Rare, Epic, Legendary を含める。

  2)アイテムの生成
    :アイテムを生成する際に、レアリティを設定する。例えば、宝箱を開けたときに、ランダムなレアリティのアイテムを生成する。

  3)レアリティに基づく効果
    :アイテムのレアリティに基づいて、効果や価値を変更する。例えば、レアリティが高いほど強力な効果を持つアイテムにするなど。

デリゲート(Delegate)

【概要】

 :あるオブジェクトが別のオブジェクトに対してイベントを通知するための仕組みのこと。

 :例えば、キャラクターの衝突、ボタンのクリック、タイマーの終了などを効率的に処理する。

【詳細1】

 ・イベント通知
  :特定のイベントが発生したときに、デリゲートを使用して他のオブジェクトに通知する。

 ・一対多の関係
  :一つのデリゲートに対して複数のリスナーを登録できる。つまり、一つのイベントが発生すると、すべてのリスナーが通知を受け取れる。

【詳細2】

 ・シンプルデリゲート
  (Simple Delegate)
   :引数を取らずに通知するデリゲート。

 ・シングルキャストデリゲート
  (Single Cast Delegate)
   :一つのリスナーのみを持つデリゲート。

 ・マルチキャストデリゲート
  (Multicast Delegate)
   :複数のリスナーを持つことができるデリゲート。

【例】

 ・ボタンのクリックイベント

  1)デリゲートの宣言
    :ブループリントに「OnButtonClicked」という名前のデリゲートを宣言する。

  2)デリゲートのバインド
    :UIボタンをクリックしたときに「OnButtonClicked」デリゲートを呼び出す設定をする。
    :ボタンのクリックイベントで「Assign OnButtonClicked」ノードを使用する。

  3)デリゲートのハンドリング
    :「OnButtonClicked」デリゲートに応答するイベントハンドラを作成する。このハンドラ内で、ボタンがクリックされたときの処理を定義する。

サブルーチン(Subroutine)

【概要】

 :ブループリント内で再利用可能なノードの集合を作成するツールのこと。

 :Unreal Engineでは、サブルーチンのことを「関数(Function)」と呼ぶことが多い。

【例】

 ・プレイヤーダメージ処理の
  サブルーチン
   
  1)関数の作成
    :「ApplyDamage」という名前の新しい関数を作成する。この関数で、プレイヤーにダメージを適用する処理を行う。

  2)引数の設定
    :「DamageAmount」という名前の引数を追加し、タイプを「float」に設定する。この引数は、適用するダメージの量を表す。

  3)ノードの追加
    :関数グラフ内で「Get Player Health」ノードを追加し、プレイヤーの現在のヘルスを取得する。

    :「Subtract」ノードで、プレイヤーの現在のヘルスから「DamageAmount」を除算する。

    :「Set Player Health」ノードを使用して、更新されたヘルスをプレイヤーに設定する。

  4)関数の呼び出し
    :イベントグラフに戻り、例えば「OnHit」イベント内で「ApplyDamage」関数を呼び出す。
    
    :ヒット時に適用するダメージ量を引数として渡す。