BlenderとUnityで作ったものをVR(Meta Quest/Oculus Link)で動かします

VRで焚き火する #15 開閉式のオイルライターに揺らめく火をつける【Unity】

 
前回の記事では、ポリモーフィズムというものを使って、使い捨てライターに火をつけてみました。
 
アセットストアを見ていると、更に良い感じのライターを見つけました。
今回は、開閉式のオイルライターに火をつけてみます。前回の実装のおかげで、スクリプトは1つ作るだけで済みました。



開発環境

・Unity 2020.3.15f2(High Definition RP 10.5.1)
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Meta Quest 2(Oculus Link利用)
・炎アセット:Ignis – Interactive Fire
 

(1) オイルライターのアセットを見つけました

今回使わせていただいたのは「Bush-Craft Extension Pack」アセットのオイルライターです。
 
以前、焚き火の薪を準備した時と同じメーカー様でした。
ありがとうございます!
 

open/closeの2種類あった

オイルライターのPrefab を見てみると、
・Lighter-classic_open_n
・Lighter-classic_closed_n
の2種類ありました。
 
このPrefabを使いわけると開閉式のライターができそうですね。
こちらのライターもクオリティ高いです。
 
Material設定で Metallic や Smoothness の値を高めにすると、良い感じに金属の光沢が出てきました。
かっこ良いです。
 


(2) ライターに Ignis を設定する

オイルライターに炎アセット Ignis を設定して、火がつくように設定していきます。
 
基本的な設定方法は、前回の使い捨てライターと同じです。
 

前回作成したFlameオブジェクトを追加する

前回の記事で作った「Ignis用のそこそこ大きい見えないFlameオブジェクト」を今回も使います。
 
Flameオブジェクトを複製して、オイルライターの Lighter-classic_open_n の下に移動します。 
Flameオブジェクトは Point Light も設定済みでしたね。
 
次に、Mesh Renderer のチェックを外します。
これで、オブジェクトが見えなくなります。
 

2つのオブジェクトをまとめる

2つのライターオブジェクトを扱いやすくするために、専用のオブジェクトを作っておきましょう。
 
Hierarchy で空オブジェクトを作成し、名前を Lighter-classic に変更します。
ここに、Lighter-classic_open_n と Lighter-classic_closed_n を移動しておきます。
これで良いですね。
 

2つのオブジェクトを重ねる

次に、Transform の値を同じにすることで、2つのオブジェクトを重ねた状態にします。
 
重なりました。
Transform の値を Copy Component でコピーし、Pate Component Values で貼りつけると楽ですね。
 
これで、片方のオブジェクトだけがアクティブ状態になれば、ライターが空いている/閉まっているように見えます。
 

(3) 新しくスクリプトを作る

前回の使い捨てライターの時は、オブジェクト指向のポリモーフィズムを使った実装をしました。
 
[実装1] イベントメソッド用のインターフェイスを作る
[実装2] オン/オフ用のライタークラスを作る
[実装3] 薪クラスを修正する
[実装4] 既存スクリプトに追加する
の4つを実装したのでした。
 

オイルライタークラスを作るだけ!

今回は [実装2] だけでOKです!
 
[実装1]はそのまま使えますし、[実装3]は今回の作業とは関係ありません。
 
仮に、ポリモーフィズムを使った実装でなければ、[実装4]で既存スクリプト(TransformMover.cs)に対して、「今回作成したオイルライター専用のスクリプト(クラス)を取得して、DoubleTriggerActionメソッドを実行する」という改修を行う必要がありましたが、その作業も必要ありません。
 
既存スクリプトを修正しなくて良いということは、それらの動作確認試験も必要ないということ。
非常に楽です。
 

[実装1] オン/オフ用のオイルライタークラスを作る

オン/オフ用のオイルライタークラスを作ります。
 
このクラスの DoubleTriggerActionメソッド を実行すると、Lighter-classic_open_n と Lighter-classic_closed_n のアクティブ状態を切り替えることができます。Flameオブジェクトは常にアクティブ状態(=Ignis で火がついている状態)ですので、ライターの開閉状態の切り替えと火のオン/オフが同時にできますよ。
 
using UnityEngine;

namespace Amaotolog
{
    /// <summary>
    /// オイルライタークラス
    /// </summary>
    public class LighterClassic : MonoBehaviour, ITriggerAction
    {
        // アクション処理(火を点ける/消す)
        public void DoubleTriggerAction()
        {
            GameObject objClose = transform.Find("Lighter-classic_closed_n").gameObject;
            GameObject objOpen = transform.Find("Lighter-classic_open_n").gameObject;

            // アクティブ状態を切り替える
            objClose.SetActive(!objClose.activeSelf);
            objOpen.SetActive(!objOpen.activeSelf);
        }
    }
}
 
基本的な実装は、ライタークラス(Lighter.cs)と同じです。
そちらをご参考くださいね。
 


(4) コンポーネントとスクリプトを追加する

残りの設定をやっていきます。
 

オイルライターオブジェクトに設定する

オイルライターオブジェクト(Lighter-classic)に対して、以下を設定します。
 
・Tag(タグ)を「Grab」に変更する。
・オイルライタークラス(LighterClassic)を追加する。
RigidbodyBox Collider を追加する。
・「Rigidbody -> Collision Detection」の設定を Continuous Dynamic に変更する。
 
 

揺らめく火を設定する

ライターの炎は普通のライトなので単純に光っているだけです。
 
これを揺らめくようにするには、ライトオブジェクト(Point Light)に「FlameLightFlicker」を追加します。
「/OAVA-Flame/Scripts/Additional/」以下にあります。
 
揺らめきの強さや速度などを Inspector で設定できるのが便利ですね。もちろん焚き火でも使うことができますよ。
 
これですべての作業が完了しました。
 

(5) 動画で確認してみる

VRモード(Oculus Link)で確認してみましょう。
 

オイルライターで火をつける

動画で確認してみます。
オイルライターをつかんで、更にトリガーを押すとライターが開いて火がつきました。
火を消すと、ライターも閉じてますね。
 


まとめ 

焚き火に火をつけるためにオイルライターを作ってみました。
 
前回の記事でポリモーフィズムを使った実装をしていたので、今回はスクリプト作成が1つで済みました。既存部分の試験も必要なかったので、かなり楽でしたよ。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

VRで焚き火する #14 ポリモーフィズムで使い捨てライターに火をつける【Unity】

VRで焚き火する #16 Magica Clothのスカートでアウトドアチェアに座る【Unity】


最近のコメント

だーしゅ
IT関係のお仕事してます。
3Dモデルの女の子は「ブログノ・スージー」。VRは楽しいですね。

[当ブログについて]