#author("2017-08-20T01:18:41+09:00","","")
[[MOD/作成方法]]

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

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

** xmlの記述 [#ye435edb]

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

まずは性能等を決めてしまいましょう。
大砲とロケット砲の間ぐらいの性能を持つ攻城兵器「自走榴弾砲」を作ってみます。
(すでに公開済み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文そのものです。
どの要素を変えるとどうなるのかは全部理解できていません・・・。

*** 指導者に紐付ける [#kf7221f4]

後述する、と書いたTraitについてはここで説明します。
そのユニットが指導者(ないし文明)固有のものであることを指定するにはTraitというものに紐付けます。
そのTraitを定義します。

今回は指導者に紐付けますのでNewLeader_JasperKitty.xmlを開いて追加します。

 <GameData>
 	<Types>
 		<Row Type="LEADER_JASPER_KITTY" Kind="KIND_LEADER" />
 		<Row Type="TRAIT_LEADER_JASPER_KITTY" Kind="KIND_TRAIT"/>
 		<Row Type="TRAIT_LEADER_UNIT_hogehoge_UU" Kind="KIND_TRAIT"/> ★追加
 	</Types>
 
 	<Leaders>
 		<Row>
 			<LeaderType>LEADER_JASPER_KITTY</LeaderType>
 			<Name>LOC_LEADER_JASPER_KITTY_NAME</Name>
 			<InheritFrom>LEADER_DEFAULT</InheritFrom>
 		</Row>
 	</Leaders>
 
 	<LeaderQuotes>
 		<Row LeaderType="LEADER_JASPER_KITTY" Quote="LOC_LEADER_JASPER_KITTY_QUOTE"/>
 	</LeaderQuotes>
 
 	<LeaderTraits>
 		<Row LeaderType="LEADER_JASPER_KITTY" TraitType="TRAIT_LEADER_JASPER_KITTY"/>
 		<Row LeaderType="LEADER_JASPER_KITTY" TraitType="TRAIT_LEADER_UNIT_hogehoge_UU"/> ★追加
 	</LeaderTraits>
 	<Traits>
 		<Row TraitType="TRAIT_LEADER_JASPER_KITTY" Name="LOC_TRAIT_LEADER_JASPER_KITTY_NAME" Description="LOC_TRAIT_LEADER_JASPER_KITTY_DESCRIPTION"/>
 		<Row TraitType="TRAIT_LEADER_UNIT_hogehoge_UU" Name="LOC_TRAIT_LEADER_UNIT_hogehoge_UU_NAME"/> ★追加
 	</Traits>
 	<TraitModifiers>
 		<Row TraitType="TRAIT_LEADER_JASPER_KITTY" ModifierId="TRAIT_JASPER_KITTY_INCREASE_GREAT_MUSICIAN_POINTS"/>
 	</TraitModifiers>

こうすることで、LEADER_JASPER_KITTYはTRAIT_LEADER_UNIT_hogehoge_UUというTraitをもち、
UNIT_hogehoge_UUというユニットはTRAIT_LEADER_UNIT_hogehoge_UUに紐付いている、という風に定義がつながります。
*** 文明選択時の表示 [#o5ead484]

文明・指導者の特性や固有のユニット等はゲーム開始前の文明選択時に表示されていますが、それはConfigに記載されているからです。
それを記述しましょう。編集するのはNewLeader_Config.xmlになります。

 <?xml version="1.0" encoding="utf-8"?>
 <GameData>
 	<Players>
 		<Row>
 			<Domain>StandardPlayers</Domain>
 			<CivilizationType>CIVILIZATION_FELINE</CivilizationType>
 			<LeaderType>LEADER_JASPER_KITTY</LeaderType>
 			<CivilizationName>LOC_CIVILIZATION_FELINE_NAME</CivilizationName>
 			<CivilizationIcon>ICON_CIVILIZATION_FELINE</CivilizationIcon>
 			<LeaderName>LOC_LEADER_JASPER_KITTY_NAME</LeaderName>
 			<LeaderIcon>ICON_LEADER_JASPER_KITTY</LeaderIcon>
 			<CivilizationAbilityName>LOC_TRAIT_CIVILIZATION_FELINE_NAME</CivilizationAbilityName>
 			<CivilizationAbilityDescription>LOC_TRAIT_CIVILIZATION_FELINE_DESCRIPTION</CivilizationAbilityDescription>
 			<CivilizationAbilityIcon>ICON_CIVILIZATION_FELINE</CivilizationAbilityIcon>
 			<LeaderAbilityName>LOC_TRAIT_LEADER_JASPER_KITTY_NAME</LeaderAbilityName>
 			<LeaderAbilityDescription>LOC_TRAIT_LEADER_JASPER_KITTY_DESCRIPTION</LeaderAbilityDescription>
 			<LeaderAbilityIcon>ICON_LEADER_JASPER_KITTY</LeaderAbilityIcon>
 			<Portrait>PORTRAIT_hogehoge</Portrait>
 		</Row>
 	</Players>
 	<PlayerItems>
 		<Row>
 			<Domain>StandardPlayers</Domain>
 			<CivilizationType>CIVILIZATION_FELINE</CivilizationType>
 			<LeaderType>LEADER_JASPER_KITTY</LeaderType>
 			<Type>BUILDING_LITTER_BOX</Type>
 			<Name>LOC_BUILDING_LITTER_BOX_NAME</Name>
 			<Description>LOC_BUILDING_LITTER_BOX_DESCRIPTION</Description>
 			<Icon>ICON_BUILDING_LITTER_BOX</Icon>
 			<SortIndex>10</SortIndex>
 		</Row>
 		<Row> ★追加
 			<Domain>StandardPlayers</Domain> ★追加
 			<CivilizationType>CIVILIZATION_FELINE</CivilizationType> ★追加
 			<LeaderType>LEADER_JASPER_KITTY</LeaderType> ★追加
 			<Type>UNIT_hogehoge_UU</Type> ★追加
 			<Name>LOC_UNIT_hogehoge_UU_NAME</Name> ★追加
 			<Description>LOC_UNIT_hogehoge_UU_DESCRIPTION</Description> ★追加
 			<Icon>ICON_UNIT_hogehoge_UU</Icon> ★追加
 			<SortIndex>20</SortIndex> ★追加
 		</Row> ★追加
 	</PlayerItems>
 </GameData>


*** 説明文を書く [#efc35d7d]

実際に表示される説明文をNewLeader_ConfigText.xmlへ記述します。
必要なのは
- ユニット名(ゲーム内等)
- ユニットの説明
- ユニット名(Trait用)
- ユニットのCivilopediaの内容

の4項目です。
例によってサンプルが英語ですので英語で書いておきます。

 		<Row Tag="LOC_UNIT_hogehoge_UU_NAME" Language="en_US">
 			<Text>Howitzer</Text>
 		</Row>
 		<Row Tag="LOC_UNIT_hogehoge_UU_DESCRIPTION" Language="en_US">
 			<Text>Jasper Kitty unique Atomic era unit.</Text>
 		</Row>
 		<Row Tag="LOC_TRAIT_LEADER_UNIT_hogehoge_UU_NAME" Language="en_US">
 			<Text>Jasper Kitty unique unit: Howitzer</Text>
 		</Row>
 		<Row Tag="LOC_PEDIA_UNITS_PAGE_UNIT_hogehoge_UU_CHAPTER_HISTORY_PARA_1" Language="en_US">
 			<Text></Text>
 		</Row>

** Propertyに登録する [#x78b020b]

作ったxmlファイルはpropertyへ登録しましょう。
In-Game ActionsのUpdateDatabaseの中です。

&ref(AddXMLtoProperty.png);
** ユニットのアイコン作成 [#i79a9fd7]

ユニットは独自の2つのアイコンを持っています。
- Flag(ユニットにくっつく抽象的な見た目のアイコン)
- Portrait(ユニットをクリックすると右下に出てくるやつ)

これらも作る必要があります。
それぞれ必要なサイズは以下となります。
- Flag:256,80,50,38,32,22
- Portrait:256,200,95,75,50,38

基本は指導者や文明のアイコンと同じで、
- 画像を用意
- texを用意
- xlpファイルへ追記

です。
texのコピー元は指導者のアイコンと同じでOK。(文明アイコンのtexは少し仕様が違うみたいです)

そしてxmlの定義の書き方が少し特殊です。これは命名規則が決まっています。

まずFlagは4種類必要です。
|ICON_[ユニット名]|256,80,50,38,32のサイズを登録する|
|ICON_[ユニット名]_FOW|32のサイズのみを登録する|
|ICON_[ユニット名]_WHITE|80,32,2のサイズを登録する|
|ICON_[ユニット名]_BLACK|32のサイズのみを登録する|

Portraitはさらに面倒くさくて以下のようになります。
|ICON_[ユニット定義名]_PORTRAIT|256,200,95,50,38のサイズを登録する|
|ICON_ETHNICITY_ASIAN_[ユニット定義名]_PORTRAIT|95,75のサイズを登録する|
|ICON_ETHNICITY_MEDIT_[ユニット定義名]_PORTRAIT|95,75のサイズを登録する|
|ICON_ETHNICITY_SOUTHAM_[ユニット定義名]_PORTRAIT|95,75のサイズを登録する|
|ICON_ETHNICITY_AFRICAN_[ユニット定義名]_PORTRAIT|95,75のサイズを登録する|

具体的には以下のように・・・(長いです)。

*** 開発環境への画像登録 [#jdc6ca85]

&ref(ImageAddUU.png);
*** hogehoge_Icons.xlp [#sd4428db]

以下を追加。
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge22"/>
 			<m_ObjectName text="ICON_UU_hogehoge22"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge32"/>
 			<m_ObjectName text="ICON_UU_hogehoge32"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge38"/>
 			<m_ObjectName text="ICON_UU_hogehoge38"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge50"/>
 			<m_ObjectName text="ICON_UU_hogehoge50"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge80"/>
 			<m_ObjectName text="ICON_UU_hogehoge80"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge256"/>
 			<m_ObjectName text="ICON_UU_hogehoge256"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT38"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT38"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT50"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT50"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT70"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT70"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT95"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT95"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT200"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT200"/>
 		</Element>
 		<Element>
 			<m_EntryID text="ICON_UU_hogehoge_PORT256"/>
 			<m_ObjectName text="ICON_UU_hogehoge_PORT256"/>
 		</Element>
*** NewlLeader_Icons.xml [#j06b8d0d]

 <?xml version="1.0" encoding="utf-8"?>
 <GameData>
 	<IconTextureAtlases>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge32.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="45"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge45.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="50"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge50.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="55"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge55.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="64"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge64.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="80"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge80.dds"/>
 		<Row Name="ICON_ATLAS_LEADER_HOGEHOGE" IconSize="256" IconsPerRow="1" IconsPerColumn="1" Filename="ICON_LEADER_hogehoge256.dds"/>
  
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="22"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge22.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="30"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge30.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="36"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge36.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="44"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge44.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="45"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge45.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="48"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge48.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="50"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge50.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="64"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge64.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="80"   IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge80.dds"/>
 		<Row Name="ICON_ATLAS_CIVILIZATION_HOGEHOGE" IconSize="256"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_CIV_hogehoge256.dds"/>
  
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS"                         IconSize="256" IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge256.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS"                         IconSize="80"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge80.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS"                         IconSize="50"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge50.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS"                         IconSize="38"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge38.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS"                         IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge32.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNITS_FOW"                     IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge32.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SYMBOLS_WHITE"                 IconSize="22"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge22.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SYMBOLS_WHITE"                 IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge32.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SYMBOLS_WHITE"                 IconSize="80"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge80.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SYMBOLS_BLACK"                 IconSize="32"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge32.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                IconSize="256" IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT256.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                IconSize="200" IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT200.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                IconSize="95"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT95.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                IconSize="50"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT50.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                IconSize="38"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT38.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_ASIAN_UNIT_PORTRAITS"          IconSize="70"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT70.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_ASIAN_UNIT_PORTRAITS"          IconSize="95"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT95.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_MEDITERRANEAN_UNIT_PORTRAITS"  IconSize="70"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT70.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_MEDITERRANEAN_UNIT_PORTRAITS"  IconSize="95"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT95.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SOUTH_AMERICAN_UNIT_PORTRAITS" IconSize="70"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT70.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_SOUTH_AMERICAN_UNIT_PORTRAITS" IconSize="95"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT95.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_AFRICAN_UNIT_PORTRAITS"        IconSize="70"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT70.dds"/> ★追加
 		<Row Name="ICON_ATLAS_HOGEHOGE_AFRICAN_UNIT_PORTRAITS"        IconSize="95"  IconsPerRow="1" IconsPerColumn="1" Filename="ICON_UU_hogehoge_PORT95.dds"/> ★追加
 	</IconTextureAtlases>
 	<IconDefinitions>
 		<Row Name="ICON_BUILDING_LITTER_BOX" Atlas="ICON_ATLAS_BUILDINGS" Index="0"/>
 		<Row Name="ICON_CIVILIZATION_FELINE" Atlas="ICON_ATLAS_CIVILIZATION_HOGEHOGE" Index="0"/>
 		<Row Name="ICON_LEADER_JASPER_KITTY" Atlas="ICON_ATLAS_LEADER_HOGEHOGE" Index="0"/>
  
 		<Row Name="ICON_UNIT_hogehoge_UU"                            Atlas="ICON_ATLAS_HOGEHOGE_UNITS"                         Index="0"/> ★追加
 		<Row Name="ICON_UNIT_hogehoge_UU_FOW"                        Atlas="ICON_ATLAS_HOGEHOGE_UNITS_FOW"                     Index="0"/> ★追加
 		<Row Name="ICON_UNIT_hogehoge_UU_WHITE"                      Atlas="ICON_ATLAS_HOGEHOGE_SYMBOLS_WHITE"                 Index="0"/> ★追加
 		<Row Name="ICON_UNIT_hogehoge_UU_BLACK"                      Atlas="ICON_ATLAS_HOGEHOGE_SYMBOLS_BLACK"                 Index="0"/> ★追加
 		<Row Name="ICON_UNIT_hogehoge_UU_PORTRAIT"                   Atlas="ICON_ATLAS_HOGEHOGE_UNIT_PORTRAITS"                Index="0"/> ★追加
 		<Row Name="ICON_ETHNICITY_ASIAN_UNIT_hogehoge_UU_PORTRAIT"   Atlas="ICON_ATLAS_HOGEHOGE_ASIAN_UNIT_PORTRAITS"          Index="0"/> ★追加
 		<Row Name="ICON_ETHNICITY_MEDIT_UNIT_hogehoge_UU_PORTRAIT"   Atlas="ICON_ATLAS_HOGEHOGE_MEDITERRANEAN_UNIT_PORTRAITS"  Index="0"/> ★追加
 		<Row Name="ICON_ETHNICITY_SOUTHAM_UNIT_hogehoge_UU_PORTRAIT" Atlas="ICON_ATLAS_HOGEHOGE_SOUTH_AMERICAN_UNIT_PORTRAITS" Index="0"/> ★追加
 		<Row Name="ICON_ETHNICITY_AFRICAN_UNIT_hogehoge_UU_PORTRAIT" Atlas="ICON_ATLAS_HOGEHOGE_AFRICAN_UNIT_PORTRAITS"        Index="0"/> ★追加
 	</IconDefinitions>
 </GameData>
** ユニットの見た目を定義する [#m6a602da]

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

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

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

とりあえず見た目を戦車と同じにしてみましょう。
まずArtdefの空ファイルを作成します。xmlと同じように新規追加でいいのですが、artdefという項目がありません。
なのでtxtファイルにして拡張子ごとリネームします。
「hogehoge_Units.artdef」としてください。

次にバニラのArtdefから戦車の定義部分を持ってきます。
バニラのユニットのArtdefファイルは
 Sid Meier's Civilization VI/Base/Artdefs/Units.artdef
です。
戦車のユニット定義名は「UNIT_TANK」です。

探し当てたら必要最小限抜き出してユニット定義名を書き換えます。
作業後の内容は以下になります。
 <?xml version="1.0" encoding="UTF-8" ?>
 <AssetObjects:ArtDefSet>
 	<m_Version>
 		<major>4</major>
 		<minor>0</minor>
 		<build>256</build>
 		<revision>893</revision>
 	</m_Version>
 	<m_TemplateName text="Units"/>
 	<m_RootCollections>
 		<Element>
 			<m_CollectionName text="Units"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 			<Element>
 				<m_Fields>
 					<m_Values>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text="Scattered"/>
 							<m_RootCollectionName text="UnitFormationTypes"/>
 							<m_ArtDefPath text="Units.artdef"/>
 							<m_CollectionIsLocked>false</m_CollectionIsLocked>
 							<m_TemplateName text=""/>
 							<m_ParamName text="Formation"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text="Tank"/>
 							<m_RootCollectionName text="UnitCombat"/>
 							<m_ArtDefPath text="Units.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text="Units"/>
 							<m_ParamName text="UnitCombat"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text=""/>
 							<m_RootCollectionName text="UnitFormationTypes"/>
 							<m_ArtDefPath text="Units.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text=""/>
 							<m_ParamName text="EscortFormation"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text="UNIT_MODERNEMBARK"/>
 							<m_RootCollectionName text="Units"/>
 							<m_ArtDefPath text="Units.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text="Units"/>
 							<m_ParamName text="EmbarkedUnit"/>
 						</Element>
 						<Element class="AssetObjects:BoolValue">
 							<m_bValue>false</m_bValue>
 							<m_ParamName text="DoNotDisplayCharges"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text=""/>
 							<m_RootCollectionName text="UnitCulture"/>
 							<m_ArtDefPath text="Cultures.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text=""/>
 							<m_ParamName text="Culture"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text=""/>
 							<m_RootCollectionName text="Era"/>
 							<m_ArtDefPath text="Eras.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text=""/>
 							<m_ParamName text="Era"/>
 						</Element>
 						<Element class="AssetObjects:ArtDefReferenceValue">
 							<m_ElementName text=""/>
 							<m_RootCollectionName text="Units"/>
 							<m_ArtDefPath text="Units.artdef"/>
 							<m_CollectionIsLocked>true</m_CollectionIsLocked>
 							<m_TemplateName text=""/>
 							<m_ParamName text="ProxyUnit"/>
 						</Element>
 						<Element class="AssetObjects:BoolValue">
 							<m_bValue>false</m_bValue>
 							<m_ParamName text="PlayDeathOnDestroy"/>
 						</Element>
 						<Element class="AssetObjects:IntValue">
 							<m_nValue>0</m_nValue>
 							<m_ParamName text="DisplayLevel"/>
 						</Element>
 					</m_Values>
 				</m_Fields>
 				<m_ChildCollections>
 					<Element>
 						<m_CollectionName text="Members"/>
 						<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 						<Element>
 							<m_Fields>
 								<m_Values>
 									<Element class="AssetObjects:FloatValue">
 										<m_fValue>1.000000</m_fValue>
 										<m_ParamName text="Scale"/>
 									</Element>
 									<Element class="AssetObjects:IntValue">
 										<m_nValue>1</m_nValue>
 										<m_ParamName text="Count"/>
 									</Element>
 									<Element class="AssetObjects:ArtDefReferenceValue">
 										<m_ElementName text="Tank"/>
 										<m_RootCollectionName text="UnitMemberTypes"/>
 										<m_ArtDefPath text="Units.artdef"/>
 										<m_CollectionIsLocked>false</m_CollectionIsLocked>
 										<m_TemplateName text=""/>
 										<m_ParamName text="Type"/>
 									</Element>
 								</m_Values>
 							</m_Fields>
 							<m_ChildCollections/>
 							<m_Name text="Members1"/>
 							<m_AppendMergedParameterCollections>false</m_AppendMergedParameterCollections>
 						</Element>
 					</Element>
 					<Element>
 						<m_CollectionName text="Audio"/>
 						<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 						<Element>
 							<m_Fields>
 								<m_Values>
 									<Element class="AssetObjects:StringValue">
 										<m_Value text=""/>
 										<m_ParamName text="XrefName"/>
 									</Element>
 								</m_Values>
 							</m_Fields>
 							<m_ChildCollections/>
 							<m_Name text=""/>
 							<m_AppendMergedParameterCollections>false</m_AppendMergedParameterCollections>
 						</Element>
 						<Element>
 							<m_Fields>
 								<m_Values>
 									<Element class="AssetObjects:StringValue">
 										<m_Value text="Tank"/>
 										<m_ParamName text="XrefName"/>
 									</Element>
 								</m_Values>
 							</m_Fields>
 							<m_ChildCollections/>
 							<m_Name text="TANK"/>
 							<m_AppendMergedParameterCollections>false</m_AppendMergedParameterCollections>
 						</Element>
 					</Element>
 				</m_ChildCollections>
 				<m_Name text="UNIT_hogehoge_UU"/> ★ここを「UNIT_TANK」から変更
 				<m_AppendMergedParameterCollections>false</m_AppendMergedParameterCollections>
 			</Element>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitMovementTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitFormationTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="MemberCombat"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitCombat"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="CombatAttack"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitFormationLayoutTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="CombatFormation"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitAttachmentBins"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitMemberTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitTintTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitGlobals"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 		<Element>
 			<m_CollectionName text="UnitDomainTypes"/>
 			<m_ReplaceMergedCollectionElements>false</m_ReplaceMergedCollectionElements>
 		</Element>
 	</m_RootCollections>
 </AssetObjects:ArtDefSet>

作成したArtdefをMod.Art.xmlへ登録します。

 ・
 ・
 ・
 	</id>
 	<artConsumers>
 		<Element>
 			<consumerName text="Units"/>
 			<relativeArtDefPaths>
 				<Element text="hogehoge_Units.artdef"/> ★追加
 			</relativeArtDefPaths>
 ・
 ・
 ・

** ビルド・動作確認 [#e5a8f688]

以上で完成です。
ビルドして動作確認してみましょう。

文明選択画面

&ref(SelectUU.jpg);

Loading画面

&ref(LoadingUU.jpg);

今回作ったユニットはかなり後半の時代のものです。(原子力時代)
上位ユニットもありませんので、情報時代でスタートして確認してみましょう。
こんな感じでちゃんとユニットが作成されればOKです。

&ref(UU.jpg);

** 備考 [#h77c4167]

*** 何かのユニットと差し替えたい [#p5e03d7a]

大砲の置き換えにしたい場合は以下のように記述します。
 	<UnitReplaces>
 		<Row CivUniqueUnitType="UNIT_hogehoge_UU" ReplacesUnitType="UNIT_ARTILLERY"/>
 	</UnitReplaces>

※このままだと技術レベルが釣り合いませんので、ユニットの詳細にて解禁技術をTECH_ADVANCED_BALLISTICS(高度な弾道学)からTECH_STEEL(鋼鉄)などにするとよいでしょう。
*** サンプル [#t452cff6]

ここまで作業したものを以下に置いておきます。
https://www.axfc.net/u/3836370


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