見出し画像

[unity]Highlight Plusでピカピカ光らせる

 3Dアクションゲームで定番の、敵やプレイヤーキャラクタへのエフェクトが揃っています。
 このアセットで、輪郭の強調、アウターグロウ(輪郭が光る)、壁の透過、GameObjectへの色のうわかぶせ(オーバーレイとインナーグロウ)、ターゲットマーカの表示、ヒットエフェクトができるようになります。
 今回は、黒い線でのアウトライン表示と、レアエネミーなどによくあるアウターグロウと、壁の透過、ヒットエフェクトを操作します。
 ヒットエフェクトはスクリプトから操作しますので、その説明も行います。
 なお、プロジェクトはURPでセットアップします(Unity2021以上推奨)

Kronnect は良質のエフェクトアセットメーカーで、他にもフォグやミスト、ボリュームテックライト、ポストプロセッシングなどの映像の作り込みに向いたエフェクトが揃っています。

それと、先に謝ります。RaspberlyさんのBlogとまるかぶりでした。
特にレンダリングパイプラインは、readmeテキスト通りにやるよりスマートでしたので大いに参考にさせていただきました(謝罪&感謝)

Hilight Plusのセットアップ

URPで新しいプロジェクトを作成します。Unity2021であれば、テンプレートに3D(URP)コアがありますので、これを選んでプロジェクトを作成します。

3D(URP)のコア

Window -> PackageManagerより、HighLightPlusのセットアップします。
ちなみにHighlight Plusは2段階でインストールします。
まずは、URP版のパッケージをプロジェクトに取り込みます。

URP版だけをインストールしてみます。

パッケージ取り込み後、Project -> Assets -> HighlightPlusBundle -> URPにある、HighlightPlus_URP_Pipeline をダブルクリックしてURP用アセットパッケージをインポートします。

とりあえず全部Importします。

 インポートが終わったら、URPのレンダリングパイプラインにForward Rendererを追加します。
 まずは、Edit -> Project Settins -> Graphics にて設定ページを開き、Scriptable Render Pipeline Setting に設定されているアセット名をダブルクリックします。

Scriptable Render Pipeline Settingsのアセット名をダブルクリック

 インスペクターにUniversal Render Pipeline Assetの設定が開くので、Render List部にセットされているレンダー名をダブルクリックすると設定パネルが開きます。

Render ListにあるRender

 そこからAdd Render Feature を右クリックして表示されるプルダウンメニューからHighlight Plus Render Pass Featureを選択します。

Add Render Feature を右クリック
Highlight Plus Render Pass Featureを選択

 Renderer Feautures に Forward Renderer(Highlight Plus Render Pass Feature)が追加されます。
 これでインポートは完了です。

2.基本的な使い方

 Highlight Plusにはマネージャーを使って全体に統一してエフェクトをかけるやりかたと、GameObject個別にかける方法の2種類の使い方があります。
 今回はGameObjectにエフェクトをかけてみます。

 対象のGameObjectに[Add] -> Script -> Hilight Effect を追加します。
 Preview in Editor にチェックをいれると、エディット中にエフェクトのかかり具合を確認できます。

Scrptの先頭部分

1) highlightスイッチでOn/Offできるエフェクトの設定
・アウトライン、アフターグロウ、インナーグロウ、オーバーレイ、ターゲットマーカーは、highlightスイッチで一括でOn/Offできます。
・Highlight Optionsにある ignoreスイッチを On にすると、これらのエフェクトをすべてオミットすることができます。
 壁透過とヒットエフェクトしか使わないときは On にするとよいでしょう。
・include 項目が children になっていると、子の GameObject すべてを含めてエフェクトがかかります。輪郭などは、一般的に children まで含めて一括でエフェクトを使用しないと正常に表示されません。ですから、通常は ここはいじらずに使うことになると思います。

ハイライトエフェクト部

2) アウトラインの表示 → 消去
 State の Highlightスイッチが On、Highlight Optoions の ignore が Off の状態で、Effectの Outline が 1 になっていると、輪郭が表示されています。(デフォルト状態では表示になっているはずです)
 これを0にすると、輪郭表示が消えます。
 ※アニメシェーダーなどで必要な場合は残しておいても大丈夫です。

