既存Scriptを利用したギミック作成の一例です。
特に家Modで使えそうな、レバーでなにかを表示させ、同時に何かを非表示にする機能を作ってみます。例えば、レバーの切り替えで子供部屋をフォロワー部屋にする、バルブをひねるとシャワーが出る、というような使い方ができます。
作業で「
Reference Batch Action Window」を使います。今回みたいに大量のオブジェクトにEnable Parentを設定するとき、非常に便利です。
今回は例として、「寝室」と「作戦会議室」をレバーで切り替える機能を作ってみます。
1.寝室を作る
殺風景ですが、とある地下室に寝室風の部屋を作りました。
内装が終わったら、Staticオブジェクトの一つである「XMarker」を一つ配置します。上画像の左下にある赤いバツ印がそれです。
この「XMarker」を、寝室に配置したオブジェクトにEnable Parentとして設定していきます。
ちなみにEnable Parentというのは、オブジェクトの表示非表示を制御するための親オブジェクトとなります。親オブジェクトが表示非表示されると、子オブジェクト側もそれに連動して表示と非表示が切り替わります。親オブジェクトのみを操作することで大量の子オブジェクトの表示と非表示を切り替えられる、とても便利な機能です
通常だと設定は、子となるオブジェクト側をダブルクリックしてReferenceウィンドウを開き、「Enable Parent」というタブ内で親オブジェクトを選択します。でも大量の子オブジェクトがあると、作業がたいへんです。
なので「
Reference Batch Action Window」を使って一括処理します。
まずは子オブジェクトとなる寝室の家具類をCtrlキーを押しながら複数選択。
選択できたら、上部メニューより「View > Reference Batch Action Window」を選びます。すると上SSみたいなウィンドウが開きます。
左側の空欄に選択中のオブジェクトが表示されているのを確認したら、右側のActionから「Set enable parent」を選択。ウィンドウ下部のTarget Referenceのところで、XMarkerを選択。
この状態で「Do」ボタンを押します。
すると一発で、選択中のすべてのオブジェクトにEnable Parentの設定がつきます。設定をつけ損ねたオブジェクトがあれば、あとから個別に処理するなりBatch Action Windowでもう一度処理するなりすればOKです。
まずはこれで寝室の設定が終わりました。
今度は会議室を作っていきましょう。でもその前に、寝室のオブジェクトが邪魔なので見えなくしておきたいです。
寝室のオブジェクトを見えなくするには、まずXMarkerを選択して右クリック。メニューから「Select Enable State Children」を選びます。
すると、Enable Parentの子オブジェクトが全て選択されます。この状態で、「1」キーを2度押しましょう。選択中のオブジェクトを一時的に非表示にできます。もう一度全部表示したいときはCellをロードしなおすか、「F5」キーでリロードするかしてください。もしくはCell Viewのオブジェクト一覧に水色の文字色に変わったオブジェクトがあるので、それを選択してからRender Viewをアクティブにし、「1」キーを一度押すと個別に表示させることができます。
寝室のオブジェクトを非表示したところ。会議室の内装がしやすくなりました。
ちなみにオブジェクトを選択した状態で「1」キーを1回だけ押すと、オブジェクトが半透明になり触れなくなります。オブジェクトの位置を確認しながら作業したいけど、間違って動かすようなことは避けたい時に使うようです。
2.会議室を作る
会議室を作りました。ドラゴン退治の作戦立案中みたいな内装です。
今回も会議室のオブジェクトを制御するため、専用のXMarkerを配置。
Batch Action WindowでParent Enableの設定をしました。
Cellをリロードしてオブジェクトを全部表示したところ。
これで二つの部屋ができました。あとは二つのXmarkerを制御して、寝室を会議室を入れ替えられるレバーを設置すればOKです。
3.会議室用のXMarkerにParent Enableを設定する
実はレバーで制御できるのはオブジェクト1個だけです。なのでここではさらに、会議室用XMarkerのEnable Parentに、寝室用のXMarkerを設定します。ただし、「Set Enable State to Opposite of Parent」というところにチェックを入れました。ここにチェックを入れると、親オブジェクトと表示非表示が逆に連動します。
つまり寝室用XMarkerが非表示になると、会議室用XMarkerが表示になります。これで寝室と会議室の入れ替えを、寝室用XMarkerを制御するだけで行えるようになりました。
最終的にはこうなります。
寝室用Markerから会議室用Markerに矢印っぽい線がつながっていれば、正しい設定になっています。
4.切り替え用レバーを作る
レバーはActivatorオブジェクトにカテゴライズされています。
「MetalLever01」というレバーがあるので、それをDuplicateでコピーして新規オブジェクトとして作成。IDは自分オリジナルのものに変更しておきます。
それからウィンドウ右側のScripts欄で「Add」ボタンをクリック。
小さなウィンドウが開いて、Scriptの一覧が出ます。Filterのところに"activate"と入力し、「defaultActivateToggleLinkedRef」というScriptを選択してOKボタンを押してください。Script名はたぶん全部小文字で表記されています。
Scriptがリストに追加されたら設定完了。OKボタンを押してウィンドウを閉じます。
この「DefaultActivateToggleLinkedRef」は、自分がアクティベートされたら、LinkedRefで紐づけられたオブジェクトの表示非表示を切り替える処理を行ってくれます。
5.レバーを設置する
あたらしく作ったレバーを、Cellに配置します。
配置したら、レバーをダブルクリックしてReferenceウィンドウを開けます。
Linked Refタブを選択して、寝室用XMarkerを設定。Keywordは空欄(NONE)のままで。
これで設定完了。レバーを操作するたびに、寝室と会議室が入れ替わるはずです。
6.テストプレイ
ゲーム内で確認。最初は寝室になっています。
レバーを操作。
会議室に早変わり。
レバーを何度か操作して、設定間違いがないか確認しておきます。
以下、その他の細かい注意点です。
- リスポンする区画では状態を保持するため、レバーと寝室用XMarkerのRespawnsのチェックを外した方がいいかも。各オブジェクトのReferenceウィンドウを開いたら、下の方にチェックボックス並んでいるので、設定しておいてください。
- レバー操作で消えるオブジェクトにプレイヤーが取得できるものがあった場合、レバー操作によって取得されたオブジェクトの状態も随時変化する。例えば会議室のコップを取得した後、レバー操作をして寝室を出現させる。その状態で持ち物欄からコップを捨てると、捨てたと同時にコップが消える。さらにこの状態でレバー操作をして会議室を出現させると、捨てられたコップが捨てた位置に現れて落っこちる……という動作になります。ユーザーが混乱するので、取得できるアイテムは極力使わない方がいいかもしれません。
- 今回、寝室用と会議室用で2つのXMarkerを使用しました。が、会議室のオブジェクト全てで寝室用XMarkerをEnable Parentとして設定し、「Set Enable State to Opposite of Parent」にチェックを入れても同じ結果が得られます。目的に応じて好きな方で設定してみてください。部屋ごとにMarker用意した方が、部屋を編集し直す際には楽だと思います。
今回使った「defaultActivateToggleLinkedRef」というScriptは非常に使い勝手がいいです。プレイヤーがアクティベートできるオブジェクトであれば、多分どれにつけても使えます。これだけで色々と遊べると思いますので、ぜひお試しください。
前へ |
次へ
1. 大変参考になりました
その都度切り替えて・・・みたいな
ヒントを頂けたのでトライしてみたいと思います
ありがとうございました
Re:大変参考になりました