#author("2017-08-19T21:54:59+09:00","","")
[[MOD/作成方法]]

* ユニークユニットの作成 [#gc085049]

特殊能力を持たない単純なユニークユニットの作成例です。

** ユニットのデータ記述 [#k6aae4c1]

まずは性能等を決めてしまいましょう。
大砲とロケット砲の間ぐらいの性能を持つ攻城兵器「自走榴弾砲」を作ってみます。
(すでに公開済みMODで実装しているものです)

新規にxmlファイルを作成します。で、適当にリネームしましょう。
ここではNewLeader_UU.xmlとします。

Propertyを右クリック⇒Add⇒NewItemと選択

&ref(Menu.png);

Database(xml)を選択し、右下のAddをクリック

&ref(NewXML.png);

これで新しくxmlファイルが出来上がりますので、適当にリネームしましょう。
ここではNewLeader_UU.xmlとします。

内容は以下のようにします。
 <?xml version="1.0" encoding="utf-8"?>
 <GameData>
 	<Types>
 		<Row Type="UNIT_hogehoge_UU" Kind="KIND_UNIT"/>
 	</Types>
 	<UnitAiInfos>
 		<Row UnitType="UNIT_hogehoge_UU" AiType="UNITAI_COMBAT"/>
 		<Row UnitType="UNIT_hogehoge_UU" AiType="UNITTYPE_RANGED"/>
 		<Row UnitType="UNIT_hogehoge_UU" AiType="UNITTYPE_SIEGE"/>
 		<Row UnitType="UNIT_hogehoge_UU" AiType="UNITTYPE_LAND_COMBAT"/>
 	</UnitAiInfos>
 	<TypeTags>
 		<Row Type="UNIT_hogehoge_UU" Tag="CLASS_SIEGE"/>
 		<Row Type="UNIT_hogehoge_UU" Tag="CLASS_FORWARD_OBSERVER"/>
 	</TypeTags>
 	<Units>
 		<Row UnitType="UNIT_hogehoge_UU" BaseMoves="3" Cost="550" AdvisorType="ADVISOR_CONQUEST" 
 			 BaseSightRange="2" ZoneOfControl="false" Domain="DOMAIN_LAND" FormationClass="FORMATION_CLASS_LAND_COMBAT" 
 			 Name="LOC_UNIT_hogehoge_UU_NAME" Description="LOC_UNIT_hogehoge_UU_DESCRIPTION" PurchaseYield="YIELD_GOLD" 
 			 PromotionClass="PROMOTION_CLASS_SIEGE" Maintenance="7" Combat="65" Range="2" TraitType="TRAIT_LEADER_UNIT_hogehoge_UU" 
 			 PrereqTech="TECH_ADVANCED_BALLISTICS" Bombard="88"/>
 	</Units>
 </GameData>

Types:ユニットの親定義

UnitAiInfos:AIがユニットを動かす際の指標
- 他の攻城ユニットから丸コピーです。上から戦闘ユニット、遠距離、攻城兵器、陸上ユニットという定義かと思います。

TypeTags:ユニットが持つTagの設定
- 他の攻城ユニットから丸コピーです。上は攻城兵器という指定なのでしょうけど、下がわかりません・・・。

Units:ユニットのステータス詳細設定
- ロケット砲からコピーしてきて値を変えています。

|UnitType|Typeで定義したもの|
|BaseMoves|移動力|
|Cost|生産コスト|
|AdvisorType|助言者の設定?|
|BaseSightRange|視界|
|ZoneOfControl|ZOC:false = なし|
|Domain|ユニットが属するドメイン:DOMAIN_LAND = 陸上ユニット|
|FormationClass|よくわかりません・・・たぶんユニットの見た目にかかわるものかと思います。|
|PromotionClass|よくわかりません・・・ユニットが何のタイプなのか、かな???(SIEGEだと攻城兵器)|
|Maintenance|維持費|
|Combat|近接戦闘力|
|Range|射程|
|TraitType|何のTraitに紐付くか。ユニークユニットならば必須です。後述します。|
|PrereqTech|ユニット作成に必要な解禁技術:TECH_ADVANCED_BALLISTICS = 高度な弾道学|
|Bombard|都市砲撃力|

*** <Units>に設定できる値について [#x908a0de]

設定できる値の定義は
 Sid Meier's Civilization VI/Base/Assets/Gameplay/Data/Schema/01_GameplaySchema.sql
に書かれています。
 CREATE TABLE "Units" (
 ・
 ・
 ・
 FOREIGN KEY (ObsoleteTech) REFERENCES Technologies(TechnologyType) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT);
の部分がユニットのデータ定義です。

データベースを知っている方ならわかると思いますが、SQLのCreate文そのものです。
どの要素を変えるとどうなるのかは全部理解できていません・・・。

** ユニットのアイコン作成 [#i79a9fd7]

ユニットは独自の2つのアイコンを持っています。
- Flag
- Portrait

** ユニットの見た目 [#rfd22984]

ここまでの作業を行えば、実際にゲーム内でユニークユニットを作成することはできます。
が、このままだと見た目が労働者になってしまいます。それはユニットの見た目の設定を何もしていないからです。

本来ならば3Dデータを作ってゲームで使えるように変換して・・・というのを書くのが筋なのですが・・・
あいにくのところ筆者は3Dデータを作る技術を持ち合わせておりません。よって既存の使いまわし方を記載します。

既存のデータを使いまわすにはArtdefファイルを書けばよいです。
書くといっても、使いまわしですのでバニラからもってきて定義を変えるだけ、です。


** 備考 [#h77c4167]


このエントリーをはてなブックマークに追加