takeyohのおぼえがき

気になったこと、試したことの記録です。

オブジェクトをリプレイスして、車両を拡張する。

car modを作るのは大変ですが、トラックはもっと大変です。頭の部分と荷台の部分を作らなければなりません。

ですが、頭の部分はすでにあるcar modを使わせていただいて、荷台部分だけ足すようにすれば少し楽かなと思い、覚書です。

 

すでにあるmodに別のkn5を追加するには、extensionのMODEL_REPLACEMENTを使うと思います。元のcar modのkn5に手を付けることなく、車のあるパーツ部分を自分のオリジナルのパーツに交換することができます。

今回は、このトラックを使わせていただくことにしました。

ac.totsugeki.com

このトラックでけん引するトレーラを作成します。これの作り方は普通の車づくりと同じですが、オブジェクトのポジション(今回だとトラックとトレーラの連結部分)がぴったり合うように配置しておきます。

作成したトレーラはこれです。ショベルカーを載せました。

(ショベルカーはフリーのFBXです。)

参考までに、トラックとつなぐとこうなります。

(実際の荷台づくりにトラックの部分は使いません。)

連結部分の位置があっていればOKです。

 

作成した荷台部分をksEditorでkn5にします。こんな感じになりました。

このkn5ファイル(ここではtrailer.kn5とします。)をcar modのextensionフォルダ内にコピーします。

で、リプレイスの設定を同じフォルダのext_config.iniに書いても良いのですが、それだともともとのcar modに対して常に荷台がくっついてしまいます。

もともと用意されているSKINも利用したいので、ここは荷台専用のSKINを追加します。

SKINフォルダにあったblackというフォルダをコピーしてexcavatorというフォルダを作っています。

ui_skin.jsonはこのSKINに関連する情報の記載です。skinnameをExcavatorと修正しました。

extensionの設定をこのフォルダで書くと、このSKINを選択したときのみ反映されます。

[INCLUDE: common/materials_carpaint.ini]
CarPaintMaterial = SKIN_color_oa_new, SKIN_Kysor, SKIN_fender_ao
DisableDev = 1

[Material_CarPaint_Solid]
AmbientSpecular = 0.3
ColoredSpecular = 0.3
AmbientSpecularEXP = 1.0
BrightnessAdjustment = 0.3
SpecularBase=1.0

[MODEL_REPLACEMENT_0]
FILE=bk_truck_kent_t800.kn5
INSERT=trailer.kn5
INSERT_AFTER=Kenworth T800 2009 Road Train 8x4

朱字部分が追記した部分です。

FILEは元のcar modのkn5ファイルを指定します。

INSERTは先ほど作成した荷台のkn5ファイルを指定します。

INSERT_AFTERは元のcar modでここに指定したオブジェクト・エンプティがロードされた後にリプレイスされるという設定です。

(”Kenworth T800 2009 Road Train 8x4”は元のcar modの車体に割り当てられたエンプティ名です。これがロードされるとtrailer.kn5が置き替えされる・・・と。)

このリプレイスを指定するエンプティ・オブジェクトですが、コレクション直下のエンプティ・オブジェクトでないとだめなのでしょうか・・・。

(階層下のオブジェクトを指定してみましたがうまく反映されなかったのですが、直下のエンプティ・オブジェクトでなければだめなのかどうかは未検証です。)

 

さらに、荷台部分についているブレーキライト、リバースライト、ターンライトやアニメーション設定なんかも書き込んでおきます。

 

設定したら、CMで作成したSKINを選択します。

ただし、荷台部分は設定しましたが、カスタムショールームではこのリプレイス設定は反映されないので、トラック部分しか表示されません。

 

SKINを選択した状態でゲームをスタートさせると反映されます。

 

今回使わせていただいたcar modは以前に覚書で書いた複数タイヤの回転アニメーションの技が使われています。そのため、追加した荷台のkn5に入っているタイヤに同じ命名規則でエンプティを作成すると、頭のトラックのタイヤと連動して荷台のタイヤも回転します。
トラック側にTRANSMISSION_L_0、TRANSMISSION_L_1、TRANSMISSION_R_0、TRANSMISSION_R_1が設定されているので、荷台のタイヤには、TRANSMISSION_L_2~TRANSMISSION_L_4とTRANSMISSION_R_2~TRANSMISSION_R_4を割り当てました。

 

走らせた動画はこちらです。

youtu.be

 

ただ、リプレイス機能は部分的なパーツを想定されているので、ここまで大きなオブジェクトをリプレイスしてしまうと、colliderの整合性が取れなくなります。

ゲーム内では、荷台部分に当たり判定がないので、正確に当たり判定を保ちたい場合は、colliderの入れ替えが必要ですね。(元のcar modデータを変更することになってしまいます)

 

(追伸)

一つのcar modで複数の車を登場させると、オブジェクトやマテリアルの制御が超絶めんどくさくなりますが、car mod(kn5)をリプレイスさせる方法なら簡単かも?!ということで、お試ししました。

youtu.be

荷台をトラックにリプレイスでつなぐのではなく、トラック+荷台(キャリア部分)を一つのモデルとして作り、車を載せる部分にほかのcar mod(kn5)を差し込んでいく方法です。

トラックのcar modにあらかじめ別車両をリプレイスするためのエンプティを追加しておき(とりあえず名前は"car1"です)、下記をext_config.iniに追記してます。

[MODEL_REPLACEMENT_0]
FILE=bk_truck_kent_t800.kn5
INSERT=serena.kn5
INSERT_AFTER=car1
OFFSET = 0, 0.746841,-9.12075

車(セレナ)の置き場所はOFFSETで調整します。

ただ、マテリアルで使っている画像名が被る(トラックと追加車で外装マテリアルで使う画像が同じ名前(body.dssとか))と、リプレイスした車の外装が変わってしまうのでそこは別ファイルへの差し替えなどちょっと調整が必要ですが、すべての車を一つのmodにして編集するよりははるかに楽ちんです。

 

ちなみに、動画でタイヤが埋まってますが、assettoserverのAI車として走らせるとタイヤがもぐってしまうクセがあるためです。実際のmodはちゃんと地面に設置しています。

/* -----codeの行番号----- */