アウトラインの設定

3) レアエネミーの表現
・アウターグロウ
 State の Highlightスイッチが On、Highlight Optoions の ignore が Off の状態で、Outer Glowを0~5の間に設定するとアウターグロウが表示されます。アウターグロウは、すこしゆらいで表示されます。
 Dithering を Off にするとディザ表示ではなくなり、すこし見栄えがよくなりますます。(そのかわり描画負荷が増えるはずです)

アウターグロウの設定
黄色でのアウターグロウ(輪郭強調表示)

4) 壁の透過
 See Throughで壁の透過設定ができます。
最初は「Never」になっていますので、これを「When Highligted(HighlightedスイッチOn/Off連動)」か「Always when Occluded(常に有効)」かを選びます。
 標準では透過色は赤色です。また、透過映像がチラチラするのは Noise パラメータによるものなので、これを 0 にすれば下の画像のようになります。

壁などの透過の設定
壁透過

5) ヒットエフェクト
 Hit EXを 0 → 1 にすると、ヒットエフェクトが有効になります。
 ただし、関数から呼び出さなければ意味がありません。
 次のスクリプトで使いかたを説明します。

エフェクトの呼び出しを有効にします

3. スクリプト

 Highlight Plusの各エフェクトは、GetComponent<HighlightEffect>() でコンポーネントを取得し、スクリプトから操作できます。
 なお、using で HighlightPlus を設定してください。
 また、例にないプロパティはインスペクターで操作したいプロパティを右クリックし、Copy Propaty Path で取得できます。コードエディタにペーストして使ってください。(一応例も追記しておきます)

highlightスイッチ(一括スイッチ)
・_highlightPlus.highlighted = true;
アウトラインオフ
・_highlightPlus.outline = false;
ヒットエフェクトを有効にする
・_highlightPlus.hitFxInitialIntensity = 1.0f;
壁透過を常時有効にする
・_highlightPlus.seeThrough = SeeThroughMode.AlwaysWhenOccluded;
壁透過を無効にする
・_highlightPlus.seeThrough = SeeThroughMode.Never;

// Highlight Plus おためしスクリプト by K1togami
using UnityEngine;
using HighlightPlus;


public class HighlightControll : MonoBehaviour
{
    private  float timeCount = 0f;
    HighlightEffect _highlightPlus;
    
    void Start()
    {
        _highlightPlus = GetComponent<HighlightEffect>();

        // スクリプトからアウターグロウを調整
        _highlightPlus.glow = 1.0f; // 0.0f~5.0f
    }

    void Update()
    {
        timeCount += Time.deltaTime;
        if( timeCount > 1.0f )
        {
            timeCount = 0;
            // ヒットエフェクト
            _highlightPlus.HitFX();
        }
          
    }
}
1秒ごとに光ります

4. 技術的な補足

 ヒットエフェクトは、主にダメージ表現に追加います。毒の場合紫色にしたい場合などが考えられます。
 その場合は、inspector の Hit FX の Color をクリックして、直接色を変更することもできます。

Colorの変更

 この色は、スクリプトから変更することもできます。
 紫色に近いのは「Color.magenta」ですが、これにはあまり良い記憶がありません。ですから、RGB値を直接指定することが多いでしょう。

// 赤
_highlightPlus.hitFxColor = Color.red;

// マゼンダ(マテリアルが壊れたときのトラウマ色)
_highlightPlus.hitFxColor = Color.magenta;

// 明るい紫
_highlightPlus.hitFxColor = new Color(1f,0.4f,0.8f,1f);

 今回は以上となります。透過処理やオーバーレイ処理など、自分で作ることの難しい処理がアセットでは簡単に済んでしまうのは、ゲーム制作者にとってはありがたいことです。
 そして、あらためて Raspberly さんに感謝します。

 ではまた。ゲーム制作者魂がともにあらんことを。(k1t)

ex.関係ある記事

ex2.関係ありそうな記事


この記事が気に入ったらサポートをしてみませんか?