何を作りますか?
What are you making?
作りたいものを選んでください。どのページにも出てくる手順(Blender の基本、jar に固めて配る、確かめかた)は「共通」にまとめてあります。
Pick what you want to make. Steps that every page needs (Blender basics, packing a jar, checking it in game) live under "Common".
1このページについて
1About this page
車やパーツを足すのに Java は要りません。JSON・モデル・テクスチャ・音だけの jar を作って mods/ に入れます。このページには、何を作る人にも共通の手順をまとめてあります。
You do not need Java to add cars or parts. You build a jar holding only JSON, models, textures and sounds, and drop it in mods/. This page holds the steps everyone needs, whatever they are making.
やりたいことから探す
Find what you want to do
| やりたいこと | どこを読むか |
|---|---|
| まず見本を動かしてみたい | 共通の 4 章 |
| Blender を触ったことがない | 共通の 3 章 |
| 自分の車を走らせたい | 車の 1 章から順に |
| ライト・透ける窓・映るミラーを付けたい | 車の 3 章 |
| エンジン音を変えたい | 車の 7 章 |
| 走り(加速・曲がりかた)を決めたい | 車の 8 章 |
| ホイールを作って換装画面で選べるようにしたい | ホイールの 1 章・2 章 |
| 性能の違うタイヤを作りたい | ホイールの 3 章 |
| ターボ・ブローオフバルブを作りたい | パーツの 1 章 |
| ウイング・バンパーなどの外装パーツを作りたい | パーツの 2 章 |
| マフラーを作りたい | パーツの 3 章 |
| jar にして配りたい | 共通の 4 章 |
| うまく動かない | 共通の 6 章 |
| I want to… | Read |
|---|---|
| See the example running first | Common, chapter 4 |
| Learn Blender from zero | Common, chapter 3 |
| Drive my own car | Car guide, chapter 1 onwards |
| Add lights, see-through windows, working mirrors | Car guide, chapter 3 |
| Change the engine sound | Car guide, chapter 7 |
| Set how it drives (acceleration, handling) | Car guide, chapter 8 |
| Make a wheel players can pick in the parts screen | Wheel guide, chapters 1 and 2 |
| Make tyres with different grip | Wheel guide, chapter 3 |
| Make a turbo or blow-off valve | Parts guide, chapter 1 |
| Make body parts such as wings and bumpers | Parts guide, chapter 2 |
| Make an exhaust | Parts guide, chapter 3 |
| Pack it into a jar and share it | Common, chapter 4 |
| Fix something that doesn't work | Common, chapter 6 |
要るもの
What you need
| Blender | 5.2.0 以降を想定(それより前でも通るはずですが、書き出し画面の項目名が少し違うことがあります)。無料。blender.org。モデルの要らない部品(ターボなど)だけなら不要 |
|---|---|
| テキストエディタ | JSON を書きます。メモ帳で構いません |
| Minecraft | KurumaMod を入れたもの。確かめながら作ります |
| 絵を描くもの | テクスチャを貼るときだけ。貼らなくても走ります |
| Blender | Written against 5.2.0 (earlier versions should work; a few export labels differ). Free, from blender.org. Not needed for parts without a model (a turbo, say) |
|---|---|
| Text editor | For the JSON files. Notepad is fine |
| Minecraft | With KurumaMod installed. You check your work as you go |
| Paint program | Only for a texture. The car drives without one |
寸法をぴったり合わせる必要はありません。「このメッシュは何 m で作った」と JSON に書けば、ゲームがその比で大きさを合わせます。
直すたびに Minecraft を再起動する必要もありません。ゲームの中で F3+T を押せば、モデルもテクスチャも読み直されます。
You do not have to hit exact dimensions. Write "this mesh was built at N metres" in the JSON and the game scales it to fit.
You do not have to restart Minecraft after each edit either. Press F3+T in game and the model and texture reload.
2全体像
2The whole picture
モデルのある車や部品は、5 つの手順で作ります。どの章も、このどれかを詳しくしたものです。
A car or part with a model takes five steps. Every chapter is one of them in detail.
やること
What you do
- Blender形を作る。(車の 1〜4 章、ホイールの 1 章、パーツの 2〜3 章)
- BlenderOBJ で書き出す。(車の 5 章)
- ファイル決まったフォルダへ置く。(車の 6 章)
- ファイルJSON に「何 m で作ったか」を書く。(車の 6 章)
- ゲームF3+T で読み直して見る。(共通の 5 章)
これで、直すたびに 5 へ戻って、再起動せずに確かめられます。はじめは粗い箱のような車で 1→5 を一周すると、あとは Blender の作業に集中できます。
- BlenderModel it. (Car guide, chapters 1–4; Wheel guide, chapter 1; Parts guide, chapters 2–3)
- BlenderExport it as OBJ. (Car guide, chapter 5)
- FilePut it in the right folder. (Car guide, chapter 6)
- FileWrite "how many metres I built it at" into the JSON. (Car guide, chapter 6)
- GamePress F3+T and look. (Common, chapter 5)
Each time you fix something, go back to step 5 — no restart. Push a crude box of a car through 1→5 first; after that, the rest is Blender work.
必要なときだけ
Only when you need it
モデルの要らない部品を作りたい(ターボなど)
ターボ・ブローオフバルブ・タイヤの性能だけを変える部品は、1・2 が要りません。JSON を置いて(3)、ゲームで確かめる(5)だけです(パーツの 1 章)。
Make a part without a model (a turbo, say)
Turbos, blow-off valves and parts that only change performance skip steps 1 and 2. You place the JSON (3) and check it in game (5) (Parts guide, chapter 1).
仕組みを知りたい(assets/ と data/)
パックの中身は 2 つに分かれます。
assets/… 見た目(モデル・テクスチャ・音・表示名)。各プレイヤーのゲームが読む。F3+T で読み直すdata/… 走りと部品の中身(諸元・部品の性能・初期装備)。サーバーが読む。/reloadで読み直す
jar 1 つにまとめれば、両方が一緒に読まれます。
How it works (assets/ and data/)
A pack has two halves.
assets/— the looks (models, textures, sounds, display names). Read by each player's game. Reloads with F3+Tdata/— driving and part contents (spec, part performance, default parts). Read by the server. Reloads with/reload
Put both in one jar and both are read together.
3Blender はこれだけ覚える
3Just enough Blender
Blender を触ったことがない人向けに、このガイドで使う操作だけを並べます。使える人は 車の 1 章へ。
For readers who have never opened Blender: only the operations this guide uses. If you know Blender, skip to chapter 1 of the Car guide.
覚えること
What to learn
- Blender真ん中の広い所(3D ビューポート)で形を作る。車体・窓・ライトのように分けたかたまり 1 つ 1 つを「オブジェクト」と呼ぶ
- Blender右上の一覧(アウトライナー)で、オブジェクトの名前を変える。名前をダブルクリックする
- Blender単位はメートルのまま使う。床のマス目 1 つが 1m
- Blender車の前を −Y、上を +Z に向けて作る。テンキーの 1 で、車を正面から見た向きになる。車の左が +X
- Blender位置はワールド原点(赤い線と緑の線が交わる点)に合わせる。オブジェクトを選ぶと出るオレンジの点は気にしない
これで、車の 1 章から先の手順を進められます。
- BlenderBuild in the big area in the middle (the 3D viewport). Each separate lump — body, window, light — is an "object"
- BlenderRename objects in the list at the top right (the outliner). Double-click the name
- BlenderKeep the units in metres. One floor square is 1 m
- BlenderBuild with the front of the car towards −Y and up towards +Z. Numpad 1 shows the car from the front. The car's left is +X
- BlenderLine things up with the world origin (where the red and green lines cross). Ignore the orange dot that appears on a selected object
You can now follow the steps from chapter 1 of the Car guide.
この MOD では、オブジェクトやマテリアルの名前がゲームでの役目を決めます。light_head はヘッドライトとして点き、glass で始まる名前は透けます。名前は決まりどおりに付けてください(車の 3 章)。
In this mod, object and material names decide what something does in game. light_head lights up as a headlight; names starting with glass turn see-through. Name things exactly as the rules say (chapter 3 of the Car guide).
必要なときだけ
Only when you need it
半分だけ作って左右対称にしたい(ミラーモディファイア)
半分を作って、ミラーモディファイアで反対側を作ります。書き出すときに自動で適用されるので、「適用」を押す必要はありません。
ただし、後ろが映る左右のドアミラーだけは別々のオブジェクトにします。モディファイアで 1 つにすると、左右に同じ景色が映ります(車の 3 章のミラー)。
Build half and mirror it (mirror modifier)
Build one half and let a mirror modifier make the other. The exporter applies it for you, so there is no need to press "Apply".
The exception: the two reflecting door mirrors must be separate objects. Merged by the modifier, both show the same view (mirrors, chapter 3 of the Car guide).
スクリプトを実行したい(Scripting タブ)
- 上のタブから
Scriptingを開く 新規を押す- スクリプトを貼り付ける
- Alt+P(または ▶ 実行)を押す
車の 1 章で、ゲージを置くのに一度だけ使います。
Run a script (the Scripting tab)
- Open the
Scriptingtab at the top - Press
New - Paste the script
- Press Alt+P (or the ▶ Run button)
You need it once, to place the gauge in chapter 1 of the Car guide.
仕組みを知りたい(なぜオレンジの点は関係ないのか)
書き出されるのは、各頂点のワールド座標です。オブジェクト原点(オレンジの点)は書き出されないので、どこにあっても構いません。ゲームはワールド原点を基準に車を置きます。
Blender の向き(前 −Y・上 +Z)とゲームの向きの読み替えは MOD がやります。書き出し画面の向きの設定は触りません(車の 5 章)。
How it works (why the orange dot does not matter)
The exporter writes each vertex in world coordinates. The object origin (the orange dot) is not written, so it can sit anywhere. The game places the car relative to the world origin.
The mod converts Blender's axes (front −Y, up +Z) to the game's. Leave the axis settings in the export dialog alone (chapter 5 of the Car guide).
最小の車を作る
Make a minimal car
新しい車を 1 台ゲームに出すのに、これだけは要るという流れです。各手順の詳しいことは、手順の最後にある章にあります。ここでは、パックの名前を mypack、車種の名前を ae86 とします。
The bare minimum to get one new car into the game. Each step links to the chapter with the details. Here the pack is called mypack and the car ae86.
手順
Steps
- Blenderゲージを置く。→ 1 章
- Blenderゲージのタイヤに合わせて車体を作る。原点は「地面の高さ・前後輪の中間・左右の中央」→ 2 章
- Blender車体を
ae86.objに書き出す。Selected Onlyだけ入れて、ほかは既定のまま → 5 章 - ファイル見本の
carpack/example/をフォルダごとコピーし、kurumamod_example_carpackをすべてmypackに置き換える。フォルダ名 2 つ(assets/の下とdata/の下)、いちばん上のロゴ画像のファイル名、そしてすべてのファイルの中身(toml と、JSON の中のパス)。使える文字はa-z・0-9・_だけ → 6 章 - ファイル車体を置く。
ae86.objとae86.mtlをassets/mypack/models/entity/に、テクスチャをassets/mypack/textures/entity/ae86.pngに。絵がまだ無ければ、白く塗った小さな PNG でよい → 4 章 - ファイル見た目の JSON を書く。
assets/mypack/vehicles/sample.jsonをae86.jsonに改名して、中身をこうする:
タイヤは KurumaMod のものを借りている → 6 章{ "body": { "model": "mypack:models/entity/ae86.obj", "texture": "mypack:textures/entity/ae86.png" }, "wheel": { "model": "kurumamod:models/entity/wheel.obj", "texture": "kurumamod:textures/entity/wheel.png" } } - ファイル諸元の JSON を書く。
data/mypack/cars/sample.jsonをae86.json(見た目の JSON と同じ名前)に改名して、中身をこうする:
書いていない項目は既定の車と同じになる → 8 章{ "values": { "mass": 1200.0 } } - lang表示名を lang に書く。
assets/mypack/lang/ja_jp.jsonとen_us.jsonに"car.mypack.ae86": "AE86"→ 6 章 - ファイルフォルダの中身を jar に固めて、
mods/に入れる。フォルダごとではなく中身を固める → 共通の 4 章 - ゲーム起動して、クリエイティブの「KurumaMod」タブから車を出して乗る。→ 共通の 5 章
これで、自分の車体で、既定の車と同じように走る車が 1 台増えます。
- BlenderPlace the gauge. → chapter 1
- BlenderBuild the body around the gauge wheels. Origin at ground level, halfway between the axles, on the centreline → chapter 2
- BlenderExport the body as
ae86.obj. Tick onlySelected Only; leave the rest at defaults → chapter 5 - FileCopy the whole
carpack/example/folder and replace everykurumamod_example_carpackwithmypack. That is two folder names (underassets/and underdata/), the file name of the logo image at the top, and the contents of every file (the toml files and the paths inside the JSON). Use onlya-z,0-9and_→ chapter 6 - FilePut the body in place.
ae86.objandae86.mtlgo inassets/mypack/models/entity/, the texture inassets/mypack/textures/entity/ae86.png. No art yet? A small all-white PNG will do → chapter 4 - FileWrite the look JSON. Rename
assets/mypack/vehicles/sample.jsontoae86.jsonand make it:
The wheels are borrowed from KurumaMod → chapter 6{ "body": { "model": "mypack:models/entity/ae86.obj", "texture": "mypack:textures/entity/ae86.png" }, "wheel": { "model": "kurumamod:models/entity/wheel.obj", "texture": "kurumamod:textures/entity/wheel.png" } } - FileWrite the spec JSON. Rename
data/mypack/cars/sample.jsontoae86.json(same name as the look JSON) and make it:
Anything not written stays as on the default car → chapter 8{ "values": { "mass": 1200.0 } } - langAdd the display name to lang:
"car.mypack.ae86": "AE86"inassets/mypack/lang/en_us.jsonandja_jp.json→ chapter 6 - FileZip the folder's contents into a jar and put it in
mods/. Zip what is inside the folder, not the folder itself → chapter 4 of Common - GameStart the game, take the car from the "KurumaMod" creative tab and get in. → chapter 5 of Common
You now have one more car: your body, driving like the default car.
必要なときだけ
Only when you need it
jar を作らずに、まず見た目だけ確かめたい
リソースパックで KurumaMod の既定の車を自分の車体に差し替えれば、jar を作らずに F3+T で何度でも試せます。手順は6 章の「A」にあります。
Check the looks first, without building a jar
Override KurumaMod's built-in car with your body using a resource pack. No jar needed, and F3+T reloads it as often as you like. See route "A" in chapter 6.
もっと作り込みたい
Go further
| What you want | Where |
|---|---|
| Working lights, see-through windows, reflecting mirrors | Chapter 3 |
| Paint a texture | Chapter 4 |
| Fix the seat position or the body size | Chapter 6 |
| Change the engine sound | Chapter 7 |
| Change how it drives (weight, engine, suspension) | Chapter 8 |
| Fit your own wheels | Chapter 1 of the Wheel guide |
| Make wings or bumpers swappable | Chapter 2 of the Parts guide |
直したものを入れ直したい
assets/の中(モデル・テクスチャ・見た目の JSON・lang)を直したら、ゲームで F3+Tdata/の中(諸元)を直したら、ゲームで/reload
jar に入れて試しているときは、jar を作り直して入れ替え、ゲームを起動し直します。
Reload what you changed
- After changing anything in
assets/(model, texture, look JSON, lang), press F3+T in game - After changing anything in
data/(the spec), run/reloadin game
If you are testing from a jar, rebuild the jar, swap it in and restart the game.
うまくいかないとき
- MOD 一覧に出ない … フォルダごと jar に固めた(
META-INF/が jar の直下にない)。またはmodIdに-や.を使った - タブに車が出ない …
data/mypack/cars/ae86.jsonの場所か、JSON の書き方が違う。理由はログに出る - 出てくるが、既定の車の姿のまま … 見た目の JSON のファイル名が諸元と違う。または
body.modelのパスか名前空間(mypack:)が違う - 表示名が
ae86のまま … lang のキーがcar.mypack.ae86になっていない - 車体が大きすぎ・小さすぎ・タイヤとずれる … ゲージに合わせて作れていない。
designWheelBaseとdesignWheelRadiusに実際の寸法を書く(6 章)
ほかの症状は共通の 6 章にあります。
When it doesn't work
- Not in the mod list — you zipped the folder itself (
META-INF/is not at the top of the jar), ormodIdcontains-or. - No car in the tab —
data/mypack/cars/ae86.jsonis in the wrong place or not valid JSON. The reason is in the log - It appears, but with the default car's body — the look JSON's file name differs from the spec's, or the
body.modelpath or namespace (mypack:) is wrong - The display name shows as
ae86— the lang key is notcar.mypack.ae86 - The body is too big, too small, or off from the wheels — it does not match the gauge. Write your real sizes into
designWheelBaseanddesignWheelRadius(chapter 6)
Other symptoms are in chapter 6 of Common.
1ゲージを置く
1Place the gauge
車体を作る前に、寸法の目安になる枠(ゲージ)を Blender に置きます。ゲージに合わせて作れば、JSON の寸法は既定のままで済みます。
Before you model, put a reference frame (the gauge) into Blender. Build to it and the sizes in the JSON can stay at their defaults.
やること
What to do
- Blender上の
Scriptingタブを開き、新規(New)を押す。 - Blender
modeling_tools/blender_gauge.pyの中身を全部貼り付けて、実行する。▶ を押すか Alt+P
これで、タイヤ 4 つ・地面・シャシー基準面がワイヤーフレームで置かれます。
- BlenderOpen the
Scriptingtab at the top and pressNew. - BlenderPaste the whole of
modeling_tools/blender_gauge.pyand run it. Press ▶ or Alt+P
Four wheels, the ground and the chassis plane now appear as wireframes.
Scripting タブ(左上)を開き、New を押してから貼り付けますScripting tab (top left), press New, then paste.置かれるもの
What it places
| 名前 | 何か |
|---|---|
gauge_wheel_FL ほか 4 つ | タイヤの位置と大きさ。ここにタイヤハウスが来るように車体を作る |
gauge_ground | 地面(Z = 0)。ワールド原点はこの高さ |
gauge_chassis_plane | シャシー基準面(Z = 0.602m)。ゲームが車の「位置」とする高さ。4 隅が車軸の真上 |
| Name | What it is |
|---|---|
gauge_wheel_FL and 3 more | Where the wheels sit and how big they are. Build the wheel arches around these |
gauge_ground | The ground (Z = 0). The world origin is at this height |
gauge_chassis_plane | The chassis plane (Z = 0.602 m), the height the game treats as the car's position. Its corners sit right above the axles |
必要なときだけ
Only when you need it
ゲージを置き直したい
もう一度実行するだけです。前のゲージは消えてから置き直されます。
ゲージは選択できない設定になっています。作業中に間違って動かすことはなく、A で全部を選んでも入りません。
Place the gauge again
Just run it again. The old gauge is removed before the new one goes in.
The gauge cannot be selected. You cannot move it by accident, and A (select all) leaves it out.
ゲージの寸法を知りたい
| ホイールベース | 3.12 m(前後輪の距離) |
|---|---|
| トレッド | 1.80 m(左右輪の距離) |
| タイヤ半径 | 0.45 m(直径 90cm) |
| シャシー基準面 | 0.602 m |
実車より 2 割大きめです。Minecraft のプレイヤーはずんぐりしているので、実寸だと車が小さく見えるためです。
See the gauge's sizes
| Wheelbase | 3.12 m (front axle to rear axle) |
|---|---|
| Track | 1.80 m (left wheel to right wheel) |
| Wheel radius | 0.45 m (90 cm diameter) |
| Chassis plane | 0.602 m |
That is 20% bigger than a real car. Minecraft players are stocky, and a true-size car looks small next to them.
ゲージに合わせずに作りたい(作ってしまった)
それでも動きます。実際に作った寸法を、見た目の JSON の designWheelBase(ホイールアーチの前後の距離)と designWheelRadius(タイヤの半径)に書きます(6 章)。ゲームがその比で車体を拡大・縮小して、ゲージの大きさに合わせます。
Build without matching the gauge (or you already did)
It still works. Write the sizes you actually built into designWheelBase (distance between the arches) and designWheelRadius (wheel radius) in the look JSON (chapter 6). The game scales the body by that ratio to fit the gauge size.
実車と同じ大きさのゲージにしたい
スクリプトの先頭の SCALE = 1.2 を 1.0 にします。そのときは諸元(data/<pack>/cars/<car>.json)の wheel_base・track_width・wheel_radius も同じ寸法に揃えます(8 章)。揃えないと、タイヤだけが元の位置と大きさで出ます。
はじめての車では触らないでください。
Use a real-world-size gauge
Change SCALE = 1.2 at the top of the script to 1.0. Then set wheel_base, track_width and wheel_radius in the spec (data/<pack>/cars/<car>.json) to the same sizes (chapter 8). If you don't, the wheels still appear at the old positions and size.
Leave it alone for your first car.
ホイールを作りたい
ホイールは車体とは別のファイルで作り、専用のゲージ(modeling_tools/blender_wheel_gauge.py)を使います。ホイールの 1 章を見てください。
Build a wheel
Wheels are built in a separate file with their own gauge, modeling_tools/blender_wheel_gauge.py. See chapter 1 of the Wheel guide.
2車体を作る
2Build the body
車体のメッシュを作る章です。決まりは原点の位置と向きだけで、大きさと形は自由です。
This chapter is about modelling the body. The only rules are where the origin is and which way the car faces; size and shape are up to you.
最小の車体を作る
Make a minimal body
- Blender前を −Y、上を +Z に向けて作る。Blender の標準の向きのまま(テンキー 1 で正面から見た向き)
- Blenderワールド原点が「地面の高さ・前後輪のちょうど中間・左右の中央」に来るように置く。ゲージのとおりに作れば、そうなっている
- Blenderタイヤハウスを、ゲージのタイヤに合わせて切る。
これで、書き出せばゲームのタイヤと車体が合います。
- BlenderFace the car towards −Y with +Z up. That is Blender's default (numpad 1 looks at the front)
- BlenderPut the world origin at ground level, exactly halfway between the axles, on the centreline. If you follow the gauge, it already is
- BlenderCut the wheel arches around the gauge wheels.
Once exported, the body and the in-game wheels line up.
原点の 3 つの条件
The three origin rules
| 高さ | 地面(Z = 0)。車体の底ではない |
|---|---|
| 前後 | 前輪と後輪のちょうど中間。全長の中心とは限らない |
| 左右 | 中央 |
| Height | Ground level (Z = 0), not the underside of the body |
|---|---|
| Front–rear | Exactly halfway between the axles, not necessarily the middle of the overall length |
| Left–right | On the centreline |
合わせるのはワールド原点です。オブジェクトを選んだときに出るオレンジの点(オブジェクト原点)はどこにあっても構いません(共通の 3 章)。
What matters is the world origin. The orange dot you see on a selected object (its object origin) can be anywhere (chapter 3 of Common).
必要なときだけ
Only when you need it
原点がずれていたので直したい
車体を全部選び(A)、G で動かします。ゲージは選択できないので一緒には動きません。
Fix an origin that is off
Select the whole body (A) and move it with G. The gauge cannot be selected, so it stays put.
左右対称に半分だけ作りたい
ミラーモディファイアを使います。書き出しのときに自動で適用されるので、「適用」は押さなくてかまいません。
ただし、左右のドアミラーの鏡だけは別々のオブジェクトにします(3 章のミラー)。
Model half and mirror it
Use a mirror modifier. The exporter applies it for you, so you don't need to press "Apply".
The one exception is the glass of the two door mirrors, which must be separate objects (mirrors in chapter 3).
ボンネットやバンパーを別のオブジェクトに分けたい
分けても分けなくても同じです。ゲームは名前の決まっていないオブジェクトを全部まとめて車体として描きます。同梱の車体は作業のしやすさで body / hood / trunk / bumper_f / bumper_r に分けてあります。
ライト・ガラス・ミラー・付け替える部品だけは名前で働きが決まるので、別のオブジェクト(または別のマテリアル)にします(3 章)。
Split the bonnet or bumpers into their own objects
Split or not, it makes no difference. The game draws every object without a special name as body. The bundled body is split into body / hood / trunk / bumper_f / bumper_r only for convenience while modelling.
Lights, glass, mirrors and swappable parts are the exception: their names decide what they do, so they need their own objects (or materials) (chapter 3).
車内(内装)も作りたい
作らなくてもかまいません。何も作らなければ、車体の裏面がそのまま内装として見えます。作るなら、ふつうの車体として作れば描かれます。座席の位置は見た目の JSON の seat で決まり、座席のメッシュとは関係ありません(6 章)。
Model an interior
You don't have to. Without one, the back faces of the body show through and serve as the cabin. If you do model one, build it as ordinary body and it is drawn. Where the player sits comes from seat in the look JSON, not from any seat mesh (chapter 6).
ポリゴン数の目安を知りたい
あまり気にしなくてかまいません。同梱の車体は 671 面、タイヤは 344 面です。面は四角形のままにしておくと軽く描けます(5 章)。
How many polygons?
Don't worry much about it. The bundled body is 671 faces and the wheel 344. Keeping faces as quads draws faster (chapter 5).
うまくいかないとき
- 走るとタイヤがボディを突き抜ける … タイヤハウスがゲージのタイヤに合っていない
- 車体が地面に埋まる・浮く … 原点を車体の底に置いている。地面の高さ(Z = 0)へ動かす
- タイヤが前後にずれる … 原点が前後輪の中間にない。全長の中心に置いていないか見る
- 前後が逆・左右が鏡像 … 書き出しの
Forward Axisを触った(5 章)
When it doesn't work
- Tyres poke through the body when driving — the arches don't match the gauge wheels
- The body sinks into the ground or floats — the origin is at the underside of the body. Move it to ground level (Z = 0)
- The wheels sit too far forward or back — the origin is not halfway between the axles. Check you didn't use the middle of the overall length
- Front and back swapped, or mirrored —
Forward Axiswas changed on export (chapter 5)
3ライト・ガラス・ミラー(名前で決まる機能)
3Lights, glass and mirrors (names that do things)
オブジェクトに決まった名前を付けるだけで、ライトが光り、窓が透け、ミラーに後ろが映ります。JSON には何も書きません。
Give an object one of a few set names and it lights up, turns see-through or reflects what is behind. Nothing goes into the JSON.
ライトを光らせる
Make the lights work
- Blenderライトのレンズを別のオブジェクトにして、名前を付ける。ヘッドライトは
light_head、テールランプはlight_tail、バックランプはlight_reverse。左右で 1 つのオブジェクトでよい(ミラーモディファイアのままでよい) - Blenderレンズの面を、車体から 1〜2mm 浮かせる。
- Blenderレンズの UV は展開せず、1 点に潰してテクスチャの白い画素に置く。色はゲームが付ける
これで、L でヘッドライトが点き、テールランプはいつもうっすら光ってブレーキで明るくなり、ギアを R に入れるとバックランプが点きます。
- BlenderMake each lens its own object and name it.
light_headfor headlights,light_tailfor tail lights,light_reversefor reverse lights. One object for both sides is fine (a mirror modifier is fine) - BlenderFloat the lens faces 1–2 mm proud of the body.
- BlenderDon't unwrap the lens: collapse its UVs to one point on a white pixel of the texture. The game adds the colour
L now turns the headlights on, the tail lights glow dimly and brighten under braking, and the reverse lights come on in R.
light_ で始まる名前はこの 3 つだけ
light_fog のような名前を付けると、そこが穴になって何も描かれません。フォグランプは light_head に含めるか、ふつうの車体として作ります。
light_ NAMES
Name something light_fog and it becomes a hole where nothing is drawn. Fold fog lights into light_head, or model them as plain body.
窓を透けさせる
Make the windows see-through
- Blender窓を別のオブジェクトにして、名前を
glassで始める。glass・glass_side・glass.frontなど
これで、窓が透けます(濃さは 0.35)。
- BlenderMake the windows their own object and start the name with
glass.glass,glass_side,glass.frontand so on
The windows are now see-through (opacity 0.35).
ミラーに後ろを映す
Make the mirrors reflect
- Blender鏡を別のオブジェクトにして、名前を付ける。ルームミラーは
mirror_rear、ドアミラーはmirror_leftとmirror_right。筐体ごとの箱 1 つでよい - Blender左右のドアミラーは、別々のオブジェクトにする。ミラーモディファイアで 1 つにしたままにしない(適用してから分ける)
- Blender鏡になる面(いちばん広い平らな面)を、運転席のほうへ向ける。角度は合わせなくてよい
- ゲームH のメニューで、ミラーを入れる。既定は切
これで、ミラーに後ろの景色が実際に映ります。
- BlenderMake each mirror its own object and name it.
mirror_rearfor the rear-view mirror,mirror_leftandmirror_rightfor the door mirrors. One box for the whole housing is fine - BlenderKeep the two door mirrors as separate objects. Don't leave them joined by a mirror modifier (apply it, then separate)
- BlenderTurn the mirror face (the largest flat face) towards the driver. You don't need to aim it
- GameTurn mirrors on in the H menu. They are off by default
The mirrors now show what is really behind you.
mirror_rear)は室内なのでこの図には出ていませんmirror_rear) is inside the cabin, so it is not shown.glass_…・light_…・mirror_…)だけを表示したところ。アウトライナーの名前が、そのままゲームの中の役目になりますglass_…, light_…, mirror_…). The names in the outliner are what the game reads.名前の一覧
All the names
| 名前 | なるもの |
|---|---|
light_head | ヘッドライト。L で点く。光の筋もここから出る |
light_tail | テールランプ。いつもうっすら、ブレーキで最大 |
light_reverse | バックランプ。ギアが R のとき |
glass で始まる | 半透明のガラス |
mirror_rear | ルームミラー |
mirror_left / mirror_right | ドアミラー |
part_ で始まる | 付け替える部品。その部品を付けているときだけ描かれる(パーツの 2 章) |
gauge_ で始まる | 捨てられる(ゲージが混ざっても描かれない) |
| それ以外 | 車体 |
| Name | What it becomes |
|---|---|
light_head | Headlight. L turns it on; the light beam starts here too |
light_tail | Tail light. Dim at all times, full under braking |
light_reverse | Reverse light. On in R |
starts with glass | Translucent glass |
mirror_rear | Rear-view mirror |
mirror_left / mirror_right | Door mirrors |
starts with part_ | A swappable part. Drawn only while that part is fitted (chapter 2 of the Parts guide) |
starts with gauge_ | Discarded, so a stray gauge is never drawn |
| anything else | Body |
必要なときだけ
Only when you need it
オブジェクトを分けずに、一部の面だけをライトやガラスにしたい
面に割り当てるマテリアルの名前を light_tail・glass・mirror_left などにします。その面だけがその働きになります。バンパーの一部の面をテールランプにする、といった使い方です。
- 編集モード(Tab)で面を選ぶ
- マテリアルタブでスロットを「+」で増やし、そのマテリアルを入れる
- 「割り当て」を押す
- オブジェクト名とマテリアル名が違う働きを指すときは、マテリアル名が勝ちます。役目の名前でないマテリアル(
bodyなど)なら、オブジェクト名の働きのまま - 名前の後ろの
.001は無視されます。light_tail.001もテールランプ - 書き出しの「マテリアル」の「書き出し」は入れたまま(既定で入っています)。外すと名前が OBJ に入りません
| オブジェクト名 | 面のマテリアル | その面 |
|---|---|---|
light_head | body | ヘッドライト |
light_head | glass | ガラス |
Bumper | light_tail | テールランプ |
Bumper | body | 車体 |
Turn just some faces into a light or glass, without splitting the object
Name the material on those faces light_tail, glass, mirror_left and so on. Only those faces take the role. A few faces of a bumper can become a tail light this way.
- Select the faces in Edit Mode (Tab)
- On the Material tab, add a slot with "+" and put the material in it
- Press "Assign"
- When the object name and the material name ask for different roles, the material wins. A material without a role name (
body, say) leaves the object's role in place - A trailing
.001is ignored:light_tail.001is still a tail light - Keep "Export Materials" ticked in the OBJ exporter (it is on by default), or the names never reach the OBJ
| Object name | Face material | That face |
|---|---|---|
light_head | body | Headlight |
light_head | glass | Glass |
Bumper | light_tail | Tail light |
Bumper | body | Body |
レンズの色を自分で塗りたい
レンズの UV を展開して、テクスチャに色を塗ります。展開したレンズは塗った色がそのまま出ます。
| レンズの UV | 色 |
|---|---|
| 1 点に潰す | ゲームが付ける(ヘッドは電球色、テールは赤、バックは白)。UV の場所を取らない |
| 展開する | テクスチャの色 |
どちらでも、点いたときの明るさと消えたときの暗さはゲームが付けます。テクスチャで暗く塗る必要はありません。
Paint the lens colour yourself
Unwrap the lens and paint it in the texture. An unwrapped lens shows exactly the painted colour.
| Lens UVs | Colour |
|---|---|
| Collapsed to one point | Set by the game (warm white head, red tail, white reverse). Uses no UV space |
| Unwrapped | From the texture |
Either way, the game handles how bright it is when on and how dim when off. Don't paint that into the texture.
ガラスの濃さを変えたい
窓にマテリアルを割り当てて、その Alpha を下げます(例 0.2 でもっと薄く、0.6 で濃く)。その値がそのまま濃さになります。Alpha が 1 のまま、またはマテリアルが無ければ 0.35 です。
書き出した .mtl を OBJ と一緒に置いてください。濃さはこのファイルが運びます。
Change how dark the glass is
Give the window a material and turn its Alpha down (0.2 for lighter, 0.6 for darker). That value is the opacity. With Alpha left at 1, or no material at all, it is 0.35.
Keep the exported .mtl next to the OBJ; it carries the opacity.
窓を何枚かのオブジェクトに分けたい
全部 glass で始めれば、何枚でもかまいません(glass.front / glass.front_side / glass.rear など)。glass のすぐ後ろに _ か . を置きます。glasshouse のように続けた名前はガラスになりません。
light_ と違い、glass の名前は自由に増やしても穴は開きません。
Split the windows into several objects
Any number is fine as long as each starts with glass (glass.front, glass.front_side, glass.rear and so on). Put _ or . right after glass; a name that runs straight on, like glasshouse, is not glass.
Unlike light_, new glass names never leave a hole.
ミラーの筐体と鏡を分けたい
筐体はふつうの名前(見本では body_mirror_left)にして、鏡の板だけを mirror_left にします。こうすると、どの面が鏡になるか迷いません。
筐体ごと 1 つの mirror_ にした場合は、いちばん広い平らな面だけが鏡になり、ほかの面はふつうの車体として描かれます。
Separate the mirror housing from the glass
Give the housing an ordinary name (body_mirror_left in the sample) and name only the glass plate mirror_left. Then there is no doubt about which face reflects.
If the whole housing is one mirror_ object, only its largest flat face reflects; the other faces are drawn as ordinary body.
ウイングなどの部品にライトを付けたい
部品のオブジェクト(part_…)の中の面に、ライトのマテリアルを割り当てます。GT ウイングのハイマウントストップランプなら light_tail です。ウイングを外せばランプも消えます。
部品の中のミラーは映りません(ふつうの面として描かれます)。部品の作り方はパーツの 2 章にあります。
Put a light on a part such as a wing
Assign a light material to faces inside the part object (part_…). For a high-mounted brake light on a GT wing, use light_tail. Take the wing off and the lamp goes with it.
Mirrors inside a part don't reflect (they are drawn as plain faces). How to make parts is in chapter 2 of the Parts guide.
仕組みを知りたい(ミラーに何が映るか)
- 何を映すかは、車に対して決まっています。板の角度は使いません。実車で乗った人がミラーを合わせるのと同じで、作った角度は「合わせる前の姿」です
- ルームミラーは真後ろを、1 度だけ下向きに映します
- ドアミラーは 1.5 度下向きで、地平線が鏡の中ほどより少し上に来ます。外へは、鏡の内側 15% に自分の車の横腹が映るところまで振ります
- 横に映る幅は決まっています(ルームミラー 34 度、ドアミラー 22 度)。縦は鏡の縦横比で決まり、横長に作るほど縦に狭くなります
- ルームミラーかドアミラーかは、名前ではなく鏡の位置で決まります。車の中心から左右 0.35m 以内ならルームミラーです。
left/rightの名前が実際の左右と逆でも正しく映ります - UV は要りません。面の中の位置がそのまま使われます
- 鏡ごとに、その位置から世界をもう一度描いています。左右のドアミラーを 1 つのオブジェクトにすると、左右で同じ景色が映るのはこのためです
How it works (what a mirror shows)
- What each mirror looks at is fixed relative to the car. The angle of the plate is not used. Like a real driver adjusting the glass after getting in, the angle you modelled is only the "before adjustment" pose
- The rear-view mirror looks straight back, 1° down
- Door mirrors look 1.5° down, putting the horizon a little above the middle of the glass. They are turned outward until your own car's flank fills the inner 15% of the glass
- The horizontal field of view is fixed (34° rear-view, 22° door). The vertical follows the glass's aspect ratio: the wider you make it, the narrower the vertical view
- Whether it is a rear-view or a door mirror is decided by where it is, not its name: within 0.35 m of the car's centreline it is the rear-view mirror. If
left/rightare swapped, it still reflects correctly - No UVs needed. The position within the face is used directly
- Each mirror redraws the world from its own position. That is why two door mirrors joined into one object show the same view
うまくいかないとき
- ライトを足したところが穴になる …
light_head/light_tail/light_reverse以外のlight_名を付けた - レンズがチラつく … レンズの面が車体と同じ面にある。1〜2mm 浮かせる
- レンズの色がおかしい … 展開した UV が、テクスチャの塗っていない場所を指している。1 点に潰して白い画素に置くか、テクスチャに色を塗る
- 窓が透けない … 名前が
glassで始まっていない(glasshouseのように続けていないか)。マテリアルの Alpha を使っているなら.mtlを一緒に置いたか - ミラーが映らない … H で入れたか。描画設定が「最高(Fabulous)」のときと、シェーダーパックを使っているときは映らない(暗いガラスになる)
- 左右のミラーに同じ景色が映る … ミラーモディファイアで 1 つのオブジェクトのまま。適用してから分ける
- ドアミラーが真後ろしか映さない … 鏡が車の中心から 0.35m 以内にあり、ルームミラーとして扱われている
- ログに役目が食い違うと出る … オブジェクト名とマテリアル名が違う働きを指している。マテリアルのほうが使われている
When it doesn't work
- A hole where you added a light — you used a
light_name other thanlight_head/light_tail/light_reverse - The lens flickers — the lens sits flush with the body. Float it 1–2 mm
- The lens is the wrong colour — its unwrapped UVs point at an unpainted part of the texture. Collapse them onto a white pixel, or paint the texture
- Windows aren't see-through — the name doesn't start with
glass(or runs straight on, likeglasshouse). If you use material Alpha, is the.mtlnext to the OBJ? - Mirrors show nothing — did you turn them on in H? They don't reflect with graphics set to "Fabulous" or with a shader pack (you get dark glass)
- Both door mirrors show the same view — they are still one object via a mirror modifier. Apply it and separate them
- A door mirror only looks straight back — it is within 0.35 m of the centreline, so it is treated as the rear-view mirror
- The log says roles disagree — the object name and the material name ask for different roles. The material's role is used
1ホイールのモデルを作る
1Model the wheel
ホイールを Blender で作り、OBJ に書き出すまでです。ホイールは車体とは別のファイルで作ります。
This chapter takes a wheel from Blender to an exported OBJ. Wheels are built in a separate file from the body.
最小のホイールを作る
Make a minimal wheel
- Blender新しいファイルで、ゲージを置く。
Scriptingタブでmodeling_tools/blender_wheel_gauge.pyを実行する。半径 0.45m の輪・車軸の線・地面・表を示す矢印が置かれる - Blenderゲージの輪に収まるように、ホイールを作る。原点は車軸の中心に置く。円柱から作るなら、先に R Y 9 0 で回して軸を左右(X)へ向ける
- Blenderホイールの表(デザイン面)を +X へ向ける。ゲージの矢印の側。作るのは左側用の 1 つだけ
- Blenderタイヤも作るなら、ホイールとは別のオブジェクトにして、名前を
Tireにする。リムだけで作るなら、この手順は要らない - Blenderゲージを除いてホイールだけを選び、OBJ に書き出す。「Selected Only」を入れ、「Triangulated Mesh」は入れない(設定の全体は車の 5 章と同じ)
- ファイル書き出したファイルとテクスチャを置く。
assets/mypack/models/entity/my_wheel.obj(.mtlも一緒に)とassets/mypack/textures/entity/my_wheel.png
これで、ホイールのモデルができました。換装画面で選べるようにするのは 2 章、自分の車に最初から履かせるのは下の「自分の車に最初から履かせたい」です。
- BlenderIn a new file, place the gauge. Run
modeling_tools/blender_wheel_gauge.pyfrom theScriptingtab. It places a 0.45 m radius ring, the axle line, the ground and an arrow marking the outer face - BlenderModel the wheel to fit inside the gauge ring, with the origin at the centre of the axle. If you start from a cylinder, first rotate it with R Y 9 0 so its axis runs left–right (X)
- BlenderPoint the face of the wheel (the design side) towards +X, the side the gauge arrow points to. Build the left-hand wheel only
- BlenderIf you model a tyre too, make it a separate object from the wheel and name it
Tire. Skip this if you only build the rim - BlenderSelect only the wheel (not the gauge) and export it as OBJ. Tick "Selected Only" and leave "Triangulated Mesh" off (the full settings are the same as chapter 5 of the Car guide)
- FilePut the exported file and the texture in your pack:
assets/mypack/models/entity/my_wheel.obj(with its.mtl) andassets/mypack/textures/entity/my_wheel.png
The wheel model is done. To make it selectable in the parts screen, go to chapter 2; to fit it to your own car from the start, see "Fit it to my own car" below.
必要なときだけ
Only when you need it
自分の車に最初から履かせたい
車の見た目の定義 assets/mypack/vehicles/<車>.json の wheel にモデルとテクスチャを書き、作った半径を designWheelRadius(wheel の外、いちばん外側)に書きます:
{
"body": { "model": "mypack:models/entity/my_car.obj",
"texture": "mypack:textures/entity/my_car.png" },
"wheel": { "model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png" },
"designWheelRadius": 0.45
}
このファイルのほかの項目は車の 6 章にあります。
Fit it to my own car
In the car's looks file assets/mypack/vehicles/<car>.json, set the model and texture under wheel, and write the radius you built at as designWheelRadius (outside wheel, at the top level):
{
"body": { "model": "mypack:models/entity/my_car.obj",
"texture": "mypack:textures/entity/my_car.png" },
"wheel": { "model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png" },
"designWheelRadius": 0.45
}
The rest of this file is in chapter 6 of the Car guide.
ゲージと違う大きさで作りたい
大きさは自由です。作った半径(m)を、車に履かせるなら designWheelRadius、部品にするなら designRadius(2 章)に書きます。ゲームは、この値と車のタイヤ半径の比で拡大して描きます。
ゲーム内の調整画面でタイヤ半径を変えると、見た目もそのまま追従します。タイヤは接地したまま、車体だけが上がります(リフトアップ)。
Build it at a different size from the gauge
Any size is fine. Write the radius you built at (in m) as designWheelRadius when fitting it to a car, or as designRadius when making it a part (chapter 2). The game scales the mesh by the ratio between this value and the car's tyre radius.
Change the tyre radius in the in-game tuning screen and the model follows: the tyres stay on the ground and the body rises (a lift-up).
タイヤを作らず、KurumaMod のタイヤを使いたい
リムだけで作れば、KurumaMod 標準のタイヤが自動で嵌まります。ホイールごと借りるなら、モデルを kurumamod:models/entity/wheel.obj、テクスチャを kurumamod:textures/entity/wheel.png にします(車の 6 章)。
Skip the tyre and use KurumaMod's
Build only the rim and KurumaMod's own tyre is fitted automatically. To borrow the whole wheel, use kurumamod:models/entity/wheel.obj as the model and kurumamod:textures/entity/wheel.png as the texture (chapter 6 of the Car guide).
仕組みを知りたい(なぜタイヤに Tire と名前を付けるのか)
換装画面でタイヤ(3 章)を選ぶと、ゲームは tire で始まる名前(大文字小文字は問わない)のオブジェクトを隠し、選んだタイヤをリムに嵌めて描きます。
- タイヤを選んでいない(ノーマル)ときは、あなたのタイヤがそのまま出る
- 名前が無いと、タイヤもホイールの一部として描かれたままになり、選んだタイヤと重なって見える
- シェーダーパックの影は、タイヤだけが落とす。地面にスポークの模様が出ない
How it works (why name the tyre Tire)
When a tyre (chapter 3) is picked in the parts screen, the game hides any object whose name starts with tire (in any case) and draws the picked tyre on the rim instead.
- With no tyre picked (Normal), your own tyre is drawn as it is
- Without the name, your tyre stays part of the wheel and shows through the picked one
- With shader packs, only the tyre casts a shadow, so no spoke pattern appears on the ground
うまくいかないとき
- タイヤが大きすぎる・小さすぎる …
designWheelRadius(部品ならdesignRadius)が、作った半径になっていない - 回るとぶれる・地面に埋まる・浮く … 原点が車軸の中心にない。タイヤの底に置いていないか見る
- タイヤが横倒しで転がる … 回転軸が左右(X)を向いていない。R Y 9 0 で回す
- 右側のタイヤの表が内側を向く … 表が +X を向いていない。左側用として作り直す(右側は MOD が鏡像にして描く)
- 1 か所にタイヤが 2 本描かれる … 左右 2 つ作っている。左側用の 1 つだけにする
- 選んだタイヤと自分のタイヤが重なる … タイヤのオブジェクト名が
tireで始まっていない - 全体が白い …
.mtlを置いていないか、マテリアルが無い。形が正しければ問題ない(色の付け方は車の 4 章)
When it doesn't work
- Wheels too big or too small —
designWheelRadius(ordesignRadiusfor a part) is not the radius you built at - Wobbles as it spins, sinks into the ground, or floats — the origin is not at the axle centre. Check it is not at the bottom of the tyre
- Rolls on its side — the spin axis does not run left–right (X). Rotate with R Y 9 0
- The right-hand wheels face inward — the face is not towards +X. Rebuild it as the left-hand wheel (the mod mirrors it for the right)
- Two tyres drawn in one place — you modelled both sides. Keep only the left-hand one
- Your tyre shows through the picked one — the tyre object's name does not start with
tire - Everything is white — no
.mtl, or no material. Harmless if the shape is right (colouring is in chapter 4 of the Car guide)
4テクスチャを貼る
4Add a texture
車体に色や模様を付ける章です。テクスチャが無くても車は走るので、形だけ先に作ってあとで貼ってもかまいません。
This chapter is about giving the body colour and detail. The car drives without a texture, so you can build the shape first and paint it later.
最小のテクスチャを貼る
Add a minimal texture
- Blender車体を UV 展開して、PNG のテクスチャに色を塗る。大きさは自由
- Blenderマテリアルを使っているなら、Base Color を白(1.0)にする。
- ファイルPNG を置き、見た目の JSON で指す。
assets/mypack/textures/entity/mycar.pngに置いて、assets/mypack/vehicles/mycar.jsonのbodyに書く:"body": { "model": "mypack:models/entity/mycar.obj", "texture": "mypack:textures/entity/mycar.png" }
これで、ゲームで F3+T を押すと車体にテクスチャが貼られます。
- BlenderUV-unwrap the body and paint a PNG texture. Any resolution
- BlenderIf you use materials, set Base Color to white (1.0).
- FilePut the PNG in place and point the look JSON at it. Save it as
assets/mypack/textures/entity/mycar.pngand write it intobodyinassets/mypack/vehicles/mycar.json:"body": { "model": "mypack:models/entity/mycar.obj", "texture": "mypack:textures/entity/mycar.png" }
Press F3+T in game and the body is textured.
必要なときだけ
Only when you need it
UV を張らずに、まず形だけ確かめたい
そのままでかまいません。UV 展開していない面は、テクスチャの 1 点の色で塗りつぶされます。絵がまだ無ければ、白く塗った小さな PNG を置いておけば足ります。
ライトのレンズは、UV を展開しないほうが都合がよいことがあります(3 章)。
Check the shape first, without UVs
That works as it is. Faces without UVs are filled with the colour of a single pixel of the texture. If you have no art yet, a small all-white PNG is enough.
For light lenses, leaving them unwrapped is often the better choice (chapter 3).
タイヤにも自分のテクスチャを使いたい
車体とタイヤは別々のテクスチャを指せます。見た目の JSON の wheel に書きます:
"wheel": { "model": "mypack:models/entity/mywheel.obj",
"texture": "mypack:textures/entity/mywheel.png" }
タイヤのモデルの作り方はホイールの 1 章にあります。
Use your own texture on the wheels too
Body and wheels can point at different textures. Write it into wheel in the look JSON:
"wheel": { "model": "mypack:models/entity/mywheel.obj",
"texture": "mypack:textures/entity/mywheel.png" }
How to model the wheel is in chapter 1 of the Wheel guide.
テクスチャを使わず、マテリアルの色だけで塗り分けたい
できます。マテリアルの Base Color が、テクスチャの色に掛け合わされて出ます。テクスチャを白一色にしておけば、マテリアルの色がそのまま出ます。書き出した .mtl を OBJ と一緒に置いてください。色はこのファイルが運びます。
Colour it with material colours only, no texture
You can. A material's Base Color is multiplied over the texture, so with an all-white texture the material colour comes through as is. Keep the exported .mtl next to the OBJ; it carries the colours.
うまくいかないとき
- テクスチャが暗い … マテリアルの Base Color が Blender の既定の 0.8 グレーのまま。白にする
- マテリアルの色が出ず、全体が白い …
.mtlを OBJ と一緒に置いていない。マテリアルを使わないつもりなら、それで問題ない - テクスチャが変わらない … F3+T を押したか。
textureのパスと名前空間(mypack:)が合っているか
When it doesn't work
- The texture comes out dark — the material's Base Color is still Blender's default 0.8 grey. Set it to white
- Material colours don't show; everything is white — the
.mtlis not next to the OBJ. If you don't use materials, that is fine - The texture doesn't change — did you press F3+T? Do the
texturepath and namespace (mypack:) match?
5OBJ に書き出す
5Export to OBJ
Blender の車体を、ゲームが読む OBJ ファイルにする章です。入れるチェックは 1 つだけで、あとは既定のままにします。
This chapter turns the Blender body into the OBJ file the game reads. You tick one box and leave everything else at its default.
やること
What to do
- Blender車体を全部選ぶ(A)。ゲージは選ばれない
- Blender
ファイル→エクスポート→Wavefront (.obj)を開く。 - Blender右のパネルで
Selected Onlyを入れる。ほかの設定は触らない。下の表のとおりになっているか見る - Blenderファイル名を付けて書き出す。例
mycar.obj - ファイルできた
.objと.mtlを、両方assets/mypack/models/entity/に置く。
これで、見た目の JSON(6 章)の body.model から指せる車体ができます。
- BlenderSelect the whole body (A). The gauge is not selected
- BlenderOpen
File→Export→Wavefront (.obj). - BlenderTick
Selected Onlyin the right-hand panel. Don't touch anything else. Check it matches the table below - BlenderName the file and export. For example
mycar.obj - FilePut both the
.objand the.mtlinassets/mypack/models/entity/.
You now have a body that body.model in the look JSON (chapter 6) can point at.
書き出しの設定
Export settings
| 項目 | どうする |
|---|---|
| Selected Only (古い版では Selection Only) | 入れる(ゲージを書き出さないため) |
| Forward Axis / Up Axis | 触らない(−Z / Y のまま) |
| Apply Modifiers | 触らない(入ったまま)。ミラーモディファイアがこれで適用される |
| Triangulated Mesh (古い版では Triangulate Faces) | 触らない(入れない)。四角形のままのほうが軽い |
| マテリアルの「書き出し」 | 触らない(入ったまま)。マテリアルの名前と色が .mtl に入る |
| Setting | Do this |
|---|---|
| Selected Only (older versions: Selection Only) | Tick it (keeps the gauge out) |
| Forward Axis / Up Axis | Leave alone (−Z / Y) |
| Apply Modifiers | Leave alone (on). This applies the mirror modifier |
| Triangulated Mesh (older versions: Triangulate Faces) | Leave alone (off). Quads draw faster |
| Materials: Export | Leave alone (on). Material names and colours go into the .mtl |
必要なときだけ
Only when you need it
タイヤも書き出したい
タイヤは車体とは別のファイルに書き出します(例 mywheel.obj)。設定は車体と同じです。作り方はホイールの 1 章にあります。KurumaMod のタイヤを借りるなら、書き出す必要はありません。
Export the wheel too
The wheel goes into a separate file from the body (for example mywheel.obj), with the same settings. How to build it is in chapter 1 of the Wheel guide. If you borrow KurumaMod's wheel, there is nothing to export.
.mtl は要るのか知りたい
.mtl は、マテリアルの色・ガラスの濃さ・マテリアル名で付けたライトなどの働きを運びます。どれも使っていなければ消してもかまいません。消すと全体が白(テクスチャの色そのまま)になります。
Do I need the .mtl?
The .mtl carries material colours, glass opacity, and roles given by material names (lights and so on). If you use none of those, you may delete it; everything then turns white (the texture as is).
三角形にして書き出したい・凹んだ面がある
三角形にしても描けますが、重くなるだけです。5 角形以上の面は、凹んでいても MOD が正しく割ります。全体を三角形にする必要はありません。
Triangulate on export, or the model has concave faces
Triangulating still works; it just makes the model heavier. The mod splits faces with five or more corners correctly, even concave ones. There is no need to triangulate everything.
仕組みを知りたい(なぜ Forward Axis を触ってはいけないか)
設定には −Z Forward と書いてありますが、Blender の前(−Y)は OBJ では +Z になって出てきます。この読み替えは MOD が済ませているので、既定のままで車は正しく前を向きます。
Forward Axis を変えると、前後と左右がまとめて裏返ります。車体は左右対称なので鏡像になっても気づけず、あとで「タイヤの向きだけおかしい」という形で出てきます。
How it works (why not to touch Forward Axis)
The dialog says −Z Forward, but Blender's front (−Y) actually comes out as +Z in the OBJ. The mod already accounts for that, so the defaults give a car facing the right way.
Changing Forward Axis flips front–back and left–right together. A symmetric body gives no clue it has been mirrored; it shows up later as "only the wheels point the wrong way".
うまくいかないとき
- 前後が逆・左右が鏡像 …
Forward Axisを変えた。既定(−Z / Y)へ戻して書き出し直す - ゲージが一緒に書き出された …
Selected Onlyを入れ忘れた。ゲージ(gauge_)は描かれないので害はないが、入れて書き出し直す - 片側しかない … ミラーモディファイアが適用されていない。
Apply Modifiersを入れたままにする - 付け替える部品(
part_…)が出ない … 非表示のまま書き出した。非表示のオブジェクトは選べないので OBJ に入らない。全部表示にしてから選ぶ(パーツの 2 章) - マテリアルの色やガラスの濃さが出ない …
.mtlを OBJ と同じ場所に置いていない - 面がねじれる・抜ける … 平面から大きく曲がった面か、辺が交差した面がある。Blender でその面だけ割る
When it doesn't work
- Front and back swapped, or mirrored —
Forward Axiswas changed. Put it back to −Z / Y and export again - The gauge was exported too —
Selected Onlywas off. Gauge objects (gauge_) are never drawn, so it is harmless, but tick it and export again - Only one half of the car — the mirror modifier was not applied. Keep
Apply Modifierson - A swappable part (
part_…) never appears — it was hidden when you exported. Hidden objects cannot be selected, so they are left out of the OBJ. Unhide everything before selecting (chapter 2 of the Parts guide) - Material colours or glass opacity missing — the
.mtlis not next to the OBJ - Faces twist or disappear — a face is badly non-planar or has crossing edges. Split just that face in Blender
6車をゲームに入れる(置き場所と JSON)
6Put the car in the game (files and JSON)
作ったモデルを、ゲームで走る車種にします。見本のパックをコピーして、名前と中身を入れ替えるのがいちばん早い道です。
This turns your model into a car you can drive in game. The quickest way is to copy the example pack and swap in your own names and files.
最小のカーパックを作る
Make a minimal car pack
ここでは、パックの名前を mypack、車種の名前を ae86 とします。
Here the pack is called mypack and the car ae86.
- ファイル
carpack/example/をフォルダごとコピーする。 - ファイル
kurumamod_example_carpackを、すべてmypackに置き換える。フォルダ名 2 つ(assets/の下とdata/の下)、いちばん上のロゴ画像kurumamod_example_carpack.pngのファイル名、そしてすべてのファイルの中身(META-INF/mods.toml・META-INF/neoforge.mods.tomlと、JSON の中のパス)です。使える文字はa-z・0-9・_だけ - ファイルモデルとテクスチャを置く。
assets/mypack/models/entity/ae86.obj(.mtlも一緒に)とassets/mypack/textures/entity/ae86.png - ファイル見た目の JSON を書く。
assets/mypack/vehicles/sample.jsonをae86.jsonに改名して、中身をこうする:{ "body": { "model": "mypack:models/entity/ae86.obj", "texture": "mypack:textures/entity/ae86.png" }, "wheel": { "model": "kurumamod:models/entity/wheel.obj", "texture": "kurumamod:textures/entity/wheel.png" } } - ファイル諸元の JSON を書く。
data/mypack/cars/sample.jsonをae86.jsonに改名して、中身をこうする(走りは8 章で詰める):{ "values": { "mass": 1200.0 } } - lang表示名を lang に書く。
assets/mypack/lang/ja_jp.jsonとen_us.jsonに"car.mypack.ae86": "AE86" - ファイルjar に固めて
mods/に入れる。固め方は共通の 4 章
これで、クリエイティブタブに「AE86」が並び、自分の車体で走ります。
- FileCopy the whole
carpack/example/folder. - FileReplace every
kurumamod_example_carpackwithmypack. That is two folder names (underassets/and underdata/), the logo imagekurumamod_example_carpack.pngat the top, and the contents of every file (META-INF/mods.toml,META-INF/neoforge.mods.tomland the paths inside the JSON). Use onlya-z,0-9and_ - FileAdd the model and texture:
assets/mypack/models/entity/ae86.obj(with its.mtl) andassets/mypack/textures/entity/ae86.png - FileWrite the looks JSON. Rename
assets/mypack/vehicles/sample.jsontoae86.jsonand make it:{ "body": { "model": "mypack:models/entity/ae86.obj", "texture": "mypack:textures/entity/ae86.png" }, "wheel": { "model": "kurumamod:models/entity/wheel.obj", "texture": "kurumamod:textures/entity/wheel.png" } } - FileWrite the spec JSON. Rename
data/mypack/cars/sample.jsontoae86.jsonand make it (tune the handling in chapter 8):{ "values": { "mass": 1200.0 } } - langAdd the display name to lang:
"car.mypack.ae86": "AE86"inassets/mypack/lang/en_us.jsonandja_jp.json - FilePack it into a jar and put it in
mods/. See chapter 4 of the Common guide
"AE86" now appears in the creative tab and drives with your body.
できあがりの形:
What you end up with:
mypack.jar
├── META-INF/mods.toml ← Forge 1.20.1 用
├── META-INF/neoforge.mods.toml ← NeoForge 1.21.1 用
├── pack.mcmeta
├── assets/mypack/ ← 見た目
│ ├── models/entity/ae86.obj
│ ├── models/entity/ae86.mtl
│ ├── textures/entity/ae86.png
│ ├── vehicles/ae86.json
│ └── lang/ja_jp.json, en_us.json
└── data/mypack/ ← 走り
└── cars/ae86.json
mypack.jar
├── META-INF/mods.toml <- for Forge 1.20.1
├── META-INF/neoforge.mods.toml <- for NeoForge 1.21.1
├── pack.mcmeta
├── assets/mypack/ <- looks
│ ├── models/entity/ae86.obj
│ ├── models/entity/ae86.mtl
│ ├── textures/entity/ae86.png
│ ├── vehicles/ae86.json
│ └── lang/en_us.json, ja_jp.json
└── data/mypack/ <- handling
└── cars/ae86.json
名前がずれてもエラーは出ません。車種 id mypack:ae86 から、次の 3 つが決まります。1 つでもずれると、黙って既定の姿や名前になります。
A mismatched name gives no error. The car id mypack:ae86 fixes these three names; if one is off, the car quietly gets the default body or name.
| 名前 | |
|---|---|
| 諸元 | data/mypack/cars/ae86.json |
| 見た目 | assets/mypack/vehicles/ae86.json |
| 表示名の翻訳キー | car.mypack.ae86 |
| Name | |
|---|---|
| Spec | data/mypack/cars/ae86.json |
| Looks | assets/mypack/vehicles/ae86.json |
| Display-name translation key | car.mypack.ae86 |
必要なときだけ
Only when you need it
既定の車の見た目だけ差し替えたい(リソースパック)
新しい車種は増やさず、KurumaMod 付属の車を自分のモデルで上書きします。jar を作らずに済み、F3+T で何度でも入れ直せるので、モデルを試すのにも向いています。
- 次の形でフォルダを作る:
.minecraft/resourcepacks/MyCar/ ├── pack.mcmeta └── assets/kurumamod/ ├── models/entity/car.obj ← 自分の車体(.mtl も一緒に) ├── models/entity/wheel.obj ← 自分のタイヤ ├── textures/entity/car.png └── vehicles/car.json ← 見た目の JSON(書き方は最小のカーパックと同じ) pack.mcmetaを書く:{ "pack": { "description": "MyCar", "pack_format": 15 } }- ゲームの設定でリソースパックを有効にする
開発環境で試すときは run/resourcepacks/ に置きます。人に配るなら、最小のカーパックの形にします。
Only replace the look of the built-in car (resource pack)
Instead of adding a car, override KurumaMod's own car with your model. No jar to build, and F3+T reloads it as often as you like, so it is also handy for trying out a model.
- Make this folder:
.minecraft/resourcepacks/MyCar/ ├── pack.mcmeta └── assets/kurumamod/ ├── models/entity/car.obj <- your body (keep the .mtl with it) ├── models/entity/wheel.obj <- your wheel ├── textures/entity/car.png └── vehicles/car.json <- looks JSON (written as in the minimal car pack) - Write
pack.mcmeta:{ "pack": { "description": "MyCar", "pack_format": 15 } } - Enable the pack in the game's settings
In a development environment it goes in run/resourcepacks/. To hand the car to others, use the minimal car pack layout instead.
車体の大きさ・位置を合わせたい
ゲージ(1 章)にぴったり合わせて作ったなら、何も書かなくて済みます。合わせられなかったときは、見た目の JSON(assets/mypack/vehicles/ae86.json)のいちばん外側に、メッシュを実際に作った寸法を書きます。
{
"body": { "model": "mypack:models/entity/ae86.obj",
"texture": "mypack:textures/entity/ae86.png" },
"wheel": { "model": "kurumamod:models/entity/wheel.obj",
"texture": "kurumamod:textures/entity/wheel.png" },
"designWheelBase": 3.12,
"designWheelRadius": 0.45,
"designRideHeight": 0.6019
}
designWheelBase… メッシュの前後のホイールアーチが何 m 離れているか(既定 3.12)。5.2m で作ってしまったなら5.2と書けば、既定の車の大きさに縮みますdesignWheelRadius… メッシュのタイヤが何 m の半径で作られているか(既定 0.45)designRideHeight… 車体をシャシー基準面から下げる量 [m](既定 0.6019)。車体が埋まる・浮くときに直す- どれも「この車の寸法」ではなく「メッシュの寸法」です。実際の寸法は諸元にあり、ゲームはその比でメッシュを拡大します
あとは body の中で細かく直せます:
"body": { "model": "...", "texture": "...",
"offset": [0.0, 0.02, 0.0],
"scale": 1.05 }
offset… 車体をずらす [m]。[x, y, z]で +X 右・+Y 上・−Z 前scale… 大きさの微調整。数字 1 つでも[x, y, z]でもよい。原点が地面なので上へ伸びる
大きい車にしたいときは、ここではなく諸元を変えます。ゲームの調整画面でホイールベースとトレッドを広げ、body.scale を同じ倍率にします(1.2 倍なら 3.12→3.74m、1.8→2.16m、scale 1.2)。
Make the body the right size and position
If you built exactly to the gauge (chapter 1), there is nothing to write. If not, write the sizes you actually built the mesh at at the top level of the looks JSON (assets/mypack/vehicles/ae86.json):
{
"body": { "model": "mypack:models/entity/ae86.obj",
"texture": "mypack:textures/entity/ae86.png" },
"wheel": { "model": "kurumamod:models/entity/wheel.obj",
"texture": "kurumamod:textures/entity/wheel.png" },
"designWheelBase": 3.12,
"designWheelRadius": 0.45,
"designRideHeight": 0.6019
}
designWheelBase— how far apart the front and rear arches are in your mesh, in m (default 3.12). If you built it at 5.2 m, write5.2and it shrinks to the default car's sizedesignWheelRadius— the radius your mesh's tyre was built at, in m (default 0.45)designRideHeight— how far to drop the body below the chassis plane, in m (default 0.6019). Change it if the body sinks or floats- These describe the mesh, not the car. The car's real sizes are in the spec, and the game scales the mesh by the ratio
Then fine-tune inside body:
"body": { "model": "...", "texture": "...",
"offset": [0.0, 0.02, 0.0],
"scale": 1.05 }
offset— shift the body, in m.[x, y, z]with +X right, +Y up, −Z forwardscale— fine size adjustment; one number or[x, y, z]. The origin is on the ground, so it grows upward
For a bigger car, change the spec instead. Widen the wheelbase and track in the game's tuning screen, and set body.scale to the same ratio (for 1.2×: 3.12→3.74 m, 1.8→2.16 m, scale 1.2).
座席の位置を直したい
見た目の JSON のいちばん外側に seat を書きます。運転席の位置で、助手席は左右反転で自動的に置かれます。
"seat": [0.5, -0.55, 0.2]
[x, y, z][m]。+X 右・+Y 上・−Z 前。既定は右ハンドル(x が正)- 前後(z)は前後輪の中点から、左右(x)と高さ(y)はシャシー基準面の中心から測る
- 足元の位置で、目線ではありません。一人称の視点はここから 1.62m 上に来ます。目線で決めたいなら 1.62 を引く
- 座面に合わせると視線が高くなり、目線に合わせると足が床下へ潜ります。どちらにするかは車ごとの好み
- メッシュから測るときは、
designWheelBaseなどで拡大・縮小された後の大きさで測る
Move the seat
Write seat at the top level of the looks JSON. It is the driver's seat; the passenger seat is mirrored automatically.
"seat": [0.5, -0.55, 0.2]
[x, y, z]in m, with +X right, +Y up, −Z forward. The default is right-hand drive (positive x)- Front-to-back (z) is measured from the midpoint of the axles; side (x) and height (y) from the centre of the chassis plane
- It is where the feet go, not the eyes. The first-person camera sits 1.62 m above it; subtract 1.62 to place the eye line instead
- Match the cushion and the view sits high; match the eye line and the feet sink through the floor. Pick per car
- If you measure from the mesh, measure it after the scaling from
designWheelBaseand friends
タイヤの見た目を変えたい(自前のタイヤ・ずらす・太さ・キャンバー)
見た目の JSON の wheel に書きます。
"wheel": { "model": "mypack:models/entity/ae86_wheel.obj",
"texture": "mypack:textures/entity/ae86_wheel.png",
"offset": [0.03, 0.0, 0.0],
"scale": [1.2, 1.0, 1.0],
"camber": -2.0 }
model/texture… 自前のタイヤ。kurumamod:で始めれば KurumaMod のものを借りられるoffset… タイヤをずらす [m]。X は「外向き」(左右で向きが反転する)。X は −0.05〜0.10 に丸められるscale… X が太さ(0.5〜2.5 に丸められる)。Y・Z(直径)は 1 のままにする。直径はゲームの調整画面のタイヤ半径で変えるcamber… キャンバー角 [度]。負で上が内側。−30〜10 に丸められる。見た目だけで、グリップは変わらない
プレイヤーは換装画面で太さ・キャンバー・オフセットを変えられます。ここに書くのはその最初の値です。
Change how the wheels look (own wheel, offset, width, camber)
Write it in wheel in the looks JSON.
"wheel": { "model": "mypack:models/entity/ae86_wheel.obj",
"texture": "mypack:textures/entity/ae86_wheel.png",
"offset": [0.03, 0.0, 0.0],
"scale": [1.2, 1.0, 1.0],
"camber": -2.0 }
model/texture— your own wheel. Start the path withkurumamod:to borrow KurumaMod'soffset— shift the wheels, in m. X is "outward" (it flips between sides). X is clamped to −0.05–0.10scale— X is width (clamped to 0.5–2.5). Leave Y and Z (diameter) at 1. Change the diameter with the tyre radius in the game's tuning screencamber— camber in degrees; negative leans the top inward. Clamped to −30–10. Looks only; grip does not change
Players can change width, camber and offset in the parts screen; what you write here is the starting value.
見た目の JSON に書ける項目を全部見たい
置き場所は assets/<パック>/vehicles/<車>.json。書かなかった項目は既定値になります。
| キー | 既定値 | 意味 |
|---|---|---|
body.model | 既定の車 | 車体の OBJ |
body.texture | 既定の車 | 車体のテクスチャ |
body.offset | [0,0,0] | 車体をずらす [m](+X 右・+Y 上・−Z 前) |
body.scale | 1.0 | 車体の大きさの微調整。数字 1 つか [x,y,z]。上へ伸びる |
wheel.model | 既定のタイヤ | タイヤの OBJ |
wheel.texture | 既定のタイヤ | タイヤのテクスチャ |
wheel.offset | [0,0,0] | タイヤをずらす [m]。X は外向き(−0.05〜0.10) |
wheel.scale | 1.0 | X は太さ(0.5〜2.5)。Y・Z は 1 のまま |
wheel.camber | 0.0 | キャンバー角 [度](−30〜10)。見た目だけ |
designWheelBase | 3.12 | メッシュのホイールアーチが何 m 離れているか |
designWheelRadius | 0.45 | メッシュのタイヤが何 m の半径で作られているか |
designRideHeight | 0.6019 | 車体をシャシー基準面から下げる量 [m] |
seat | [0.5, -0.55, 0.2] | 運転席の位置 [m]。右ハンドル。助手席は左右反転 |
shadowRadius | 1.4 | 影の大きさ |
sounds | KurumaMod の音 | 音の差し替え(7 章) |
parts | 名前の決まりどおり | 外装パーツの部品 id → 出すオブジェクト(パーツの 2 章) |
走りを決める値(車重・トルクなど)はここには書けません。data/ の諸元に書きます(8 章)。
See every key in the looks JSON
The file is assets/<pack>/vehicles/<car>.json. Anything you leave out takes the default.
| Key | Default | Meaning |
|---|---|---|
body.model | built-in car | Body OBJ |
body.texture | built-in car | Body texture |
body.offset | [0,0,0] | Shift the body [m] (+X right, +Y up, −Z forward) |
body.scale | 1.0 | Fine size adjustment; one number or [x,y,z]. Grows upward |
wheel.model | built-in wheel | Wheel OBJ |
wheel.texture | built-in wheel | Wheel texture |
wheel.offset | [0,0,0] | Shift the wheels [m]. X is outward (−0.05–0.10) |
wheel.scale | 1.0 | X is width (0.5–2.5). Leave Y and Z at 1 |
wheel.camber | 0.0 | Camber in degrees (−30–10). Looks only |
designWheelBase | 3.12 | How far apart the arches are in your mesh |
designWheelRadius | 0.45 | The radius your mesh's tyre was built at |
designRideHeight | 0.6019 | How far to drop the body below the chassis plane [m] |
seat | [0.5, -0.55, 0.2] | Driver's seat [m]. Right-hand drive; the passenger seat is mirrored |
shadowRadius | 1.4 | Size of the shadow |
sounds | KurumaMod's sounds | Replace sounds (chapter 7) |
parts | follows the naming rule | Body part id → objects to show (chapter 2 of the Parts guide) |
Handling values (mass, torque and so on) cannot go here. They go in the spec under data/ (chapter 8).
外装パーツを付けたい・最初から付けておきたい
見た目の JSON の parts(オブジェクト名の対応)と、諸元の JSON の default_parts(初期装備)を使います。書き方はパーツの 2 章にあります。
Add body parts, or fit them from the start
Use parts in the looks JSON (object names) and default_parts in the spec JSON (default parts). See chapter 2 of the Parts guide.
名前の決まりを詳しく知りたい
- 大文字と空白は使えない。名前空間(
mypack)はa-z 0-9 _ . -、車種名はこれに/を加えたもの modIdは名前空間より狭く、-も.も使えない(^[a-z][a-z0-9_]{1,63}$)。外れると読み込みがInvalid modIdで落ちる。区切りは_だけにする- 名前空間は
modIdと同じにする。違っても動くが、ほかのパックとぶつかったときにどちらが読まれるか分からなくなる - サブフォルダは使わない。
cars/toyota/ae86.jsonは id がmypack:toyota/ae86、翻訳キーがcar.mypack.toyota/ae86になる - lang を書かなければ、表示名は
ae86とそのまま出る - MOD 一覧に出る画像は
mods.tomlのlogoFileで指す
Naming rules in detail
- No uppercase, no spaces. Namespaces (
mypack) allowa-z 0-9 _ . -; car names allow those plus/ modIdis stricter: no-, no.(^[a-z][a-z0-9_]{1,63}$). Breaking that fails the load withInvalid modId. Use_as the only separator- Make the namespace the same as
modId. It works either way, but if two packs collide you cannot tell which one won - No subfolders.
cars/toyota/ae86.jsonbecomes the idmypack:toyota/ae86and the keycar.mypack.toyota/ae86 - Without a lang entry, the display name is simply
ae86 - The image in the mod list is
logoFileinmods.toml
Forge と NeoForge の両方で使いたい
見本をコピーしていれば、もうそうなっています。Forge 1.20.1 は META-INF/mods.toml だけを、NeoForge 1.21.1 は META-INF/neoforge.mods.toml だけを読むので、両方入れておけば同じ jar がどちらでも動きます。
- 2 つの中身はほぼ同じ。違うのはローダーの版(
loaderVersion)、Minecraft の版、依存の書き方(mandatory = trueがtype = "required")だけ pack.mcmetaに"supported_formats": [15, 48]を書く。無いと 1.21.1 で互換と見なされない
Work on both Forge and NeoForge
If you copied the example, it already does. Forge 1.20.1 reads only META-INF/mods.toml and NeoForge 1.21.1 reads only META-INF/neoforge.mods.toml, so with both inside, the same jar loads on either.
- The two files are nearly identical. Only the loader version (
loaderVersion), the Minecraft version, and how dependencies are written (mandatory = truebecomestype = "required") differ - Put
"supported_formats": [15, 48]inpack.mcmeta, or 1.21.1 will not treat the pack as compatible
見本の中身を知りたい・要らないものを消したい
| id | 何の見本か |
|---|---|
kurumamod_example_carpack:sample | 車体メッシュ・テクスチャ・灯火まで自前で持つ、一通り揃った車 |
kurumamod_example_carpack:sample_wheel | 自前のメッシュを持つホイールの部品(ホイールの 2 章) |
kurumamod_example_carpack:deep_dish | 換装画面のスライダーへ既定値を渡すホイールの部品 |
ホイールの部品が要らなければ、assets/mypack/car_parts/ と data/mypack/car_parts/ のファイル、wheel-sample.obj・.mtl、lang の part.… の行を消します。使わなくなった sample.obj なども消してかまいません。
隣の carpack/basic/ はプレイヤーへ配っている公式パックで、作りは同じです。出来上がったパックに何が入るかを見るのに向いています。
What is in the example, and what you can delete
| Id | What it demonstrates |
|---|---|
kurumamod_example_carpack:sample | A complete car — its own body mesh, texture and lights |
kurumamod_example_carpack:sample_wheel | A wheel part with its own mesh (chapter 2 of the Wheel guide) |
kurumamod_example_carpack:deep_dish | A wheel part that hands defaults to the fitment sliders |
If you do not want the wheel parts, delete the files in assets/mypack/car_parts/ and data/mypack/car_parts/, wheel-sample.obj and its .mtl, and the part.… lines in lang. Unused files such as sample.obj can go too.
carpack/basic/ next door is the official pack that ships to players, built the same way — a good look at what a finished pack contains.
仕組みを知りたい(なぜ見た目と走りでフォルダが分かれるのか)
assets/ はプレイヤーのゲームだけが読み、data/ はサーバーが読みます。誰も乗っていない車はサーバーが動かすので、走りを決める値は data/ に置きます。もし assets/ に置けたら、無人の車の動きが各プレイヤーのリソースパック次第になってしまいます。そのため、見た目の JSON に書けるのは見た目だけです。
jar 1 つにすれば、assets/ と data/ の両方が一緒に読まれます。
How it works (why looks and handling live in different folders)
assets/ is read only by each player's game; data/ is read by the server. The server drives cars nobody is in, so handling values belong in data/. If they could live in assets/, a driverless car would behave according to each player's resource pack. That is why the looks JSON can only describe appearance.
In a single jar, both assets/ and data/ are read together.
うまくいかないとき
- MOD 一覧に出ない …
modIdに-や.を使っていないか。META-INF/が jar の直下にあるか(共通の 4 章) - 車種が増えない …
data/mypack/cars/ae86.jsonの場所と、JSON の書き間違い。ログに理由が出る - 走るのに姿が既定の車のまま …
vehicles/の JSON のファイル名が車種名と同じか。modelの名前空間(mypack:)が合っているか - 表示名が
ae86のまま … lang のキーがcar.mypack.ae86になっているか - 車体だけ大きい・小さい …
designWheelBaseがメッシュの実寸か - 車体が埋まる・浮く …
designRideHeight。メッシュの原点が地面の高さにあるか - タイヤが大きすぎる・小さすぎる …
designWheelRadiusがメッシュの実寸か - 調整画面で寸法を変えたらタイヤがフェンダーからはみ出した … 仕様。タイヤは諸元に合わせて動き、車体は動かない。車体も合わせるなら
body.scale - 見た目の JSON に
massなどを書いても効かない … 走りの値はdata/の諸元に書く(8 章)
ほかの症状は共通の 6 章にあります。
When it doesn't work
- Not in the mod list — does
modIdcontain-or.? IsMETA-INF/at the top of the jar (chapter 4 of the Common guide)? - No new car — check where
data/mypack/cars/ae86.jsonis, and the JSON for typos. The reason is in the log - It drives but wears the default body — is the
vehicles/JSON named the same as the car? Does the namespace inmodel(mypack:) match? - The display name is just
ae86— is the lang keycar.mypack.ae86? - Only the body is too big or small — is
designWheelBasethe real size of your mesh? - The body sinks or floats —
designRideHeight. Is the mesh origin at ground level? - Wheels too big or small — is
designWheelRadiusthe real size of your mesh? - After changing sizes in the tuning screen, the wheels stick out of the fenders — expected. Wheels follow the spec; the body does not. Use
body.scaleto match the body massand the like in the looks JSON do nothing — handling values go in the spec underdata/(chapter 8)
More symptoms in chapter 6 of the Common guide.
7音を付ける
7Add sounds
エンジン音などを車ごとに差し替えます。書かなかった音は KurumaMod の音のままなので、この章は飛ばしてもかまいません。
Give a car its own engine note and other sounds. Anything you leave out stays KurumaMod's, so you can skip this chapter.
最小のエンジン音を付ける
Add a minimal engine sound
- ファイル音源を置く。
assets/mypack/sounds/ae86_exhaust.ogg。OGG・モノラルで、継ぎ目なくループするもの - ファイル高回転用の音源を作って、同じ場所に置く。同梱の道具を使う(Python が要る):
pip install numpy soundfile python sound_tools/make_octave_up.py ae86_exhaust.ogg # → ae86_exhaust_high.ogg - ファイル音に名前を付ける。
assets/mypack/sounds.json:{ "ae86_exhaust": { "category": "neutral", "subtitle": "subtitles.kurumamod.car_exhaust", "sounds": [{ "name": "mypack:ae86_exhaust", "attenuation_distance": 64 }] }, "ae86_exhaust_high": { "category": "neutral", "subtitle": "subtitles.kurumamod.car_exhaust", "sounds": [{ "name": "mypack:ae86_exhaust_high", "attenuation_distance": 64 }] } } - ファイル車の見た目の JSON から指す。
assets/mypack/vehicles/ae86.json(6 章)のいちばん外側に、手順 3 で付けた名前を書く:"sounds": { "exhaust": "mypack:ae86_exhaust", "exhaust_high": "mypack:ae86_exhaust_high" } - ゲームF3+T を押す。
これで、乗っている車のエンジン音がその場で入れ替わります。
- FileAdd the sound
assets/mypack/sounds/ae86_exhaust.ogg: Ogg Vorbis, mono, a seamless loop - FileMake the high-rpm copy and put it next to it, with the bundled tool (needs Python):
pip install numpy soundfile python sound_tools/make_octave_up.py ae86_exhaust.ogg # → ae86_exhaust_high.ogg - FileName the sounds in
assets/mypack/sounds.json:{ "ae86_exhaust": { "category": "neutral", "subtitle": "subtitles.kurumamod.car_exhaust", "sounds": [{ "name": "mypack:ae86_exhaust", "attenuation_distance": 64 }] }, "ae86_exhaust_high": { "category": "neutral", "subtitle": "subtitles.kurumamod.car_exhaust", "sounds": [{ "name": "mypack:ae86_exhaust_high", "attenuation_distance": 64 }] } } - FilePoint the car's looks JSON at them. At the top level of
assets/mypack/vehicles/ae86.json(chapter 6), write the names from step 3:"sounds": { "exhaust": "mypack:ae86_exhaust", "exhaust_high": "mypack:ae86_exhaust_high" } - GamePress F3+T.
The car you are in switches to the new engine sound on the spot.
ほかの音も同じやり方で差し替えられます。sounds に書ける名前:
Other sounds are replaced the same way. Names you can use in sounds:
| 名前 | 音 | 鳴り方 |
|---|---|---|
exhaust | エンジン音(低〜中回転) | ループ。回転数で音程、アクセルで音量が変わる |
exhaust_high | エンジン音(高回転) | ループ。exhaust を 1 オクターブ上げたもの |
road | ロードノイズ | ループ。車速 |
wind | 風切り音 | ループ。車速 |
slip / slip_chatter | タイヤの悲鳴(伸ばし/刻み) | ループ。舗装路で滑ったとき。滑り始めの 0.6 秒だけ刻みが鳴る |
gravel / sand | 砂利・土/砂・雪の路面音 | ループ。未舗装を走っているとき |
turbo | ターボの過給音(ヒュイーン) | ループ。ブーストで音程と音量が上がる。ターボの部品を付けたときだけ |
shift | 変速音 | 1 回 |
crash | 衝突音 | 1 回 |
blowoff | ブローオフ(プシュッ) | 1 回。ブーストが掛かった状態でアクセルを抜いたときとシフトアップのとき。ブローオフバルブの部品を付けたときだけ |
| Name | Sound | How it plays |
|---|---|---|
exhaust | Engine (low to mid rpm) | Loop. Pitch follows rpm, volume follows throttle |
exhaust_high | Engine (high rpm) | Loop. exhaust shifted up one octave |
road | Road noise | Loop. Speed |
wind | Wind | Loop. Speed |
slip / slip_chatter | Tyre squeal (sustained / chatter) | Loop. Sliding on tarmac; the chatter plays for the first 0.6 s of a slide |
gravel / sand | Gravel & dirt / sand & snow | Loop. Driving on loose ground |
turbo | Turbo spool whistle | Loop. Pitch and volume rise with boost. Only with a turbo part fitted |
shift | Gear change | One-shot |
crash | Impact | One-shot |
blowoff | Blow-off valve | One-shot. On a throttle lift or upshift under boost. Only with a blow-off valve part fitted |
必要なときだけ
Only when you need it
音源をうまく作りたい
- OGG Vorbis のモノラルにする。Audacity なら「トラック → ミックス → ステレオをモノラルにミックスダウン」してから OGG で書き出す
- ループ音は末尾を先頭へクロスフェードして、継ぎ目を消す。長さは 1 秒ほどあれば十分。短すぎると繰り返しが耳につく
- 音量は一定にする。ゲームがアクセルや車速で音量を動かすので、素材の中の強弱は二重に掛かって「うねる」
- エンジン音は少し高めに作る。アイドルで元の 0.65 倍、レブで約 3.9 倍の音程で鳴る。実車のアイドリングをそのまま使うと低すぎる
Make good source audio
- Ogg Vorbis, mono. In Audacity: Tracks → Mix → Mix Stereo Down to Mono, then export as OGG
- Cross-fade the tail of a loop into its head so there is no seam. About a second is plenty; much shorter and the repetition becomes audible
- Keep the level steady. The game drives volume from throttle and speed, so any swell inside the file is applied twice and the sound "wobbles"
- Build the engine a little high. It plays at 0.65× the original pitch at idle and about 3.9× at the redline; a straight recording of a real idle ends up too low
音の届く距離や字幕を変えたい
attenuation_distance… 音が届く距離 [ブロック]。書かなければ 16。KurumaMod はエンジン音 64・スキール 48・ロードノイズ 32subtitle… 字幕の翻訳キー。KurumaMod のもの(subtitles.kurumamod.car_exhaustなど)をそのまま借りられる。自分の lang に書いたキーでもよい"name"はsounds/からのパスで、拡張子を付けない
Change how far a sound carries, or its subtitle
attenuation_distance— how far it carries, in blocks (16 if left out). KurumaMod uses 64 for the engine, 48 for squeal, 32 for road noisesubtitle— the subtitle's translation key. You can borrow KurumaMod's (subtitles.kurumamod.car_exhaustand so on) or use one from your own lang"name"is the path undersounds/, without the extension
ターボやブローオフの音を変えたい
sounds に "turbo" / "blowoff" を書きます。変わるのは音だけです。鳴るかどうかは、その車にターボやブローオフバルブの部品が付いているかで決まります(パーツの 1 章)。
Change the turbo or blow-off sound
Write "turbo" / "blowoff" in sounds. Only the sound changes. Whether it plays depends on the car having a turbo or blow-off valve part fitted (chapter 1 of the Parts guide).
仕組みを知りたい(なぜ高回転用の音源が要るのか)
Minecraft は音程を 0.5〜2.0 倍までしか変えられません。1 つの音源ではレブまで音程が上がりきらないので、1 オクターブ上の音源を exhaust_high として並べ、回転に合わせて 2 つを入れ替えています。
make_octave_up.py は長さを半分にして 1 オクターブ上げます。ループはループのまま出てきます(継ぎ目は増えません)。ステレオを渡してもモノラルにして書きます。
How it works (why a high-rpm sound is needed)
Minecraft can only shift pitch between 0.5× and 2.0×, so one file cannot climb all the way to the redline. The game plays a one-octave-up copy as exhaust_high and cross-fades between the two with rpm.
make_octave_up.py halves the length to go up an octave. A seamless loop comes out seamless, and stereo input is written as mono.
うまくいかないとき
- 鳴らない … mp3 や wav になっていないか(OGG だけ鳴る)。
"name"に拡張子を付けていないか - いつもの音のまま …
soundsに書いた名前がsounds.jsonに無い。ログに警告が 1 行出ている。直したら F3+T - 離れても音が小さくならない … 音源がステレオ。モノラルにする
- 音がうねる … 音源の中で音量が揺れている。一定にする
- レブ付近で音程が上がりきらない …
exhaust_highを書いていない。書かないと高回転側にも同じ音源を使い、音程が 2 倍で頭打ちになる
When it doesn't work
- No sound — is it MP3 or WAV? Only OGG plays. Did you put the extension in
"name"? - Still the usual sound — the name in
soundsis missing fromsounds.json. A warning is in the log. Press F3+T after fixing - It stays loud far away — the file is stereo. Make it mono
- The sound wobbles — the level swells inside the file. Keep it steady
- The pitch stops rising near the redline —
exhaust_highis missing. Without it the same file plays on the high side, and the pitch caps at 2×
8諸元(走り)を書く
8Write the spec (how it drives)
加速・ブレーキ・曲がりかたを決める値(諸元)を書きます。置き場所は data/mypack/cars/<車>.json です。
This sets the values that decide acceleration, braking and cornering (the spec). They go in data/mypack/cars/<car>.json.
最小の諸元を作る
Make a minimal spec
- ゲーム車に乗り、G で調整画面を開いて、走りを詰める。
- ゲーム「プリセット」から名前を付けて保存する。
- ファイル
config/kurumamod-setups.jsonを開き、付けた名前の{ … }の中身をコピーする。中に"parts": { … }があれば、そこは除く - ファイル
data/mypack/cars/ae86.jsonのvaluesに貼る。{ "order": 10, "values": { "mass": 1500.0, "peak_torque": 200.0, "peak_torque_rpm": 3200.0, "redline_rpm": 5600.0 } } - ゲーム
/reloadを打つ。(F3+T ではない)
これで、クリエイティブタブから出したその車が、調整画面で詰めたとおりに走ります。
- GameGet in a car, press G to open the tuning screen, and dial in the handling.
- GameSave it under a name from "Preset".
- FileOpen
config/kurumamod-setups.jsonand copy what is inside the{ … }under your name. If there is a"parts": { … }inside, leave that out - FilePaste it into
valuesindata/mypack/cars/ae86.json.{ "order": 10, "values": { "mass": 1500.0, "peak_torque": 200.0, "peak_torque_rpm": 3200.0, "redline_rpm": 5600.0 } } - GameRun
/reload. (Not F3+T.)
The car, taken fresh from the creative tab, now drives the way you tuned it.
必要なときだけ
Only when you need it
変えたい項目だけ書きたい
Write only what you change
Anything you leave out takes the default, so keep only what differs from the default car. Old packs keep loading when KurumaMod adds parameters.
- Every key is listed in Appendix A
- Values that are ignored even if written (they follow from mass and the like) are in Appendix B
- You may skip
valuesand write the keys at the top level instead
手で数字を書きたい(単位)
ファイルには内部単位で書きます。角度はラジアンです。調整画面が度で見せている項目でも同じです。
| 種類 | 単位 |
|---|---|
| 長さ | m(cm ではない) |
| 質量 | kg |
| 角度 | rad(度ではない) |
| バネ定数 | N/m |
| トルク | N·m |
| 回転数 | rpm |
- 例: 最大切れ角 35 度は
"max_steer": 0.6109。32.0と書くと 32 ラジアンと読まれる - 調整画面の範囲から外れた値は、範囲の端に丸められる(ログに警告が出る)
Type the numbers by hand (units)
The file takes internal units. Angles are radians, even for parameters the tuning screen shows in degrees.
| Quantity | Unit |
|---|---|
| Length | m (not cm) |
| Mass | kg |
| Angle | rad (not degrees) |
| Spring rate | N/m |
| Torque | N·m |
| Engine speed | rpm |
- Example: 35° of steering lock is
"max_steer": 0.6109. Writing32.0is read as 32 radians - Values outside the tuning screen's range are clamped to the nearest end (the log warns you)
メモを残したい
_ で始まるキーは読み飛ばされます。JSON にはコメントが書けないので、これで理由を残せます。
{
"values": {
"_comment_mass": "バンなので既定より重くする",
"mass": 1500.0
}
}
Leave notes
Keys starting with _ are skipped. JSON has no comments, so this is how you leave a note.
{
"values": {
"_comment_mass": "A van, so heavier than the default",
"mass": 1500.0
}
}
クリエイティブタブでの並び順を変えたい
いちばん外側の order で決まります。小さいほど前(既定 100)。
Change the order in the creative tab
Set order at the top level. Smaller comes first (default 100).
最初から部品を付けておきたい
いちばん外側の default_parts に書きます(values と同じ階層)。書き方はパーツの 2 章にあります。
Fit parts from the start
Write default_parts at the top level, next to values. See chapter 2 of the Parts guide.
うまくいかないとき
- 直したのに走りが変わらない …
/reloadを打ったか。すでに置いてある車は置いたときの諸元のまま。クリエイティブタブから出し直す - その車種がタブから消えた … JSON が壊れている。
valuesに"parts"のような数でないものが混ざっていないか。理由はログに出る - 舵が異常に切れる・効かない … 角度を度で書いていないか(ラジアンで書く)
- 書いた値が効かない … 車重などから自動で決まる値かもしれない(付録 B)。見た目の JSON(
assets/)に書いていないか
When it doesn't work
- An edit changes nothing — did you run
/reload? A car already placed keeps the spec it was placed with; take a fresh one from the creative tab - The car vanished from the tab — the JSON is broken. Is something that is not a number, like
"parts", insidevalues? The reason is in the log - Steering is wild or dead — did you write an angle in degrees? Use radians
- A value has no effect — it may be one that follows from mass and the like (Appendix B). Or did you put it in the looks JSON under
assets/?
2ホイールを部品にする
2Make a wheel a part
作ったホイールを、ゲームの換装画面で選べるようにします。見た目だけの部品で、走りは変わりません。
Make your wheel selectable in the in-game parts screen. It changes the looks only; driving stays the same.
最小のホイール部品を作る
Make a minimal wheel part
- Blenderホイールのモデルを作って置く。作り方は 1 章。ここでは
assets/mypack/models/entity/my_wheel.objとassets/mypack/textures/entity/my_wheel.pngに置いたとする - ファイル部品のファイルを置く。
data/mypack/car_parts/my_wheel.json(ファイル名が部品名):{ "slot": "wheel" } - ファイル見た目のファイルを置く。
assets/mypack/car_parts/my_wheel.json(部品と同じファイル名)。designRadiusは作った半径(ゲージどおりなら 0.45):{ "wheel": { "model": "mypack:models/entity/my_wheel.obj", "texture": "mypack:textures/entity/my_wheel.png", "designRadius": 0.45 } } - lang表示名を lang に書く。
"part.mypack.my_wheel": "マイホイール"
これで、ゲームの G →「パーツ」→「ホイール」のタブに並びます。
- BlenderBuild the wheel model and put it in your pack. See chapter 1. Here it is at
assets/mypack/models/entity/my_wheel.objandassets/mypack/textures/entity/my_wheel.png - FileAdd the part file
data/mypack/car_parts/my_wheel.json(the file name is the part name):{ "slot": "wheel" } - FileAdd the looks file
assets/mypack/car_parts/my_wheel.json(same file name as the part).designRadiusis the radius you built at (0.45 if you followed the gauge):{ "wheel": { "model": "mypack:models/entity/my_wheel.obj", "texture": "mypack:textures/entity/my_wheel.png", "designRadius": 0.45 } } - langAdd the display name to lang.
"part.mypack.my_wheel": "My Wheels"
It now appears under G → "Parts" → the "Wheels" tab.
見本パックの sample_wheel が、この形そのものです。
The example pack's sample_wheel is exactly this setup.
必要なときだけ
Only when you need it
オフセット・キャンバー・太さの最初の値を決めたい
見た目のファイル assets/mypack/car_parts/my_wheel.json の wheel に書きます。換装画面のスライダーの最初の位置になり、プレイヤーが「R」を押すとここへ戻ります。
{
"wheel": {
"model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png",
"designRadius": 0.45,
"offset": [0.02, 0.0, 0.0],
"scale": [1.3, 1.0, 1.0],
"camber": -4.0
}
}
offset… X だけ使う。外へ出す量 [m](−0.05〜0.10)scale… X だけ使う。太さの倍率(0.5〜2.5)。Y・Z は 1.0 のままにする(変えると接地が崩れる)camber… キャンバー角 [度]。負で上が内側(−30〜10)- 範囲の外に書いた値は、端に丸めて読む
- 書かなかった項目は、その車のホイールの値になる
Set the starting offset, camber and width
Write them under wheel in the looks file assets/mypack/car_parts/my_wheel.json. They become where the parts-screen sliders start, and "R" returns to them.
{
"wheel": {
"model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png",
"designRadius": 0.45,
"offset": [0.02, 0.0, 0.0],
"scale": [1.3, 1.0, 1.0],
"camber": -4.0
}
}
offset— only X is used: how far out to push the wheel [m] (−0.05 to 0.10)scale— only X is used: width multiplier (0.5 to 2.5). Leave Y and Z at 1.0 (changing them breaks ground contact)camber— camber in degrees. Negative leans the top inward (−30 to 10)- Values outside the range are clamped to the nearest end
- Anything you leave out takes the car's own wheel value
メッシュを作らず、角度や太さだけ変えた部品にしたい
model と texture を書かなければ、その車のホイールのまま、書いた値だけが変わります。見本パックの deep_dish がこの形です。assets/mypack/car_parts/deep_dish.json:
{
"wheel": {
"scale": [1.6, 1.0, 1.0],
"camber": -12.0
}
}
ただし、スライダーで作れる状態に名前を付けるだけになるので、ふつうはメッシュを持つホイールを作ります。
A part with no mesh, only a different angle or width
Leave out model and texture; the car's own wheel is kept and only the values you write change. The example pack's deep_dish works this way. assets/mypack/car_parts/deep_dish.json:
{
"wheel": {
"scale": [1.6, 1.0, 1.0],
"camber": -12.0
}
}
This only names something players can already make with the sliders, so usually you would build a wheel with its own mesh.
決まった車種にだけ付けたい
data/mypack/car_parts/my_wheel.json の cars に車種の id を並べます。その車種の換装画面にだけ並びます。別のパックの車種を書いてもかまいません(kurumamod:car は KurumaMod の既定の車)。
{
"slot": "wheel",
"cars": ["mypack:kei", "mypack:kei_van"]
}
Only fit certain cars
List car ids in cars in data/mypack/car_parts/my_wheel.json. The part then appears only in those cars' parts screen. Cars from other packs are fine (kurumamod:car is KurumaMod's default car).
{
"slot": "wheel",
"cars": ["mypack:kei", "mypack:kei_van"]
}
換装画面に並ぶ順を変えたい
data/mypack/car_parts/my_wheel.json に order を書きます。小さいほど左に並びます(書かなければ 100)。
{
"slot": "wheel",
"order": 10
}
Change the order in the parts screen
Add order to data/mypack/car_parts/my_wheel.json. Smaller numbers sit further left (100 if left out).
{
"slot": "wheel",
"order": 10
}
前後で違うホイールにしたい
いまはできません。4 輪とも同じ部品を履きます。
Different wheels front and rear
Not possible yet. All four wheels wear the same part.
うまくいかないとき
- 換装画面に並ばない …
data/側のファイルが無いか、slotが書かれていない(ログに出る)。carsで絞っているなら、乗っている車種が入っているか見る - 並ぶが、見た目が変わらない …
assets/側のファイル名がdata/側と違う。または"wheel": { ... }の中のキーの綴りが違う - 名前が
my_wheelのまま出る … lang のキーがpart.<パック>.<部品名>になっていない - 大きすぎる・小さすぎる …
designRadiusが作った半径になっていない - 付けても走りが変わらない … ホイールは見た目だけの部品。グリップを変えたいならタイヤ(3 章)
When it doesn't work
- Not in the parts screen — the
data/file is missing, or has noslot(the log says so). If you usecars, check the car you are in is listed - Listed, but the looks do not change — the
assets/file name differs from thedata/one, or a key inside"wheel": { ... }is misspelt - The name shows as
my_wheel— the lang key is notpart.<pack>.<part> - Too big or too small —
designRadiusis not the radius you built at - Driving does not change — wheels are looks only. To change grip, make a tyre (chapter 3)
4jar に固めて配る
4Pack it into a jar and ship it
カーパックは、コードを持たない MOD の jar です。フォルダの中身を zip で固めて .jar にし、mods/ に入れます。
A car pack is a mod jar with no code in it. You zip the folder's contents, name it .jar and put it in mods/.
最小のパックを作る
Make a minimal pack
- ファイル見本のフォルダ
carpack/example/をコピーする。例:mypack/ - ファイルコピーしたフォルダの中で、中身を jar に固める。どちらか 1 つ:
cd mypack jar --create --file ../mypack.jar . # JDK があるとき zip -r ../mypack.jar . # zip があるとき# Windows の PowerShell(JDK が無いとき) cd mypack Compress-Archive -Path * -DestinationPath ..\mypack.zip Rename-Item ..\mypack.zip mypack.jar - ファイルできた
mypack.jarを、Minecraft のmods/フォルダに入れる。 - ゲーム起動して、クリエイティブの「KurumaMod」タブを開く。
これで、タブに「サンプルカー」が並びます。この jar を土台に、中身を自分の車やパーツに置き換えていきます。
- FileCopy the example folder
carpack/example/. For example, tomypack/ - FileFrom inside the copied folder, pack its contents into a jar. Use one of these:
cd mypack jar --create --file ../mypack.jar . # if you have a JDK zip -r ../mypack.jar . # if you have zip# Windows PowerShell (without a JDK) cd mypack Compress-Archive -Path * -DestinationPath ..\mypack.zip Rename-Item ..\mypack.zip mypack.jar - FilePut the resulting
mypack.jarinto Minecraft'smods/folder. - GameStart the game and open the "KurumaMod" creative tab.
The "Sample Car" is now in the tab. Use this jar as your base and replace its contents with your own cars and parts.
META-INF/ と pack.mcmeta は jar のいちばん上に
フォルダごと固めると一段深くなり、mods/ に入れても何も起きません。必ずフォルダの中で固めます。
META-INF/ AND pack.mcmeta AT THE TOP OF THE JAR
Zipping the folder itself buries them one level down, and nothing happens. Always pack from inside the folder.
必要なときだけ
Only when you need it
自分のパックの名前にしたい
kurumamod_example_carpack を、自分のパックの名前(例 mypack)に全部置き換えます。
META-INF/mods.tomlとMETA-INF/neoforge.mods.tomlのmodIdを変える。displayName・description・versionも自分のものにするassets/kurumamod_example_carpack/とdata/kurumamod_example_carpack/のフォルダ名をmodIdと同じにする- JSON の中の
kurumamod_example_carpack:(モデルのパス)と、lang のキー(car.kurumamod_example_carpack.sampleなど)も置き換える - MOD 一覧の画像を変えるなら、png を差し替えて
logoFileの名前を合わせる
modIdに使えるのはa-z 0-9 _だけ(先頭は英字)。-や.を入れると、ゲームが起動時にInvalid modIdで落ちる- フォルダ名(名前空間)は
modIdと同じにする。違っても動くが、ほかのパックとぶつかったときにどちらが読まれるか分からない - 車種のファイル名と名前の決まりは車の 6 章
Give the pack your own name
Replace every kurumamod_example_carpack with your pack's name (e.g. mypack).
- Change
modIdinMETA-INF/mods.tomlandMETA-INF/neoforge.mods.toml. MakedisplayName,descriptionandversionyour own too - Rename the folders
assets/kurumamod_example_carpack/anddata/kurumamod_example_carpack/to matchmodId - Replace
kurumamod_example_carpack:inside the JSON (model paths) and in the lang keys (car.kurumamod_example_carpack.sampleand so on) - For your own mod-list image, swap the png and update
logoFileto its name
modIdmay only usea-z 0-9 _(starting with a letter). A-or.crashes the game at start-up withInvalid modId- Make the folder name (the namespace) the same as
modId. It works otherwise, but if two packs collide you cannot tell which one wins - Car file names and naming rules are in chapter 6 of the Car guide
ほかの人に配りたい・マルチプレイで使いたい
- マルチプレイでは、サーバーと全員のゲームの両方に入れる。どの車があるかはサーバーが決め、姿は各プレイヤーのゲームが描く
- jar 1 つのまま配る。リソースパックとデータパックに分けると、片方だけ入れた人には「見えるのに走らない」車になる
- 見本の
mods.tomlとneoforge.mods.tomlを両方残しておけば、同じ jar が Forge 1.20.1 と NeoForge 1.21.1 の両方で読まれる CURSEFORGE.mdとMODRINTH.mdは、配布ページの説明文のひな形に使える- カーパックを外しても、ワールドは壊れない。知らない車は既定の車として走り、入れ直せば元に戻る
Share it, or use it in multiplayer
- In multiplayer, install it on the server and on every player's game. The server decides which cars exist; each player's game draws them
- Ship it as one jar. Split into a resource pack and a data pack, anyone who installs only one gets a car that shows up but will not drive
- Keep both
mods.tomlandneoforge.mods.tomlfrom the example, and the same jar loads on Forge 1.20.1 and NeoForge 1.21.1 CURSEFORGE.mdandMODRINTH.mdwork as templates for your download page- Removing a car pack does not break a world. Unknown cars drive as the default car, and putting the pack back restores them
見本の中の要らないファイルを消したい
PACK_CREATE_GUIDE.html・CURSEFORGE.md・MODRINTH.md・modeling_tools/・sound_tools/ は、作るための説明書きと道具です。消しても、入れたままでも構いません。
見本は自由に使えます。コピーして自分のパックの土台にしてよく、表示も許諾も要りません。
Remove the files you don't need from the example
PACK_CREATE_GUIDE.html, CURSEFORGE.md, MODRINTH.md, modeling_tools/ and sound_tools/ are documentation and tools for making packs. Delete them or keep them.
The example is free to use. Copy it as the base of your own pack; no credit or permission needed.
うまくいかないとき
- MOD 一覧に出ない … フォルダごと固めている。フォルダの中で固め直す
- 起動時に
Invalid modIdで落ちる …modIdに-や.や大文字がある - MOD 一覧には出るのに車が増えない …
data/<パック>/cars/に車種の JSON があるか見る。ほかの症状は6 章
When it doesn't work
- Not in the mod list — you zipped the folder itself. Pack again from inside it
- The game crashes at start-up with
Invalid modId—modIdhas a-, a.or an uppercase letter - In the mod list, but no cars added — check there is a car JSON in
data/<pack>/cars/. Other symptoms: chapter 6
5確認する
5Check it in game
ゲームを開いたまま、直しては読み直して見る、を繰り返します。再起動は要りません。
Keep the game running and repeat: fix, reload, look. No restart needed.
やること
What you do
- ゲームクリエイティブの「KurumaMod」タブから車を出して乗る。
- Blender直して、同じファイル名で書き出し直す。
- ゲーム見た目(
assets/)を直したら F3+T を押す。モデル・テクスチャ・vehicles/*.json・部品の見た目・音が読み直される - ゲーム走りや部品の中身(
data/)を直したら/reloadを打つ。諸元・部品の性能・初期装備が読み直される
これで、直したところがすぐゲームに出ます。下の表で見ていきます。
- GameTake a car from the "KurumaMod" creative tab and get in.
- BlenderFix it and export again under the same file name.
- GameAfter changing the looks (
assets/), press F3+T. Models, textures,vehicles/*.json, part looks and sounds reload - GameAfter changing driving or part contents (
data/), type/reload. The spec, part performance and default parts reload
Your fix now shows up in game. Use the table below to check it.
見るところ
What to look at
| 何を | どうやって |
|---|---|
| タイヤの位置と大きさ | 止まった状態で、フェンダーの中に収まっているか |
| 車高 | 地面に埋まっていないか、浮いていないか |
| 大きさの追従 | G の調整画面でタイヤ半径を動かす。タイヤは追従し、車体は追従しない(それで正しい) |
| ライト | L でヘッドライト。ブレーキでテール。R に入れてバックランプ |
| ガラス | 車内から外が見えるか。濃すぎないか |
| ミラー | H のメニューで入れてから見る(既定は切) |
| サス | ブレーキで鼻先が沈むか。車体とタイヤの間隔が変わるか |
| パーツ | G →「パーツ」で付け替える。付けたものだけが出て、外すと消えるか |
| 音 | アイドルからレブまで回して、音程が上がりきるか。うねらないか |
| What | How |
|---|---|
| Wheel position and size | Parked: do they sit inside the arches? |
| Ride height | Not sunk into the ground, not floating |
| Scaling | Change the tyre radius in the G tuning screen. The wheels follow; the body does not (that is correct) |
| Lights | L for headlights, brake for the tails, R for the reverse lights |
| Glass | Can you see out from inside? Is it too dark? |
| Mirrors | Turn them on in the H menu first (off by default) |
| Suspension | Does the nose dip under braking? Does the body-to-wheel gap change? |
| Parts | Swap them in G → "Parts". Does only the fitted one show, and vanish when removed? |
| Sound | Rev from idle to the limit. Does the pitch keep rising? Does it swell? |
必要なときだけ
Only when you need it
読み込みのエラーを見たい(ログ)
ゲームのフォルダの logs/latest.log を開いて、車種を・部品・OBJ などで探します。読めなかったファイルと理由が 1 行ずつ残っています。
See loading errors (the log)
Open logs/latest.log in the game folder and search for 車種を, 部品, OBJ and so on. Each file that failed to load is listed with its reason, one line each (the messages are in Japanese).
/reload が打てない
/reload はチート(コマンド)を有効にしたワールドで使えます。使えないときは、ワールドに入り直すと data/ も読み直されます。
/reload does not work
/reload needs a world with cheats (commands) on. Otherwise, leave and re-enter the world; that reloads data/ too.
うまくいかないとき
- 直したのに変わらない …
assets/とdata/のどちらを直したか確かめる。読み直し方が違う(上の手順 3・4) - jar の中を直したのに変わらない …
mods/の jar は起動時にしか読まれない。jar を作り直したら再起動する - そのほかの症状は6 章
When it doesn't work
- You fixed it but nothing changed — check whether you edited
assets/ordata/. They reload differently (steps 3 and 4) - You changed the jar but nothing changed — jars in
mods/are read only at start-up. Restart after rebuilding the jar - Other symptoms: chapter 6
6症状別の直しかた
6Troubleshooting
カーパックは、失敗してもエラー画面を出しません。壊れたファイルは捨てて先へ進むので、症状から探します。理由はたいてい logs/latest.log に 1 行残っています。
Car packs fail without an error screen. A broken file is dropped and loading carries on, so you work from the symptom. The reason is usually one line in logs/latest.log.
読み込み・名前
Loading and names
| 症状 | 直しかた |
|---|---|
| MOD 一覧に出ない | フォルダごと固めている。META-INF/mods.toml(NeoForge は neoforge.mods.toml)を jar のいちばん上に |
起動時に Invalid modId で落ちる | modId を a-z 0-9 _ だけにする |
| 車が 1 台も増えない | data/<パック>/cars/*.json を置く。ログの 車種を N 件読み込みました を見る |
| その 1 台だけ増えない | その JSON が壊れている。理由はログに |
表示名が ae86 のように出る | lang のキーを car.<パック>.<車> にする |
| 走るのに姿が既定の車のまま | vehicles/ の JSON のファイル名とパス、名前空間(mypack:)を車種 id に揃える |
| 直したのに何も変わらない | 見た目は F3+T、data/ は /reload。リソースパックで試しているなら、有効にしたか見る(5 章) |
| 舵が切れすぎる/効かない | 諸元の角度を度で書いている。ラジアンで書く |
| Symptom | Fix |
|---|---|
| Not in the mod list | You zipped the folder itself. META-INF/mods.toml (NeoForge: neoforge.mods.toml) must be at the top of the jar |
Crashes at start-up with Invalid modId | Use only a-z 0-9 _ in modId |
| No cars added at all | Add data/<pack>/cars/*.json. Check the 車種を N 件読み込みました line in the log |
| Only that one car is missing | That JSON is broken. The reason is in the log |
The name shows as ae86 | Make the lang key car.<pack>.<car> |
| It drives, but looks like the built-in car | Match the file name and path in vehicles/ and the namespace (mypack:) to the car id |
| You fixed it but nothing changed | Looks: F3+T. data/: /reload. Testing with a resource pack? Check it is enabled (chapter 5) |
| Steering is wild, or does nothing | A spec angle is in degrees. Write it in radians |
形と大きさ
Shape and size
| 症状 | 直しかた |
|---|---|
| 車体だけ大きい/小さい | designWheelBase をメッシュの実寸にする。微調整は body.scale |
| 車体が地面に埋まる/浮く | designRideHeight を見る。原点は車体の底ではなく地面の高さに |
| タイヤが前後にずれる | designWheelBase を見る。ゲームで前後の荷重配分を動かしたなら、それで正しい(車体は追従しない) |
| タイヤが大きすぎ/小さすぎ | designWheelRadius をメッシュの実寸にする。部品のホイールなら部品の designRadius |
| タイヤが横倒し/転がりかたが変 | 回転軸を X に。原点を車軸の中心に |
| 右のタイヤだけ内側を向く | 左側用として作る。表を +X へ |
| 前後が逆/左右が鏡像 | 書き出しの Forward Axis を既定に戻す |
| 面がねじれる/抜ける | 大きく曲がった面か、辺が交差した面がある。その面だけ Blender で割る |
| ゲージが車と一緒に書き出される | 描かれないので害はない。気になるなら書き出しで Selected Only を入れる |
| Symptom | Fix |
|---|---|
| Body too big / too small | Set designWheelBase to your mesh's real size. Fine-tune with body.scale |
| Body sunk into or floating above the ground | Check designRideHeight. The origin belongs at ground level, not the underside of the body |
| Wheels sit too far forward or back | Check designWheelBase. If you moved the weight distribution in game, this is correct (the body does not follow) |
| Wheels too big / too small | Set designWheelRadius to your mesh's real size. For a wheel part, its designRadius |
| Wheels lie on their side / roll oddly | Make X the spin axis. Put the origin at the axle centre |
| Only the right wheels face inward | Build it as the left wheel, face towards +X |
| Front and back swapped / mirrored | Put Forward Axis in the exporter back to the default |
| Faces look twisted or missing | A face is badly bent or its edges cross. Split just that face in Blender |
| The gauge is exported with the car | Harmless; it is never drawn. Tick Selected Only on export if it bothers you |
色・ガラス・ライト・ミラー
Colour, glass, lights, mirrors
| 症状 | 直しかた |
|---|---|
| テクスチャが暗い | マテリアルの Base Color を白に(既定の 0.8 グレーのまま) |
| 全体が真っ白 | .mtl が無いか、マテリアルが無い。形が正しければ問題ない |
| 窓が透けない | オブジェクト名かマテリアル名を glass で始める。.mtl を一緒に置く |
| マテリアルで割り当てたのに光らない/透けない | 書き出しの「マテリアル」→「書き出し」を入れる。名前を light_・glass・mirror_ で始める |
| ライトなのに透ける(役目が思ったのと違う) | オブジェクト名よりマテリアル名が優先される。マテリアル名を直す。ログに …を優先します と出る |
| ライトを足したところが穴になる | light_ で始まる名前は light_head・light_tail・light_reverse の 3 つだけ。オブジェクト名もマテリアル名も |
| ミラーが映らない | H で入れる。描画設定が「最高(Fabulous)」のときと、シェーダーパックを使っているときは映らない |
| 部品の中のミラーが映らない | 部品の中の鏡は映らない(ふつうの面になる)。鏡は車体側に作る |
| 左右のミラーに同じ景色が映る | ミラーモディファイアで 1 つにしている。左右を別のオブジェクトに |
| ミラーが地面ばかり映す | 板の角度は関係ない。鏡の位置を見る(車体の中心から 0.35m 以内はルームミラーになる) |
| 車内が暗い | 車体の裏面が見えている。それで正しい |
| Symptom | Fix |
|---|---|
| Texture looks dark | Set the material Base Color to white (it is still the default 0.8 grey) |
| Everything is white | No .mtl, or no material. Harmless if the shape is right |
| Windows are not see-through | Start the object or material name with glass. Keep the .mtl alongside |
| A material doesn't light up / go see-through | Tick "Materials" → "Export" in the exporter. Start the name with light_, glass or mirror_ |
| A light turns see-through (the wrong role) | The material name wins over the object name. Fix the material name. The log notes it |
| A hole where you added a light | Only three light_ names exist: light_head, light_tail, light_reverse — for objects and materials alike |
| Mirrors show nothing | Turn them on with H. They do not work on the "Fabulous" graphics setting or with a shader pack |
| A mirror inside a part shows nothing | Mirrors inside parts do not reflect (they draw as plain faces). Put mirrors on the body |
| Both door mirrors show the same view | They are one object via a mirror modifier. Make them separate objects |
| A mirror only shows the ground | The modelled angle does not matter. Check its position (within 0.35 m of the centreline it counts as the rear-view mirror) |
| The cabin is dark | You are seeing the back of the body faces. That is correct |
パーツ
Parts
| 症状 | 直しかた |
|---|---|
| 換装画面に外装パーツ・マフラーのタブが出ない | OBJ に part_ のオブジェクトが入っていない。非表示のまま書き出していないか、名前が part_<場所>-<部品名> か見る(パーツの 2 章) |
| タブはあるのに部品が並ばない | data/<パック>/car_parts/ に部品の JSON を置き、slot を書く。オブジェクト名の部品名をファイル名に揃える。cars にその車を入れる |
| 付け替えても純正の部分が残る | 純正の部分が body と一体になっている。別のオブジェクトにして部品にする |
| 初期装備を書いたら、その車ごと増えなくなった | default_parts を values の中に書いている。values と同じ、いちばん外側に書く |
| 初期装備が付かない | 場所の名前か部品の id が違う。場所の名前の間違いはログに出る |
| 初期装備を外せない(「なし」が無い) | "removable": false になっている |
| 「ブローオフ」のタブが出ない | 先にターボを付ける |
| ホイールが換装画面に出ない | data/<パック>/car_parts/ に置き、slot を書く。cars にその車を入れる |
| ホイールを選んでも見た目が変わらない | assets/<パック>/car_parts/ のファイル名を、data/ 側と同じにする |
| Symptom | Fix |
|---|---|
| No tab for body parts or exhausts in the parts screen | The OBJ has no part_ object. Check it was not hidden when you exported, and that it is named part_<slot>-<part> (Parts guide, chapter 2) |
| The tab is there but the part is not listed | Put the part JSON in data/<pack>/car_parts/ with a slot. Match the part name in the object name to the file name. Include the car in cars |
| The stock piece stays whatever is fitted | It is merged into body. Make it a separate object and a part |
| After adding default parts, the whole car disappeared | default_parts is inside values. Move it to the top level, next to values |
| A default part is not fitted | The slot name or the part id is wrong. A wrong slot name is logged |
| A default part can't be removed (no "None") | It has "removable": false |
| No "Blow-off" tab | Fit a turbo first |
| A wheel is missing from the parts screen | Put it in data/<pack>/car_parts/ with a slot. Include the car in cars |
| Picking a wheel changes nothing | Give the file in assets/<pack>/car_parts/ the same name as the one in data/ |
音
Sound
| 症状 | 直しかた |
|---|---|
| 差し替えた音が鳴らず、いつもの音のまま | sounds の値を sounds.json の名前に揃える。ログに 指定されたサウンドイベントが sounds.json にありません と出る |
| 音がまったく鳴らない | ogg にする(mp3・wav は鳴らない)。sounds.json の "name" に拡張子を付けない |
| どこにいても同じ大きさで聞こえる | ogg をモノラルにする |
| レブ付近で音程が上がりきらない | exhaust_high を置く(車の 7 章) |
| エンジン音が周期的にうねる | 素材の音量を一定に均してから書き出す |
| Symptom | Fix |
|---|---|
| Your sound doesn't play; it is the usual one | Match the value in sounds to a name in sounds.json. The log says 指定されたサウンドイベントが sounds.json にありません |
| No sound at all | Use ogg (mp3 and wav do not play). No extension on "name" in sounds.json |
| Equally loud everywhere | Make the ogg mono |
| The pitch stops rising near the redline | Add exhaust_high (Car guide, chapter 7) |
| The engine swells periodically | Even out the level in the file before exporting |
7チェックリスト
7Checklists
場面ごとに、見落としやすいところを並べます。症状が出てから探すときは6 章へ。
What is easy to miss, by stage. If something is already wrong, go to chapter 6.
書き出す前(Blender)
Before exporting (in Blender)
- ワールド原点が「地面の高さ・前後輪の中点・左右中央」にある
- 車の前が −Y を向いている
- フェンダーがゲージのタイヤに合っている
- ライトの名前(オブジェクト名かマテリアル名)が
light_head/light_tail/light_reverseのどれか。ほかのlight_は無い - レンズ面が車体から 1〜2mm 浮いている
- 窓の名前(オブジェクト名かマテリアル名)が
glassで始まる - 左右のドアミラーが別のオブジェクトになっている
- マテリアルの Base Color が白
- タイヤは別ファイル・左側用 1 つ・原点は車軸・表は +X
- The world origin is at ground level, midway between the axles, on the centreline
- The front of the car points along −Y
- The arches line up with the gauge wheels
- Light names (object or material) are
light_head,light_tailorlight_reverse. No otherlight_exists - Lens faces float 1–2 mm proud of the body
- Window names (object or material) start with
glass - The two door mirrors are separate objects
- Material Base Color is white
- Wheel: separate file, left side only, origin at the axle, face towards +X
外装パーツ・マフラーを入れたとき(Blender)
If you added body parts or exhausts (in Blender)
- 部品のオブジェクト名が
part_<場所>-<部品名>で、部品名がcar_parts/のファイル名と同じ - 付け替える純正の部分も、
bodyから分けて別のオブジェクトにした - 付け替え候補の部品を全部表示にしてから選んだ(非表示のものは書き出されない)
- 部品の中のライトは、その面に
light_のマテリアルを割り当てた
- Part objects are named
part_<slot>-<part>, and the part name matches the file name incar_parts/ - Stock pieces that can be swapped are split from
bodyinto their own objects - Every selectable part was unhidden before selecting (hidden objects are not exported)
- Lights inside a part use a
light_material on those faces
書き出しの画面
In the export dialog
Selected Onlyを入れた(ゲージが混ざらない)Triangulated Meshを入れていないForward Axis/Up Axisを触っていない- 「マテリアル」の「書き出し」が入っている(既定で入っている)
- 車体とタイヤを別のファイルに書き出した
.mtlも一緒に置いた
Selected Onlyticked, so the gauge stays outTriangulated Meshleft offForward Axis/Up Axisuntouched- "Materials" → "Export" ticked (it is by default)
- Body and wheel exported to separate files
- The
.mtlkept alongside
ゲームで見る前
Before loading it in game
- JSON に書いたパスが、実際のファイル名と同じ
designWheelBase/designWheelRadiusがメッシュの実寸- リソースパックで試すなら、ゲームで有効にした
- 見た目を直したら F3+T、
data/を直したら/reload
- The paths in the JSON match the actual file names
designWheelBaseanddesignWheelRadiusare your mesh's real sizes- If testing with a resource pack, it is enabled in game
- F3+T after changing looks,
/reloadafter changingdata/
音を付けたとき
If you added sounds
- ogg・モノラル・継ぎ目の無いループ
exhaust_highをsound_tools/make_octave_up.pyで作って並べたsounds.jsonの"name"に拡張子を付けていないvehicles/<car>.jsonのsounds(マフラーなら部品の見た目のexhaust.sound)がsounds.jsonの名前を指している
- Ogg, mono, seamless loops
exhaust_highmade withsound_tools/make_octave_up.pyand put alongside- No extension on
"name"insounds.json soundsinvehicles/<car>.json(for an exhaust part,exhaust.soundin its looks JSON) points at names fromsounds.json
配る前
Before you ship
modIdがa-z 0-9 _だけで、名前空間(フォルダ名)と同じ- 諸元・見た目・lang のファイル名と翻訳キーが車種 id と揃っている
- 部品の表示名を
part.<パック>.<部品名>で lang に書いた default_partsをvaluesの中ではなく、いちばん外側に書いた- 諸元の角度をラジアンで書いた(ゲーム内で書き出したなら問題ない)
META-INF/とpack.mcmetaが jar のいちばん上にある- マルチプレイなら、サーバーにも入れた
modIduses onlya-z 0-9 _and matches the namespace (folder name)- Spec, looks and lang file names and translation keys all match the car id
- Part display names are in lang as
part.<pack>.<part> default_partsis at the top level, not insidevalues- Spec angles are in radians (fine if you exported from in game)
META-INF/andpack.mcmetasit at the top of the jar- For multiplayer, installed on the server too
3タイヤを部品にする
3Make a tyre a part
ダート用・オフロード用のような、走りが変わるタイヤを作ります。タイヤはホイールとは別の部品で、路面ごとのグリップが変わります。
Make a tyre that changes how the car drives, such as a gravel or mud-terrain tyre. Tyres are a separate part from wheels, and they change grip on each surface.
最小のタイヤ部品を作る
Make a minimal tyre part
- ファイル部品のファイルを置く。
data/mypack/car_parts/my_tire.json(ファイル名が部品名):{ "slot": "tire", "tire": { "grip": { "paved": 0.90, "gravel": 1.20 } } } - lang表示名を lang に書く。
"part.mypack.my_tire": "マイタイヤ"
これで、ゲームの G →「パーツ」→「タイヤ」のタブに並びます。数字はノーマルタイヤに対する倍率で、この例は舗装で 0.9 倍・砂利で 1.2 倍のグリップです。見た目は KurumaMod 標準のタイヤです。
- FileAdd the part file
data/mypack/car_parts/my_tire.json(the file name is the part name):{ "slot": "tire", "tire": { "grip": { "paved": 0.90, "gravel": 1.20 } } } - langAdd the display name to lang.
"part.mypack.my_tire": "My Tyres"
It now appears under G → "Parts" → the "Tyres" tab. The numbers are ratios to the Normal tyre; this one has 0.9× grip on tarmac and 1.2× on gravel. It looks like KurumaMod's standard tyre.
必要なときだけ
Only when you need it
性能の数字を決めたい
書ける項目はこれで全部です。どれもノーマルタイヤに対する倍率で、書かなかったものは 1 です。
{
"slot": "tire",
"tire": {
"stiffness": 0.85,
"grip": { "paved": 0.88, "dirt": 1.20, "gravel": 1.25, "sand": 1.10, "snow": 1.10 },
"rolling": { "paved": 1.15 }
}
}
grip… その路面でのグリップrolling… その路面での転がり抵抗。大きいほど進みにくいstiffness… 舵を切ってから力が立ち上がるまでの鋭さ。ブロックの大きいタイヤほど小さくする- 路面の名前は
paved(舗装)・dirt(土・草)・gravel(砂利)・sand(砂)・snow(雪)・ice(氷) - 倍率は 0.3〜3.0 に丸めて読む
同梱のタイヤの値と、既定の車での効き目(比べる目安):
| stiffness | grip | rolling | 効き目 | |
|---|---|---|---|---|
| ノーマル | 1 | すべて 1 | すべて 1 | 舗装の横 G 0.93・砂利 0.62・砂 0.48 |
| ダート | 0.85 | 舗装 0.88・土 1.20・砂利 1.25・砂 1.10・雪 1.10 | 舗装 1.15 | 舗装 0.84・砂利 0.77・砂 0.54。砂利の制動 31.9→25.7m |
| オフロード | 0.75 | 舗装 0.80・土 1.15・砂利 1.10・砂 1.35・雪 1.25・氷 1.05 | 舗装 1.40・土 0.85・砂 0.70・雪 0.80 | 舗装 0.77・砂利 0.68・砂 0.68。砂の 0-100 7.15→6.18 秒 |
どの路面でも強いタイヤは作らないでください。得意な路面があれば苦手な路面がある、のがタイヤを選ぶ意味です。
Choose the numbers
These are all the keys. Every number is a ratio to the Normal tyre, and anything left out is 1.
{
"slot": "tire",
"tire": {
"stiffness": 0.85,
"grip": { "paved": 0.88, "dirt": 1.20, "gravel": 1.25, "sand": 1.10, "snow": 1.10 },
"rolling": { "paved": 1.15 }
}
}
grip— grip on that surfacerolling— rolling resistance on that surface. Bigger means harder to keep movingstiffness— how sharply force builds once you steer. Lower it for chunky tread- Surface names:
paved,dirt(dirt and grass),gravel,sand,snow,ice - Ratios are clamped to 0.3–3.0
The shipped tyres, and what they do on the default car, for reference:
| stiffness | grip | rolling | Effect | |
|---|---|---|---|---|
| Normal | 1 | all 1 | all 1 | lateral g 0.93 paved, 0.62 gravel, 0.48 sand |
| Gravel | 0.85 | paved 0.88, dirt 1.20, gravel 1.25, sand 1.10, snow 1.10 | paved 1.15 | 0.84 paved, 0.77 gravel, 0.54 sand. Gravel braking 31.9→25.7 m |
| Mud terrain | 0.75 | paved 0.80, dirt 1.15, gravel 1.10, sand 1.35, snow 1.25, ice 1.05 | paved 1.40, dirt 0.85, sand 0.70, snow 0.80 | 0.77 paved, 0.68 gravel, 0.68 sand. Sand 0–100 7.15→6.18 s |
Please don't make a tyre that wins everywhere. A tyre that is good somewhere should be worse somewhere else; that is what makes the choice matter.
見た目(トレッドの形)も変えたい
- Blender でタイヤだけのメッシュを作る。原点・回転軸・表の向きはホイールと同じ(1 章)。大きさは自由
- OBJ とテクスチャを置く。
assets/mypack/models/entity/my_tire.objとassets/mypack/textures/entity/my_tire.png - 見た目のファイルを置く。
assets/mypack/car_parts/my_tire.json(部品と同じファイル名)。必ず"tire"の中に書く:{ "tire": { "model": "mypack:models/entity/my_tire.obj", "texture": "mypack:textures/entity/my_tire.png" } }
内径と外径はメッシュから測るので、書かなくてかまいません。選んだタイヤは、内径がホイールのリムへ、外径が車のタイヤ半径へ来るように伸び縮みして描かれます。リムの大きいホイールほどサイドウォールが薄くなります。換装画面の「太さ」は、ホイールとタイヤに一緒に効きます。
Change the looks (tread) too
- Model the tyre alone in Blender. Origin, spin axis and outer face are the same as a wheel (chapter 1). Any size will do
- Put the OBJ and texture in your pack:
assets/mypack/models/entity/my_tire.objandassets/mypack/textures/entity/my_tire.png - Add the looks file
assets/mypack/car_parts/my_tire.json(same file name as the part). Always write it inside"tire":{ "tire": { "model": "mypack:models/entity/my_tire.obj", "texture": "mypack:textures/entity/my_tire.png" } }
The inner and outer radii are measured from the mesh, so you need not write them. The picked tyre is stretched so its inner edge sits on the wheel's rim and its outer edge at the car's tyre radius; bigger rims get thinner sidewalls. The parts screen's Width slider acts on the wheel and tyre together.
自分のホイールで、タイヤの嵌まる位置を直したい
タイヤの内径(ビード)を置く半径は、次の順に決まります。
- ホイールの見た目のファイルに
rimRadius(メッシュの寸法・m)が書いてあれば、その値 - 無ければ、ホイールに付けたタイヤ(
Tire)の内径 - それも無ければ、リムのいちばん外側の半径の 95%
位置が合わないときは、ホイールの見た目のファイル assets/mypack/car_parts/my_wheel.json の wheel に rimRadius を書きます:
{
"wheel": {
"model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png",
"designRadius": 0.45,
"rimRadius": 0.33
}
}
Fix where tyres sit on my own wheel
The radius where the tyre's inner edge (bead) sits is chosen in this order:
rimRadiusin the wheel's looks file, if written (mesh units, m)- otherwise, the inner edge of the tyre you modelled on the wheel (
Tire) - otherwise, 95% of the rim's outermost radius
If tyres sit wrong, add rimRadius under wheel in the wheel's looks file assets/mypack/car_parts/my_wheel.json:
{
"wheel": {
"model": "mypack:models/entity/my_wheel.obj",
"texture": "mypack:textures/entity/my_wheel.png",
"designRadius": 0.45,
"rimRadius": 0.33
}
}
決まった車種にだけ付けたい・並ぶ順を変えたい
ホイールと同じく、data/mypack/car_parts/my_tire.json に cars と order を書けます(2 章)。
{
"slot": "tire",
"order": 30,
"cars": ["mypack:kei"],
"tire": { "grip": { "paved": 0.90, "gravel": 1.20 } }
}
Only fit certain cars, or change the order
As with wheels, cars and order go in data/mypack/car_parts/my_tire.json (chapter 2).
{
"slot": "tire",
"order": 30,
"cars": ["mypack:kei"],
"tire": { "grip": { "paved": 0.90, "gravel": 1.20 } }
}
うまくいかないとき
- タブに並ぶが、走りがノーマルと同じ …
"tire": { ... }が書かれていない(ログに出る) - 一部の路面だけ効かない … 路面の名前の綴りが違う。知らない名前はログに出て無視される
- 見た目が KurumaMod 標準のタイヤのまま … 見た目のファイルで
"tire": { ... }の中に書いていない。またはassets/側のファイル名がdata/側と違う - 選んだタイヤと、ホイールに付いていたタイヤが重なる … ホイールのタイヤのオブジェクト名が
tireで始まっていない(1 章) - サイドウォールが厚すぎる・薄すぎる … 上の「タイヤの嵌まる位置を直したい」。それでも合わないときは、タイヤの見た目の
"tire"にinnerRadius/outerRadius(メッシュのタイヤの内径・外径 [m])を書く
When it doesn't work
- Listed, but drives like Normal —
"tire": { ... }is missing (the log says so) - Only some surfaces have no effect — a surface name is misspelt. Unknown names are logged and ignored
- Still looks like KurumaMod's standard tyre — the looks file is not written inside
"tire": { ... }, or theassets/file name differs from thedata/one - The picked tyre and the wheel's own tyre overlap — the wheel's tyre object name does not start with
tire(chapter 1) - Sidewalls too thick or too thin — see "Fix where tyres sit on my own wheel" above. If that is not enough, write
innerRadius/outerRadius(the mesh tyre's inner and outer radius [m]) inside the tyre's"tire"
1ターボとブローオフバルブ
1Turbos and blow-off valves
ターボは加速が変わる部品、ブローオフバルブはアクセルを抜いたときに「プシュッ」と鳴るだけの部品です。どちらもモデルは要りません。
A turbo changes how the car accelerates; a blow-off valve only adds the "pssh" when you lift off. Neither needs a model.
最小のターボを作る
Make a minimal turbo
- ファイル部品のファイルを置く。
data/mypack/car_parts/my_turbo.json:{ "slot": "turbo", "turbo": { "boost": 0.5 } } - lang表示名を lang に書く。
"part.mypack.my_turbo": "マイタービン"
これで、ゲームの G →「パーツ」→「ターボ」のタブに並びます。boost は全開のときにトルクを何割増やすか(0.5 で 1.5 倍)です。
- FileAdd the part file
data/mypack/car_parts/my_turbo.json:{ "slot": "turbo", "turbo": { "boost": 0.5 } } - langAdd the display name to lang.
"part.mypack.my_turbo": "My Turbo"
It now appears under G → "Parts" → the "Turbo" tab. boost is how much extra torque at full boost (0.5 means 1.5×).
最小のブローオフバルブを作る
Make a minimal blow-off valve
- ファイル部品のファイルを置く。
data/mypack/car_parts/my_bov.json:{ "slot": "blowoff" } - lang表示名を lang に書く。
"part.mypack.my_bov": "マイブローオフ"
ターボを付けている車にだけ、「ブローオフ」のタブが出ます。
- FileAdd the part file
data/mypack/car_parts/my_bov.json:{ "slot": "blowoff" } - langAdd the display name to lang.
"part.mypack.my_bov": "My Blow-off"
The "Blow-off" tab only appears on a car with a turbo fitted.
必要なときだけ
Only when you need it
ターボの効き方を変えたい(立ち上がり・ターボラグ)
{
"slot": "turbo",
"turbo": {
"boost": 0.50,
"spool_from": 0.30,
"spool_full": 0.65,
"spool_rate": 2.0
}
}
boost… 全開のときにトルクを何割増やすか(0〜1.5)spool_from/spool_full… 効き始める回転と、いっぱいに効く回転。アイドルを 0、レブリミットを 1 とした割合で書く。大きいタービンほど高い回転へ寄せるspool_rate… 効きが上がる速さ(0.1〜20)。小さいほどターボラグが長い- 書かなかった項目は、純正タービンくらいの値になる
同梱の 2 つ(比べる目安):
boost | spool_from | spool_full | spool_rate | 既定の車の 0-160km/h | |
|---|---|---|---|---|---|
| なし | — | — | — | — | 11.3 秒 |
| 純正タービン | 0.35 | 0.22 | 0.55 | 3.0 | 8.9 秒 |
| ビッグタービン | 0.70 | 0.40 | 0.78 | 1.4 | 8.0 秒 |
Change how the turbo behaves (spool, lag)
{
"slot": "turbo",
"turbo": {
"boost": 0.50,
"spool_from": 0.30,
"spool_full": 0.65,
"spool_rate": 2.0
}
}
boost— extra torque at full boost (0 to 1.5)spool_from/spool_full— where boost starts and where it is full, as a fraction from idle (0) to the rev limit (1). Bigger turbos sit higherspool_rate— how fast boost builds (0.1 to 20). Smaller means more lag- Anything you leave out takes roughly stock-turbo values
The two bundled turbos, for reference:
boost | spool_from | spool_full | spool_rate | Default car 0-160 km/h | |
|---|---|---|---|---|---|
| None | — | — | — | — | 11.3 s |
| Stock turbo | 0.35 | 0.22 | 0.55 | 3.0 | 8.9 s |
| Big turbo | 0.70 | 0.40 | 0.78 | 1.4 | 8.0 s |
決まった車種にだけ付けたい
cars に車種の id を並べます(ディーゼル車専用のタービン、など)。書かなければ、どの車種にも付けられます。
{
"slot": "turbo",
"cars": ["mypack:prado"],
"turbo": { "boost": 0.4 }
}
Only fit certain cars
List car ids in cars (a turbo only for a diesel, say). Leave it out and every car can fit it.
{
"slot": "turbo",
"cars": ["mypack:prado"],
"turbo": { "boost": 0.4 }
}
ブローオフの音を変えたい
音は部品ではなく車の側で変えます。車の vehicles/<車>.json の sounds に "blowoff" を書きます(車の 7 章)。
Change the blow-off sound
The sound belongs to the car, not the part: set "blowoff" in sounds in the car's vehicles/<car>.json (chapter 7 of the Car guide).
うまくいかないとき
- 「ブローオフ」のタブが出ない … ターボが付いていない。先にターボを付ける
- ログに「ターボの部品に turbo が書かれていません」と出る …
"turbo": { ... }を書く(書かないと純正タービンくらいの値になる) - 見た目が変わらない … ターボとブローオフは、いまは見た目を持たない(換装画面の絵とメーターの TURBO ランプだけ)
When it doesn't work
- No "Blow-off" tab — no turbo is fitted. Fit a turbo first
- The log says the turbo part has no turbo — add
"turbo": { ... }(without it you get roughly stock-turbo values) - Nothing changes on the car's body — turbos and blow-off valves have no looks yet (only the parts-screen icon and the TURBO lamp on the gauges)
2外装パーツ
2Body parts
ウイング・バンパー・フェンダーなど、車体に固定される部品です。
Wings, bumpers, fenders — parts fixed to the body.
最小のパーツを作る
Make a minimal part
- Blender車体の .blend の中に、部品を別のオブジェクトとして作る。名前は
part_<場所>-<部品名>(例part_rear_wing-gt_wing)。場所は下の表から選ぶ - Blender付け替え候補の部品を全部表示にして、車体と一緒に 1 つの OBJ に書き出す。
- ファイル部品のファイルを置く。
data/mypack/car_parts/gt_wing.json(ファイル名が部品名):{ "slot": "rear_wing" } - lang表示名を lang に書く。
"part.mypack.gt_wing": "GT ウイング"
これで、ゲームの G →「パーツ」に、その場所のタブと部品が並びます。
- BlenderModel the part as a separate object inside the car's .blend. Name it
part_<slot>-<part>(e.g.part_rear_wing-gt_wing); pick the slot from the table below - BlenderUnhide every selectable part and export them together with the body, as one OBJ.
- FileAdd the part file
data/mypack/car_parts/gt_wing.json(the file name is the part name):{ "slot": "rear_wing" } - langAdd the display name to lang.
"part.mypack.gt_wing": "GT Wing"
The slot's tab and the part now appear under G → "Parts" in game.
part_rear_wing-…)が車体と同じモデルの中に重なって入っています。アウトライナーで全部を表示(目のアイコンが開いた状態)にしたまま書き出します。ゲームでは付けている 1 つだけが描かれますpart_rear_wing-…) overlap inside the same model as the body. Export with all of them visible in the outliner (eye icon open); in game only the fitted one is drawn.付ける場所(slot)
Slots (slot)
slot | 入るもの |
|---|---|
front_bumper | フロントバンパー、リップ、スプリッター、カナード |
side_skirt | サイドスカート |
fender | オーバーフェンダー |
rear_wing | スポイラー、ウイング、ダックテール |
rear_diffuser | リアバンパー、ディフューザー |
exhaust | マフラー(3 章) |
slot | What goes there |
|---|---|
front_bumper | Front bumper, lip, splitter, canards |
side_skirt | Side skirts |
fender | Over-fenders |
rear_wing | Spoiler, wing, duck tail |
rear_diffuser | Rear bumper, diffuser |
exhaust | Exhaust (chapter 3) |
その車にオブジェクトのある部品も初期装備も無い場所は、タブが出ません。
A slot's tab only appears if the car has an object for one of its parts, or a default part.
必要なときだけ
Only when you need it
走りを変えたい(ダウンフォース aero)
効きを調整しない部品(ダックテールなど)は、数字 1 つで書きます。data/mypack/car_parts/ducktail.json:
{
"slot": "rear_wing",
"aero": { "rear": 0.25 }
}
換装画面の「角度」で効きを調整できる部品(GT ウイングなど)は、[最小, 最大] で書きます。前にも効かせたいときは front も書きます。data/mypack/car_parts/gt_wing.json:
{
"slot": "rear_wing",
"aero": {
"rear": [0.6, 1.6],
"front": 0.1,
"angle": 0.4
}
}
front/rear… 前と後ろを、どれだけ押し付けるか。大きいほど強い(0〜3)。1 で 200km/h のとき約 190kg- 目安: ウイング付きの市販車で前後合わせて 0.3〜0.6、GT 系のレーシングカーで 2〜3
angle… 「角度」のスライダーの最初の位置(0〜1、省略で 0.5)。角度で変わるのは走りだけで、見た目は動かない- 強くするほど高速コーナーは速くなるが、最高速は落ちる。空気抵抗は自動で決まるので、書く項目はない
- 前を強くすると曲がりやすく(オーバー)、後ろを強くすると安定する(アンダー)
換装画面の右には、その部品のダウンフォースと、付けたときの配分・グリップ・最高速の目安が出ます。
Change how it drives (downforce, aero)
A part whose effect is fixed (a duck tail, say) takes a single number. data/mypack/car_parts/ducktail.json:
{
"slot": "rear_wing",
"aero": { "rear": 0.25 }
}
A part whose effect players can adjust with the parts screen's "Angle" slider (a GT wing, say) takes [min, max]. Add front if it should press the front too. data/mypack/car_parts/gt_wing.json:
{
"slot": "rear_wing",
"aero": {
"rear": [0.6, 1.6],
"front": 0.1,
"angle": 0.4
}
}
front/rear— how hard it presses the front and rear down. Bigger is stronger (0 to 3). 1 is about 190 kg at 200 km/h- Guide: 0.3–0.6 in total for a road car with a wing, 2–3 for a GT race car
angle— where the "Angle" slider starts (0–1, default 0.5). The angle changes driving only; the object does not move- More downforce makes fast corners quicker but lowers top speed. Drag follows automatically, so there is nothing to write for it
- More at the front turns in harder (oversteer); more at the rear is more stable (understeer)
The parts screen shows the part's downforce and how balance, grip and estimated top speed change.
オブジェクトに別の名前を付けたい・1 つの部品で複数のオブジェクトを出したい
名前は part_<部品名>(例 part_gt_wing)でも通ります。どちらの決まりにも合わない名前にしたいときは、車の vehicles/<車>.json に対応を書きます。
"parts": {
"mypack:twin_muffler": { "show": ["part_exhaust-twin", "part_exhaust-twin_tip"] }
}
show に書けるのは part_ で始まる名前だけです。
Free object names, or several objects for one part
part_<part> (e.g. part_gt_wing) works too. For any other name, map it in the car's vehicles/<car>.json:
"parts": {
"mypack:twin_muffler": { "show": ["part_exhaust-twin", "part_exhaust-twin_tip"] }
}
Only names starting with part_ are allowed in show.
最初から付いている部品にしたい(初期装備)
車の諸元 data/mypack/cars/<車>.json の、values と同じいちばん外側に書きます。
{
"values": { "mass": 1250 },
"default_parts": {
"rear_wing": "mypack:s15_spoiler",
"exhaust": { "part": "mypack:stock_muffler", "removable": false }
}
}
- 換装画面の「純正」が初期装備になる。外せる初期装備のある場所には「なし」も並ぶ
"removable": falseなら外せない。外すと穴だけ残る部品に使う- 置いてある車にも効く。パックで初期装備を変えれば、すでに置いた車も変わる
Have it fitted from the start (default parts)
Put them in the car's spec, data/mypack/cars/<car>.json, at the top level next to values:
{
"values": { "mass": 1250 },
"default_parts": {
"rear_wing": "mypack:s15_spoiler",
"exhaust": { "part": "mypack:stock_muffler", "removable": false }
}
}
- "Stock" in the parts screen becomes the default part. Slots with a removable default also get "None"
"removable": falsemeans it cannot come off. Use it for parts that would leave a hole- It reaches cars already placed: change the default in the pack and existing cars follow
仕組みを知りたい(なぜ全部を 1 つの OBJ に入れるのか)
ゲームは、車体の OBJ の中に入っている部品のオブジェクトを、表示・非表示で切り替えているだけです。付けている部品のオブジェクトだけを描き、残りは描きません。そのため:
- OBJ に入っていない部品は出せない。部品だけを別のファイルにして、あとから足すことはできない
- 非表示のまま書き出したオブジェクトは OBJ に入らないので、出せない
- 部品を 1 つ増やしたら、車体の OBJ を書き出し直す
- ほかの人の車には、部品パックだけでは外装パーツを足せない
うまくいかないとき
- 非表示のまま書き出さない。「選択物のみ」で書き出すと、非表示のオブジェクトは選べないので抜け落ちる
- 純正の部品も別のオブジェクトにする。
bodyに一体で残した部分は、付け替えても消えない - 部品の中の面に
light_tailなどのマテリアルを割り当てると、部品と一緒に光る(車の 3 章) carsで付けられる車種を絞れる。表示名はpart.<パック>.<部品名>
How it works (why everything goes into one OBJ)
The game only shows or hides part objects that are already inside the car's OBJ. It draws the objects of the fitted parts and skips the rest. So:
- A part that is not in the OBJ cannot appear. You cannot ship a part as a separate file and add it later
- An object exported while hidden is not in the OBJ, so it cannot appear either
- Adding a part means exporting the car's OBJ again
- A parts-only pack cannot add body parts to someone else's car
When it doesn't work
- Don't export with objects hidden. With "Selected Only", hidden objects cannot be selected and drop out
- Make stock pieces separate objects too. Anything left merged into
bodystays, whatever is fitted - Faces inside a part with a
light_tailmaterial light up with the part (chapter 3 of the Car guide) carslimits which cars can fit it. The display name ispart.<pack>.<part>
3マフラー
3Exhausts
見た目と排気音を変える部品です。走りは変わりません。
A part that changes the look and the exhaust note. Driving does not change.
最小のマフラーを作る
Make a minimal exhaust
- Blender車体の .blend の中に、マフラーを別のオブジェクトとして作る。名前は
part_exhaust-<部品名>(例part_exhaust-titanium) - Blender付け替え候補のマフラーを全部表示にして、車体と一緒に 1 つの OBJ に書き出す。
- ファイル部品のファイルを置く。
data/mypack/car_parts/titanium.json:{ "slot": "exhaust" } - lang表示名を lang に書く。
"part.mypack.titanium": "チタンマフラー"
これで、ゲームの G →「パーツ」→「マフラー」のタブに並びます。このままでは音はその車のままです。
- BlenderModel the exhaust as a separate object inside the car's .blend. Name it
part_exhaust-<part>(e.g.part_exhaust-titanium) - BlenderUnhide every selectable exhaust and export them together with the body, as one OBJ.
- FileAdd the part file
data/mypack/car_parts/titanium.json:{ "slot": "exhaust" } - langAdd the display name to lang.
"part.mypack.titanium": "Titanium exhaust"
It now appears under G → "Parts" → the "Exhaust" tab. The sound is still the car's own.
必要なときだけ
Only when you need it
音を低く・大きくしたい
見た目の JSON を置きます。assets/mypack/car_parts/titanium.json(素性と同じファイル名):
{
"exhaust": {
"pitch": [0.85, 1.00],
"volume": 1.2,
"tone": 0.3
}
}
pitch… 音の高さの倍率。1 未満で低くなる。[最小, 最大]で書くと、換装画面の「音の低さ」でその範囲を動かせるvolume… 音量の倍率(0〜2)tone… 「音の低さ」の最初の位置(0 でいちばん高い、1 でいちばん低い。省略で 0)- 下げるのは 0.78 くらいまでよく効く。上げるのはほとんど効かない(甲高くしたいなら、次の「音源ごと差し替えたい」)
Make it deeper or louder
Add a looks JSON, assets/mypack/car_parts/titanium.json (same file name as the definition):
{
"exhaust": {
"pitch": [0.85, 1.00],
"volume": 1.2,
"tone": 0.3
}
}
pitch— pitch multiplier; below 1 is deeper. Written as[min, max], the parts screen's "Deepness" slider moves within itvolume— volume multiplier (0 to 2)tone— where the "Deepness" slider starts (0 = highest, 1 = lowest; default 0)- Going down works well to about 0.78. Going up barely works (for a high-pitched exhaust, see "Use your own sound" below)
音源ごと差し替えたい
- 音源を置く(OGG・モノラル、継ぎ目なくループするもの)。
assets/mypack/sounds/titanium_exhaust.ogg - パックの
assets/mypack/sounds.jsonにサウンドイベントを書く:{ "titanium_exhaust": { "sounds": [{ "name": "mypack:titanium_exhaust" }], "attenuation_distance": 64 } } - 見た目の JSON の
exhaustで指す:{ "exhaust": { "sound": "mypack:titanium_exhaust" } }
高回転まで音程を伸ばしたいときは、1 オクターブ上の音源も作って "sound_high" で指します。sound_tools/make_octave_up.py で作れます。音源の作り方の詳しいことは車の 7 章と同じです。
Use your own sound
- Add the sound (OGG, mono, a seamless loop):
assets/mypack/sounds/titanium_exhaust.ogg - Declare a sound event in your pack's
assets/mypack/sounds.json:{ "titanium_exhaust": { "sounds": [{ "name": "mypack:titanium_exhaust" }], "attenuation_distance": 64 } } - Point to it from
exhaustin the looks JSON:{ "exhaust": { "sound": "mypack:titanium_exhaust" } }
To keep the pitch rising at high revs, also make a one-octave-up copy and point "sound_high" at it; sound_tools/make_octave_up.py makes one. More on making sounds in chapter 7 of the Car guide.
純正のマフラーも付け替えられるようにしたい
純正のマフラーも別のオブジェクト(例 part_exhaust-stock)にして部品を作り、車の諸元 data/mypack/cars/<車>.json のいちばん外側で初期装備にします。外すと穴だけ残るなら、外せないようにします:
{
"values": { ... },
"default_parts": {
"exhaust": { "part": "mypack:stock", "removable": false }
}
}
初期装備の詳しいことは2 章の「最初から付いている部品にしたい」にあります。
Make the stock exhaust swappable too
Make the stock exhaust a separate object too (e.g. part_exhaust-stock), give it a part, and make it a default part at the top level of the car's spec data/mypack/cars/<car>.json. If removing it would leave just a hole, make it non-removable:
{
"values": { ... },
"default_parts": {
"exhaust": { "part": "mypack:stock", "removable": false }
}
}
More on default parts in chapter 2, "Have it fitted from the start".
うまくいかないとき
- 「マフラー」のタブが出ない … OBJ にそのオブジェクトが入っていない。非表示のまま書き出していないか見る
- 差し替えた音が鳴らず、いつもの音のまま …
soundの名前がsounds.jsonに無い。ログに警告が 1 行出ている pitchを 1 より大きくしても高くならない … Minecraft の音程の上限に当たっている。高い音源をsoundで差し替える
When it doesn't work
- No "Exhaust" tab — the object is not in the OBJ. Check it was not hidden when you exported
- Your sound does not play; it is the usual one — the
soundname is missing fromsounds.json. A warning is in the log pitchabove 1 does not raise it — Minecraft's pitch ceiling. Replace the source with a higher one viasound
付録 A. 座標系
Appendix A. Axes
Blender・OBJ ファイル・ゲームで軸の意味が変わりますが、読み替えは MOD 側が済ませています。Blender 標準の向きで作り、エクスポート設定も標準のままにしておけば、この表を意識する必要はありません。
The axes mean different things in Blender, in the OBJ file and in game, but the mod already does the conversion. Model in Blender's default orientation, leave the export settings alone, and you never need this table.
| 前 | 上 | 車体の左 | |
|---|---|---|---|
| Blender(作業中) | −Y | +Z | +X |
| OBJ ファイルの中 | +Z | +Y | +X |
ゲーム内(JSON の offset など) | −Z | +Y | −X |
| Front | Up | Car's left | |
|---|---|---|---|
| Blender (while modelling) | −Y | +Z | +X |
| Inside the OBJ file | +Z | +Y | +X |
In game (JSON offset etc.) | −Z | +Y | −X |
vehicles/*.json の offset と seat はゲーム内の向き(+X 右・+Y 上・−Z 前)で書きます。Blender の向きとは前後・左右が逆なので注意してください。
offset and seat in vehicles/*.json use the in-game axes (+X right, +Y up, −Z forward). Note that both the front–back and left–right senses are reversed from Blender's.
UV も上下が逆(OBJ は下が 0・Minecraft は上が 0)ですが、こちらも読み込み時に反転しているので Blender 側で気にする必要はありません。
UVs are flipped vertically too (0 is the bottom in OBJ, the top in Minecraft), but that is also handled on load, so there is nothing to do in Blender.
付録 B. 用語
Appendix B. Glossary
| ホイールベース | 前輪と後輪の距離。既定は 3.12m |
|---|---|
| トレッド | 左右輪の距離。既定は 1.80m |
| シャシー基準面 | ゲーム内で車の「位置」として扱われる高さ。既定は地面から 0.602m。車体はここから designRideHeight だけ下げて描かれます |
| フェンダー/タイヤハウス | タイヤの上を覆っている部分。ここをゲージのタイヤに合わせます |
| キャンバー角 | タイヤの傾き。負で「上が内側」。この MOD では見た目だけで、グリップには効きません |
| n-gon | 5 角形以上の面。凹んでいても MOD が読み込み時に正しく割るので、そのまま書き出してよい |
| UV 展開 | 3D のメッシュに 2D の絵をどう貼るかの対応付け。しなくても走ります |
| マテリアル | Blender 上の材質設定。この MOD が読むのは色(Base Color)と透明度(Alpha)だけです |
| MTL | OBJ と一緒に出るマテリアルのファイル。色とガラスの濃さを運びます |
| 名前空間 | mypack:models/entity/ae86.obj の mypack の部分。どのパックのファイルかを指します |
| Wheelbase | Distance from the front axle to the rear. 3.12 m by default |
|---|---|
| Track | Distance between the left and right wheels. 1.80 m by default |
| Chassis plane | The height the game treats as the car's position — 0.602 m above the ground by default. The body is drawn designRideHeight below it |
| Wheel arch | The bodywork over the tyre. Line it up with the gauge wheels |
| Camber | How far the wheel leans. Negative tips the top inward. Cosmetic only in this mod; it does not affect grip |
| n-gon | A face with five or more vertices. The mod splits them correctly on load, concave or not, so export them as they are |
| UV unwrap | The mapping that decides how a 2D image sits on a 3D mesh. Optional — the car drives without it |
| Material | Blender's surface settings. This mod reads only the Base Color and the Alpha |
| MTL | The material file written next to the OBJ. It carries the colours and the glass opacity |
| Namespace | The mypack part of mypack:models/entity/ae86.obj — which pack the file comes from |
付録 A. 諸元の全項目(data/<pack>/cars/<car>.json)
Appendix A. Every spec key (data/<pack>/cars/<car>.json)
これで全部(57 項目)。書き方は 8 章。範囲は調整画面のスライダーの範囲と同じです。外れた値は、上に外れれば上限、下に外れれば下限へ丸めて読み込み、ログに 範囲(… 〜 …)の外なので … に丸めました と残します。
That is all of them (57 keys). How to write them is in chapter 8. The ranges are the same as the tuning screen's sliders. A value above the range is loaded as the maximum and one below as the minimum, and the log records 範囲(… 〜 …)の外なので … に丸めました ("outside the range, clamped to …").
サスペンション
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
stroke | ストローク | m | 0.3 | 0.15 – 0.8 |
front_anti_roll | フロント スタビライザー | N/m | 2500 | 0 – 20000 |
rear_anti_roll | リア スタビライザー | N/m | 1500 | 0 – 20000 |
front_roll_center | フロント ロールセンター | 重心高に対する割合 | 0.4 | 0 – 0.8 |
rear_roll_center | リア ロールセンター | 重心高に対する割合 | 0.4 | 0 – 0.8 |
足を硬くしたいときは stroke を短くします。沈み込みがストロークの 39.2% で固定なので、短いほどバネが硬くなり、ダンパーの係数もそれに合わせて上がります。
ダンパー
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
front_bump_damping | フロント 縮み側減衰 | 減衰比 | 0.45 | 0.1 – 1.5 |
front_rebound_damping | フロント 伸び側減衰 | 減衰比 | 0.45 | 0.1 – 1.5 |
rear_bump_damping | リア 縮み側減衰 | 減衰比 | 0.45 | 0.1 – 1.5 |
rear_rebound_damping | リア 伸び側減衰 | 減衰比 | 0.45 | 0.1 – 1.5 |
N·s/m ではなく減衰比(臨界減衰に対する割合)で書きます。係数はその輪のバネと荷重から KurumaMod が計算するので、stroke や mass を変えても効き方は変わりません。1 で揺り返しがちょうど出なくなる硬さ。実車は伸び側を縮み側の 1.5〜3 倍にすることが多く、そうすると段差を柔らかくいなしつつ揺れがすぐ収まります。
ステアリング ジオメトリ
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
ackermann | アッカーマン率 | 割合(1 で幾何どおり) | 0.5 | −0.5 – 1.2 |
front_toe | フロント トー | rad(正でイン) | 0 | −0.00873 – 0.00873 |
rear_toe | リア トー | rad(正でイン) | 0 | −0.00873 – 0.00873 |
front_roll_steer | フロント ロールステア | rad/rad(正でアンダー) | 0.05 | −0.2 – 0.3 |
rear_roll_steer | リア ロールステア | rad/rad(正でアンダー) | 0.08 | −0.2 – 0.3 |
front_compliance_steer | フロント コンプライアンスステア | rad/G(正でアンダー) | 0.00873(=0.5°/G) | −0.00873 – 0.0262 |
rear_compliance_steer | リア コンプライアンスステア | rad/G(正でアンダー) | 0.00349(=0.2°/G) | −0.00873 – 0.0262 |
タイヤ
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
friction | グリップ | μ | 1 | 0.3 – 1.5 |
tire_falloff | 滑ったときのグリップ低下 | 割合 | 0 | 0 – 0.5 |
tire_load_sensitivity | タイヤの荷重感度 | — | 0.15 | 0 – 0.4 |
cornering_stiffness | 横すべり剛性 | — | 12 | 4 – 25 |
longitudinal_stiffness | 縦すべり剛性 | — | 18 | 5 – 40 |
wheel_radius | タイヤ半径 | m | 0.45 | 0.25 – 1.1 |
friction に書くのは実際の摩擦係数(μ)です。調整画面は既定を 1.00 とした相対値で出しています(いまは基準が 1.0 なので同じ数字)。
車体
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
mass | 車重 | kg | 1200 | 500 – 2500 |
weight_distribution | 前後の荷重配分 | 前軸の割合 | 0.56 | 0.35 – 0.7 |
wheel_base | ホイールベース | m | 3.12 | 2 – 7 |
track_width | トレッド | m | 2 | 1.2 – 4 |
エンジン
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
peak_torque | 最大トルク | N·m | 350 | 60 – 700 |
peak_torque_rpm | 最大トルク回転数 | rpm | 4200 | 1500 – 8000 |
peak_power_rpm | 最高出力回転数 | rpm | 最大トルク回転数の 1.59 倍(6676.4) | 2500 – 12000 |
idle_rpm | アイドル回転数 | rpm | 800 | 500 – 2000 |
redline_rpm | レブリミット | rpm | 7000 | 4000 – 12000 |
engine_brake | エンジンブレーキ | N·m | 35 | 0 – 120 |
engine_inertia | エンジンの慣性 | kg·m² | 0.25 | 0.05 – 1 |
変速機
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
gear_count | 前進の段数 | 段 | 5 | 3 – 8 |
first_gear | 1速のギア比 | — | 4.2 | 1.5 – 5 |
top_gear | 最高段のギア比 | — | 0.85 | 0.4 – 1.5 |
drivetrain_efficiency | 駆動系の伝達効率 | — | 0.9 | 0.7 – 1 |
shift_time | 変速にかかる時間 | 秒 | 0.35 | 0 – 1.5 |
manual_transmission | 変速 | 0 = AT・1 = MT | 0 | 0 – 1 |
駆動系・デフ
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
drive_layout | 駆動方式 | 0 = FF・1 = FR・2 = 4WD | 2 | 0 – 2 |
torque_split | 前後トルク配分 | 後輪の割合(4WD のみ) | 0.5 | 0.1 – 0.9 |
diff_preload | デフ イニシャルトルク | N·m | 0 | 0 – 300 |
diff_lock_ratio | デフ 差動制限率 | — | 0 | 0 – 1 |
diff_coast_ratio | デフ 戻し側の効き | — | 0.5 | 0 – 1 |
center_diff_lock | センターデフ 締結の強さ | — | 0 | 0 – 1 |
diff_lock_ratio と diff_preload がどちらも 0 ならオープンデフ。diff_coast_ratio は 0 で 1way、0.5 で 1.5way、1 で 2way。
torque_split と center_diff_lock は 4WD(drive_layout が 2)のときだけ効きます。torque_split は前後へ配る駆動力の割合で、後ろへ寄せるほど踏んだときに尻が出やすくなります(FR 寄り)。center_diff_lock が 0 ならオープンで配分どおり、上げると前後の回転差を揃えにいき、空転しかけた軸から掴んでいる軸へトルクが移ります(1 で直結)。締めるほど配分の意味は薄れ、低速で小さく回ったときに止まろうとします(タイトコーナーブレーキング)。サイドブレーキを引いている間は自動で切れます。古い drive_bias(0 = FF・1 = FR・間は 4WD の配分)も読めます。
ブレーキ・走行抵抗
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
abs | ABS | 強さ(0 で無効) | 0.7 | 0 – 1 |
rolling_resistance | 転がり抵抗 | — | 0.15 | 0 – 1 |
最高速の項目はありません。実際の最高速はトルクと抵抗から決まり、最高段でレブまで回した速度より速くは走れません。
空力
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
drag_area | 空気抵抗(CdA) | m²(Cd×前面投影面積) | 0.78 | 0.2 – 5 |
front_downforce | ダウンフォース(前) | m²(−Cl×面積) | 0 | 0 – 3 |
rear_downforce | ダウンフォース(後) | m²(−Cl×面積) | 0 | 0 – 3 |
空気抵抗は力として掛かるので、同じ値でも重い車ほど減速しにくくなります。目安はスポーツカー 0.5、乗用車 0.7、SUV 1.0。以前の drag(減速度の係数)を書いたパックは、その車の車重で自動的に換算され、走りは変わりません。
ダウンフォースは前軸・後軸の位置で車体を下へ押し、速度の 2 乗で増えます。前を強くするとオーバー、後ろを強くするとアンダー。押し付けるぶん空気抵抗も増える(ダウンフォースの 1/6 が CdA に足される)ので、付けるほど最高速は落ちます。目安はウイング付きの市販車で前後合わせて 0.3〜0.6、GT 系のレーシングカーで 2〜3。
操作と補助
| 名前 | 調整画面での名前 | 単位 | 既定 | 範囲 |
|---|---|---|---|---|
max_steer | 最大切れ角 | rad | 0.6109(=35°) | 0.1745 – 1.1345 |
steer_grip_margin | 切れ角の余裕(大で滑らせやすい) | — | 1 | 0.8 – 8 |
visual_slip_limit | 見た目のタイヤ角 | rad(0 で無効) | 0.7854(=45°) | 0 – 1.5708 |
steer_rate | 舵が入るまでの時間 | 秒 | 0.18 | 0 – 1 |
steer_return | 舵が中立へ戻る時間 | 秒 | 0.11 | 0 – 1 |
self_aligning | 舵の自己復元 | —(0 で中立へ戻る) | 0 | 0 – 1 |
pedal_press | ペダルを踏みきる時間 | 秒 | 0.25 | 0 – 1 |
pedal_release | ペダルを戻しきる時間 | 秒 | 0.12 | 0 – 1 |
handbrake_press | サイドブレーキが効ききる時間 | 秒 | 0 | 0 – 1 |
traction_control | トラクションコントロール | 強さ(0 で無効) | 1 | 0 – 1 |
Suspension
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
stroke | Travel | m | 0.3 | 0.15 – 0.8 |
front_anti_roll | Front anti-roll bar | N/m | 2500 | 0 – 20000 |
rear_anti_roll | Rear anti-roll bar | N/m | 1500 | 0 – 20000 |
front_roll_center | Front roll centre | fraction of CG height | 0.4 | 0 – 0.8 |
rear_roll_center | Rear roll centre | fraction of CG height | 0.4 | 0 – 0.8 |
To stiffen the suspension, shorten stroke. Static sag is fixed at 39.2% of the stroke, so a shorter stroke means stiffer springs, and the damper coefficients rise with them.
Dampers
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
front_bump_damping | Front bump damping | damping ratio | 0.45 | 0.1 – 1.5 |
front_rebound_damping | Front rebound damping | damping ratio | 0.45 | 0.1 – 1.5 |
rear_bump_damping | Rear bump damping | damping ratio | 0.45 | 0.1 – 1.5 |
rear_rebound_damping | Rear rebound damping | damping ratio | 0.45 | 0.1 – 1.5 |
Write a damping ratio (a fraction of critical damping), not N·s/m. KurumaMod works out the coefficient from that wheel's spring and load, so changing stroke or mass keeps the feel the same. At 1 the car just stops bouncing back. Real cars often run rebound at 1.5–3 times bump, which soaks up bumps softly but settles quickly.
Steering geometry
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
ackermann | Ackermann | fraction (1 = true Ackermann) | 0.5 | −0.5 – 1.2 |
front_toe | Front toe | rad (positive = toe-in) | 0 | −0.00873 – 0.00873 |
rear_toe | Rear toe | rad (positive = toe-in) | 0 | −0.00873 – 0.00873 |
front_roll_steer | Front roll steer | rad/rad (positive = understeer) | 0.05 | −0.2 – 0.3 |
rear_roll_steer | Rear roll steer | rad/rad (positive = understeer) | 0.08 | −0.2 – 0.3 |
front_compliance_steer | Front compliance steer | rad/G (positive = understeer) | 0.00873 (= 0.5°/G) | −0.00873 – 0.0262 |
rear_compliance_steer | Rear compliance steer | rad/G (positive = understeer) | 0.00349 (= 0.2°/G) | −0.00873 – 0.0262 |
Tires
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
friction | Grip | μ | 1 | 0.3 – 1.5 |
tire_falloff | Grip loss when sliding | fraction | 0 | 0 – 0.5 |
tire_load_sensitivity | Tyre load sensitivity | — | 0.15 | 0 – 0.4 |
cornering_stiffness | Lateral slip stiffness | — | 12 | 4 – 25 |
longitudinal_stiffness | Longitudinal slip stiffness | — | 18 | 5 – 40 |
wheel_radius | Tyre radius | m | 0.45 | 0.25 – 1.1 |
friction is the actual coefficient of friction (μ). The tuning screen shows it relative to the default (the reference is 1.0 for now, so the numbers match).
Chassis
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
mass | Mass | kg | 1200 | 500 – 2500 |
weight_distribution | Weight distribution | fraction on the front axle | 0.56 | 0.35 – 0.7 |
wheel_base | Wheelbase | m | 3.12 | 2 – 7 |
track_width | Track width | m | 2 | 1.2 – 4 |
Engine
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
peak_torque | Peak torque | N·m | 350 | 60 – 700 |
peak_torque_rpm | Peak torque rpm | rpm | 4200 | 1500 – 8000 |
peak_power_rpm | Peak power rpm | rpm | 1.59 × peak torque rpm (6676.4) | 2500 – 12000 |
idle_rpm | Idle rpm | rpm | 800 | 500 – 2000 |
redline_rpm | Redline | rpm | 7000 | 4000 – 12000 |
engine_brake | Engine braking | N·m | 35 | 0 – 120 |
engine_inertia | Engine inertia | kg·m² | 0.25 | 0.05 – 1 |
Gearbox
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
gear_count | Forward gears | gears | 5 | 3 – 8 |
first_gear | 1st gear ratio | — | 4.2 | 1.5 – 5 |
top_gear | Top gear ratio | — | 0.85 | 0.4 – 1.5 |
drivetrain_efficiency | Drivetrain efficiency | — | 0.9 | 0.7 – 1 |
shift_time | Shift time | s | 0.35 | 0 – 1.5 |
manual_transmission | Transmission | 0 = AT, 1 = MT | 0 | 0 – 1 |
Driveline & Differential
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
drive_layout | Drive layout | 0 = FWD, 1 = RWD, 2 = AWD | 2 | 0 – 2 |
torque_split | Front/rear torque split | rear share (AWD only) | 0.5 | 0.1 – 0.9 |
diff_preload | Diff preload | N·m | 0 | 0 – 300 |
diff_lock_ratio | Diff lock ratio | — | 0 | 0 – 1 |
diff_coast_ratio | Diff coast ratio | — | 0.5 | 0 – 1 |
center_diff_lock | Centre diff lock | — | 0 | 0 – 1 |
With diff_lock_ratio and diff_preload both at 0 it is an open diff. diff_coast_ratio is 1-way at 0, 1.5-way at 0.5, 2-way at 1.
torque_split and center_diff_lock only apply to AWD (drive_layout 2). torque_split is the share of drive sent to each axle; the more goes to the rear, the more the tail steps out on the throttle (RWD-like). With center_diff_lock at 0 the centre is open and the split holds exactly; raising it pulls the front and rear speeds together and moves torque from an axle that starts to spin to the one that still grips (1 is fully locked). The tighter it is, the less the split matters, and the car resists tight turns at low speed (tight-corner braking). It opens automatically while the handbrake is pulled. The old drive_bias (0 = FWD, 1 = RWD, anything between = AWD split) is still read.
Brakes & Resistance
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
abs | ABS | strength (0 = off) | 0.7 | 0 – 1 |
rolling_resistance | Rolling resistance | — | 0.15 | 0 – 1 |
There is no top-speed field. The real top speed comes out of torque versus resistance, and the car can never go faster than top gear at the redline.
Aerodynamics
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
drag_area | Drag area (CdA) | m² (Cd × frontal area) | 0.78 | 0.2 – 5 |
front_downforce | Front downforce | m² (−Cl × area) | 0 | 0 – 3 |
rear_downforce | Rear downforce | m² (−Cl × area) | 0 | 0 – 3 |
Drag is applied as a force, so the same value slows a heavier car less. Rough guide: sports car 0.5, saloon 0.7, SUV 1.0. Packs that still write the old drag (a deceleration coefficient) are converted using that car's mass, so they drive exactly as before.
Downforce pushes the body down at the front and rear axles and grows with the square of speed. More at the front gives oversteer, more at the rear gives understeer. It costs drag too (one sixth of the downforce is added to CdA), so the more you add, the lower the top speed. Rough guide: 0.3–0.6 in total for a road car with a wing, 2–3 for a GT-class race car.
Controls & Aids
| Name | On the tuning screen | Unit | Default | Range |
|---|---|---|---|---|
max_steer | Max steering angle | rad | 0.6109 (= 35°) | 0.1745 – 1.1345 |
steer_grip_margin | Steering margin (higher = slides more) | — | 1 | 0.8 – 8 |
visual_slip_limit | Visual wheel angle | rad (0 = off) | 0.7854 (= 45°) | 0 – 1.5708 |
steer_rate | Steering lock-to-lock time | s | 0.18 | 0 – 1 |
steer_return | Steering return time | s | 0.11 | 0 – 1 |
self_aligning | Self-aligning torque | — (0 = returns to centre) | 0 | 0 – 1 |
pedal_press | Pedal press time | s | 0.25 | 0 – 1 |
pedal_release | Pedal release time | s | 0.12 | 0 – 1 |
handbrake_press | Handbrake press time | s | 0 | 0 – 1 |
traction_control | Traction control | strength (0 = off) | 1 | 0 – 1 |
付録 B. 書いても読まれない値
Appendix B. Values ignored even if you write them
他の諸元から決まる値は、書いても黙って捨てられます。KurumaMod が計算します。
Values that follow from other values are silently dropped. KurumaMod computes them.
| 決まるもの | 何から |
|---|---|
| バネ・バンプストップ・ダンパーの係数(減衰比は付録 A) | mass / weight_distribution / stroke |
| 重心高 | 停車時の車高 |
| 慣性モーメント 3 つ | mass と wheel_base / track_width |
| 車輪の慣性・登坂できる段差・終減速比 | wheel_radius |
| 制動配分 | weight_distribution と重心高とホイールベース |
| ブレーキとサイドブレーキの効き | friction |
| 変速点・バックの最高速 | redline_rpm とギア比 |
| Derived | From |
|---|---|
| Springs, bump stops, damper coefficients (the ratios are in Appendix A) | mass / weight_distribution / stroke |
| Centre of gravity height | Static ride height |
| All three moments of inertia | mass with wheel_base / track_width |
| Wheel inertia, climbable step, final drive | wheel_radius |
| Brake bias | weight_distribution, CG height and wheelbase |
| Brake and handbrake authority | friction |
| Shift points, reverse top speed | redline_rpm and the gear ratios |
そのため「タイヤ半径を変えたらファイナルも直す」「寸法を変えたら慣性も」といった組み合わせの手直しは要りません。半径を変えればギアリングも車高も登坂力も一緒に動きます。
So there is no cross-checking to do — no "I changed the tyre radius, now fix the final drive", no "I changed the dimensions, now fix the inertia". Change the radius and the gearing, ride height and climbing ability all move with it.
付録 A. 部品の全項目
Appendix A. Every part key
素性 — data/<pack>/car_parts/<part>.json
Definition — data/<pack>/car_parts/<part>.json
| キー | 型 | 既定値 | 意味 |
|---|---|---|---|
slot | 文字列 | 必須 | 付ける場所。"wheel"・"tire"・"turbo"・"blowoff"・"front_bumper"・"side_skirt"・"fender"・"rear_wing"・"rear_diffuser"・"exhaust" |
order | 整数 | 100 | 換装画面に並ぶ順 |
cars | 車種 id の配列 | (すべての車種) | 付けられる車種。読める値が 1 つも無ければ、その部品は捨てられる |
turbo.boost | 数字 | 0.35 | ターボだけ。ブーストいっぱいでトルクを何割増やすか(0〜1.5) |
turbo.spool_from | 数字 | 0.25 | ターボだけ。過給が立ち上がり始める回転の割合(アイドル 0〜レブ 1) |
turbo.spool_full | 数字 | 0.60 | ターボだけ。過給がいっぱいになる回転の割合 |
turbo.spool_rate | 数字 | 3.0 | ターボだけ。ブーストが上がる速さ [1/秒](0.1〜20) |
tire.stiffness | 数字 | 1 | タイヤだけ。横・縦の剛性の倍率(よれやすさ。0.3〜3.0) |
tire.grip.<路面> | 数字 | 1 | タイヤだけ。その路面でのグリップの倍率。路面は paved・dirt・gravel・sand・snow・ice |
tire.rolling.<路面> | 数字 | 1 | タイヤだけ。その路面での転がり抵抗の倍率 |
aero.front / aero.rear | 数字 or [最小, 最大] | 0 | 外装パーツだけ。その軸のダウンフォースの面積 [m²](0〜3)。範囲なら角度で調整できる(パーツの 2 章) |
aero.angle | 数字 | 0.5 | 外装パーツだけ。調整していないときの角度(0〜1) |
| Key | Type | Default | Meaning |
|---|---|---|---|
slot | string | required | Where it fits: "wheel", "tire", "turbo", "blowoff", "front_bumper", "side_skirt", "fender", "rear_wing", "rear_diffuser" or "exhaust" |
order | integer | 100 | Position in the parts screen |
cars | array of car ids | (every car) | Which cars can fit it. If none of the values can be read, the part is dropped |
turbo.boost | number | 0.35 | Turbos only. Extra torque at full boost (0 to 1.5) |
turbo.spool_from | number | 0.25 | Turbos only. Where boost starts to build, as a fraction from idle (0) to the rev limit (1) |
turbo.spool_full | number | 0.60 | Turbos only. Where boost is full |
turbo.spool_rate | number | 3.0 | Turbos only. How fast boost builds [1/s] (0.1 to 20) |
tire.stiffness | number | 1 | Tyres only. Scale on lateral and longitudinal stiffness (tread squirm; 0.3 to 3.0) |
tire.grip.<surface> | number | 1 | Tyres only. Grip on that surface. Surfaces: paved, dirt, gravel, sand, snow, ice |
tire.rolling.<surface> | number | 1 | Tyres only. Rolling resistance on that surface |
aero.front / aero.rear | number or [min, max] | 0 | Body parts only. Downforce area on that axle [m²] (0 to 3). A range is adjustable by angle (chapter 2 of the Parts guide) |
aero.angle | number | 0.5 | Body parts only. Default angle (0 to 1) |
見た目 — assets/<pack>/car_parts/<part>.json("wheel": { ... } の中。入れ子を省いて、いちばん外側に書いてもよい。ホイールだけ。ターボとブローオフには要らない)
Looks — assets/<pack>/car_parts/<part>.json (inside "wheel": { ... }, or at the top level without the nesting). Wheels only; turbos and blow-off valves need none
| キー | 型 | 既定値 | 意味 |
|---|---|---|---|
model | id | その車種の wheel.model | ホイールの OBJ |
texture | id | その車種の wheel.texture | ホイールのテクスチャ |
designRadius | 数字 | その車種の designWheelRadius | メッシュが何 m の半径で作られているか |
offset | [x,y,z] | その車種の wheel.offset | 平行移動 [m]。X は外向き。X はオフセットのスライダーの既定値(−0.05 〜 0.10。外れたら端へ丸める) |
scale | 数字 1 つ or [x,y,z] | その車種の wheel.scale | X は太さ(スライダーの既定値。0.5 〜 2.5 に丸める)。Y・Z は触らない |
camber | 数字 | その車種の wheel.camber | キャンバー角 [度]。スライダーの既定値(−30 〜 10 に丸める) |
rimRadius | 数字 | (測る) | タイヤの内径(ビード)を置く半径 [m](メッシュの寸法)。3 章 |
タイヤの見た目 — assets/<pack>/car_parts/<part>.json("tire": { ... } の中。いちばん外側には書けない)
| キー | 型 | 既定値 | 意味 |
|---|---|---|---|
model | id | KurumaMod 標準のタイヤ | タイヤの OBJ(タイヤだけ。原点は車軸の中心) |
texture | id | kurumamod:textures/entity/wheel.png | タイヤのテクスチャ |
innerRadius | 数字 | (測る) | メッシュのタイヤの内径 [m]。測った値がおかしいときだけ書く |
outerRadius | 数字 | (測る) | メッシュのタイヤの外径 [m]。同上 |
| Key | Type | Default | Meaning |
|---|---|---|---|
model | id | the car's wheel.model | Wheel OBJ |
texture | id | the car's wheel.texture | Wheel texture |
designRadius | number | the car's designWheelRadius | The radius the mesh was built at, in m |
offset | [x,y,z] | the car's wheel.offset | Translation [m]. X points outward; it is the offset slider's default (−0.05 to 0.10, clamped) |
scale | one number or [x,y,z] | the car's wheel.scale | X is width (the slider's default, clamped to 0.5–2.5). Leave Y/Z alone |
camber | number | the car's wheel.camber | Camber [degrees]. The slider's default (clamped to −30 to 10) |
rimRadius | number | (measured) | Radius where the tyre's bead sits [m], in mesh units. Chapter 3 |
Tyre looks — assets/<pack>/car_parts/<part>.json (inside "tire": { ... }; not at the top level)
| Key | Type | Default | Meaning |
|---|---|---|---|
model | id | KurumaMod's own tyre | Tyre OBJ (tyre only, origin at the axle centre) |
texture | id | kurumamod:textures/entity/wheel.png | Tyre texture |
innerRadius | number | (measured) | The mesh's inner tyre radius [m]. Only write it if the measured one is wrong |
outerRadius | number | (measured) | The mesh's outer tyre radius [m]. Likewise |
マフラーの音 — assets/<pack>/car_parts/<part>.json("exhaust": { ... } の中。いちばん外側には書けない)
| キー | 型 | 既定値 | 意味 |
|---|---|---|---|
pitch | 数字 or [最小, 最大] | 1 | 音程の倍率(0.5〜1.5)。範囲なら「音の低さ」で動かせる |
volume | 数字 | 1 | 音量の倍率(0〜2) |
sound | id | (その車の音) | 排気音のサウンドイベント |
sound_high | id | (無し) | 高回転側(1 オクターブ上)のサウンドイベント |
tone | 数字 | 0 | 調整していないときの低さ(0〜1) |
Exhaust sound — assets/<pack>/car_parts/<part>.json (inside "exhaust": { ... }; not at the top level)
| Key | Type | Default | Meaning |
|---|---|---|---|
pitch | number or [min, max] | 1 | Pitch multiplier (0.5 to 1.5). A range is adjustable with "Deepness" |
volume | number | 1 | Volume multiplier (0 to 2) |
sound | id | (the car's) | Exhaust sound event |
sound_high | id | (none) | High-rev (one octave up) sound event |
tone | number | 0 | Default deepness (0 to 1) |
車の側 — 初期装備(data/<pack>/cars/<car>.json のいちばん外側)と対応(assets/<pack>/vehicles/<car>.json)
| キー | 型 | 意味 |
|---|---|---|
default_parts.<場所> | 部品 id or {"part": id, "removable": 真偽} | 何も付けていないときの部品。removable の既定は true |
parts.<部品 id>.show | オブジェクト名の配列 | その部品を付けたときに出すオブジェクト(part_ で始まる名前だけ) |
On the car — default parts (top level of data/<pack>/cars/<car>.json) and mapping (assets/<pack>/vehicles/<car>.json)
| Key | Type | Meaning |
|---|---|---|
default_parts.<slot> | part id or {"part": id, "removable": bool} | The part fitted when nothing is chosen. removable defaults to true |
parts.<part id>.show | array of object names | Objects shown while that part is fitted (names starting with part_ only) |