UDN
Search public documentation:

UDKCustomCharactersJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > ゲームプレイ要素 > 「UDK」におけるカスタムキャラクタの作成
UE3 ホーム > キャラクターアーティスト > 「UDK」におけるカスタムキャラクタの作成


「UDK」におけるカスタムキャラクタの作成


概要


このドキュメントでは、Unreal Development Kit で使用する新規キャラクタメッシュの作成について、ならびにメッシュコンテントをエンジンにインポートし、これをエンジン内ですばやく設定するための構成方法について説明します。キャラクタのカスタムな動作をプログラミングする場合の詳細については、 キャラクター技術ガイドをご覧ください。

スケルトン


以下に、UDKで使用する独自のキャラクタを作成する際のガイドや基礎となる、4種類のスケルトンを記します。

注記:一部のスケルトンには、二足歩行モデルが含まれています。二足歩行モデルは追加のスケルトンですが、容易にアニメーション化できます。アニメーションが完了したら、アニメーションを元のスケルトンに焼き付け、二足歩行を削除してから、アニメーションをエクスポートします。

また参考用に、以下のファーストパーソンスケルトンも利用できます。

推奨ワークフローとして、たとえば「マスタースケルトン」ファイルと呼ばれるものを作成し、ゲーム内で同類のキャラクタに使用するボーンをすべてここに入れます。キャラクタメッシュにすべてのボーンを使用する必要はありませんが、マスタースケルトンには、すべてのキャラクタについてのすべてのボーンが含まれている必要があります。たとえば、まだ存在しない新しいタイプの服を着たキャラクタを作成したい場合(袖が腕から垂れ下がった服など)、キャラクタ作成プロセス時にあらゆるメッシュが問題なく機能するよう、ボーンをマスタースケルトンに追加する必要があります。

マスタースケルトンにはあらゆるボーンが含まれているため、新規メッシュのスキニング時には、利用可能なボーンをすべて容易に確認できる、マスタースケルトンのマックスファイルを使用することを推奨します。

このドキュメントでは便宜上、UDK の既存アニメーションセットを使用するため、すでに存在しているボーンを使用してキャラクタをインポートする方法について説明します。

スケルトンにメッシュを付加

カスタムメッシュを作成する際には、スケルトンを考慮に入れながらメッシュを作成するのが理想的です。メッシュのモデリングにおいては、すでにスケルトンによって定められた場所と関節が合うようモデリングを行います。この規則が該当しないメッシュについては、スケルトンの関節を、メッシュの関節と並ぶよう回転させます。ゲーム中のアニメーションでは、ボーンが適切な場所に戻されます。ボーンは回転が可能ですが、ジョイントがメッシュ内に入り込むような場所に移動 (平行移動を含む) することは絶対に避けてください。ボーンの平行移動先はアニメーションによって定義しているため、このような操作を行うと、メッシュが潰れたり伸びたりするなど、予期せぬ結果がゲームに現れます。たとえば、メッシュの脚をスケルトンで定義されているよりも短く設定した場合、補正のためスケルトンの脚のボーンが移動します。その結果、このキャラクタの脚は、他のキャラクタの脚の長さと合わせるため、ゲーム内では伸びているように見えます。この機能のおかげで、ゲームのキャラクタの設定時に、すべてのピースが適切に結合されていることになります。メッシュをスケルトンに適切にフィットさせるには、必要に応じて関節を回転させ、なるべくスケルトンに近づけてから、メッシュを修正してフィットさせます。プロポーションの異なるキャラクタを作成するには新しいマスタースケルトンが必要となります。さらに、プロポーションが既存のキャラクタと大きく異なる場合には、そのキャラクタ独自のアニメーションが必要となるかもしれません。これについては、本ドキュメントでは省略します。

以下のメッシュを例にとって説明します。これは、男性のスケルトンとしてモデリングされています。主要な関節と身体部位はすべてスケルトンと正確に並んでいるため、大きな調整は必要ありません。これにより、メッシュをスケルトンに付加する作業が大幅に簡素化されます。

「UT3_Male.max」ファイルのボーンを統合し、不要なボーンを削除してから、メッシュをスケルトンに付加します。この場合、メッシュには追加の部位や「たるみ」がないため、付加時には必要最低限のものだけがスケルトンに残ります (追加の部位やたるみが存在する場合には、追加のボーンが必要となります)。

Male_Bones.jpg

エクスポート


次に、キャラクタをエンジンにエクスポートします。骨格メッシュは 3D アプリケーションからエクスポートされます。そのためには、 <! -- Epicが提供している ActorX エクスポータプラグイン、または --> アプリケーションに内蔵されている FBX エクスポータを使用します。 さらに、次のページのガイドに従います。( FBX ファイル形式を使用してメッシュを骨格メッシュにエクスポートします )。

インポート


「Unreal」エディタを開き、 コンテンツブラウザ を開きます。さらに、次のページのガイドに従います。( FBX ファイル形式を使用して骨格メッシュをインポートします? )。 メッシュのインポートが完了したら、パッケージを以下のディレクトリに保存します。

[YourUDKInstallationDirectory]\UDKGame\Content\Characters

ソケットをメッシュに追加


ソケットとは、スケルタルメッシュ上でユーザーが定義するポイントです。これらは、いずれのスケルタルメッシュにも追加できます。UDK ではソケットを使用して、「このポイントからパーティクルを放出する」、「このポイントに武器の装着する」など、さまざまな設定ができます。キャラクタをゲーム内で適切に機能させるためには、ソケットを各メッシュに追加する必要があります。ソケットを追加するには、[Content Browser] (コンテントブラウザ)ウィンドウで、ソケットを追加したいスケルタルメッシュをダブルクリックします。[skeletal mesh/animation set editor (AnimSet Editor)] (スケルタルメッシュ/アニメーションセットエディタ) ウィンドウが開きます。[Socket Manager] (ソケットマネージャー)アイコンをクリックするか、[Mesh] (メッシュ) メニューから [Socket Manager] (ソケットマネージャー) を選択して、[Socket Manager] (ソケットマネージャー)ウィンドウを開きます。

SocketManager.jpg

ソケットを作成するには、[New Socket] (新規ソケット)を選択し、ソケットをどのボーンに付加させるかを選択してから、このソケットに名前を付けます。

UDK に同梱の UTGame キャラクタには、カスタムキャラクタを現在のコードベースで機能させるために必要な、特定のソケットが割り当てられています。独自のキャラクタを投入して、これを追加のコードなしに適切に機能させたい場合には、少なくとも以下のソケットをメッシュに付加する必要があります。

Socket Name Bone Name
WeaponPoint b_RightWeapon
DualWeaponPoint b_LeftWeapon
L_JB b_LeftAnkle
R_JB b_RightAnkle
HeadShotGoreSocket b_Neck

キャラクタの足やブーツには、ジャンプブーツの使用時にパーティクルを放出するためのソケットが 2 つ必要です。これらのソケット名は、「L_JB」(左足)と「R_JB」(右足)となります。たとえば、「L_JB」ソケットを追加するには、[New Socket] (新規ソケット)を選択し、ボーン「b_LeftAnkle」を選択してから、このソケットに「L_JB」と名前を入力します。

ソケットは、メッシュに対して適切に位置するよう、平行移動・回転させることができます。作成時には、ソケットは距骨 (足首) の基点に表示されます。しかし、パーティクルは足の底から放出されるように設定する必要があります。[Socket Manager] (ソケットマネージャー) ウィンドウでは、最初の 2 つのアイコンを使用してソケットを平行移動および回転させます。ソケットの平行移動を有効にしてから、ソケットを足の底へ移動させます。パーティクルが適切な方向へと放出されるよう、またはオブジェクトが適切な向きで付加されるよう、ソケットの回転が必要となる場合もあります。ゲームに同梱されている、もう 1 つのスケルタルメッシュの [Socket Manager] (ソケットマネージャー) ウィンドウを開けば、ソケットをどこに、どのように配置すべきかについて把握できます。

SocketTransform.jpg

ソケットに関する詳細については、 このページ を参照してください。

既存の UDK キャラクターからソケットを素早くコピーする

パッケージに保存されている既存の他骨格メッシュと同じ骨格リグを自身の骨格メッシュの中で使用している場合は、ソケットをわざわざ新たに作成しなくても素早くコピーすることができます。たとえば、CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode として保存されている骨格メッシュを開きます。[Socket Manager] (ソケットマネージャー) を開き、[Copy Sockets] (ソケットをコピーする) ボタンをクリックします。

CopySockets.jpg

次に、自身の骨格メッシュを開きます。[Socket Manager] (ソケットマネージャー) を開き、[Paste Sockets] (ソケットをペーストする) ボタンをクリックします。

PasteSockets.jpg

ゲームで使用できるようキャラクタを設定


UDK 構成の最後の手順では、新規キャラクタを実際に使用します。このプロセスでは、UnrealScript に突入して新しいクラス ( UTFamilyInfo のサブクラス) を 1 つ作成するほか、既存のクラス ( UTPlayerReplicationInfo ) を 1 つ修正する必要があります。UDK では、プレイアブルな完全カスタムキャラクタの作成において多彩な処理が可能ですが、これらについては本ドキュメントでは省略します。ここでは、キャラクタを機能させるために必要なものにのみ焦点を当てます。

UTFamilyInfo サブクラス

基本的に、 UTFamilyInfo クラスは、パーティクルキャラクタやキャラクタのグループに対して、どのメッシュ、物理アセット、アニメーションセット、マテリアル、ジブなどを使用するかを定めた、プロパティのコンテナとして機能します。このクラスには他の機能もいくつか含まれていますが、本ドキュメントでは、キャラクタを UDK に投入するために必要なプロパティを設定する場所と理解してください。

ここでは、サブクラスを 1 つ作成して、これを 1 体のキャラクタに対してのみ使用します。理論的には、クラスが UTFamilyInfo からサブクラスへと分岐するようなクラス階層を作成することで、何らかの共通点のあるキャラクタのグループに対して汎用プロパティを定義することも可能です。例えば、外見に関して共通のテーマが適用されているキャラクタのグループがあるとします。これらのキャラクタは、同じファクションに属していると見なされます。次に、この新しいクラスに対して複数のサブクラスを作成します。個々のサブクラスを上記ファクションに属する特定のキャラクタに割り当てることで、このキャラクタがファクション内でどのファミリに属しているか設定するなど、さらなる分類が可能です。

続行するには、キャラクタに割り当てられたクラスに対して、新しいサブクラスを作成する必要があります。

UTFamilyInfo_SpaceMarine.uc
Class UTFamilyInfo_SpaceMarine extends UTFamilyInfo
   abstract;

defaultproperties
{
}

デフォルトのプロパティによって、このクラスがブロックされています。カスタムキャラクタを作成するには、プロパティを設定するか、既存のプロパティを無効にしてください。新規「 UTFamilyInfo 」クラスの中でもっとも重要なのは、 CharacterMesh プロパティです。ご想像のとおり、このプロパティは以前にインポートしたスケルタルメッシュを参照しています。この例では、以下のようになります。

CharacterMesh=SkeletalMesh'UDNCharacters.SpaceMarine'

独自のカスタムアセットが参照されるよう、そのまま進み、プロパティの設定を続行します。重要なプロパティの一部を以下に記します。

  • Faction - このキャラクタまたはキャラクタのグループが属している、グループ全体の名前です。
  • FamilyID - このキャラクタが属しているファミリの名前です。
  • CharacterTeamBodyMaterials - これは、チームゲームにおいて、キャラクタの身体マテリアルとして使用するマテリアルのアレイです。0 インデックスは赤、1 インデックスは青です。
  • CharacterTeamHeadMaterials - これは、チームゲームにおいて、キャラクタの頭部マテリアルとして使用するマテリアルのアレイです。0 インデックスは赤、1 インデックスは青です。
  • PhysicsAsset - これは、キャラクタのスケルタルメッシュ用に作成された物理アセットを参照します。
  • AnimSets - これは、キャラクタに使用するアニメーションセット (AnimSets) のアレイです。
  • ArmMeshPackageName - このキャラクタのファーストパーソン腕メッシュが含まれる、パッケージの名前です。
  • ArmMesh - これは、このキャラクタのファーストパーソン腕メッシュを参照します。
  • ArmSkinPackageName - ファーストパーソン腕メッシュのマテリアルが含まれる、パッケージの名前です。
  • RedArmMaterial - これは、ファーストパーソン腕メッシュの赤いチームマテリアルを参照します。
  • BlueArmMaterial - これは、ファーストパーソン腕メッシュの青いチームマテリアルを参照します。

当然ながら、UTFamilyInfo.uc スクリプトでは、これ以外にもたくさんのプロパティを設定できます (ほとんどの場合、説明が表示されます)。

キャラクタのプロパティを設定したら、以下のディレクトリに保存します。

[YourUDKInstallationDirectory]/Development/Src/UTGame

UTPlayerReplicationInfo クラス

次に、UDK に対して、現在デフォルトとなっているクラスではなく、新しいクラスを使用するよう命令します。これは、デフォルトのプロパティブロックにある「 UTPlayerReplicationInfo.uc 」ファイルで実行できます。最後のラインは以下のようになっているはずです。

CharClassInfo=class'UTGame.UTFamilyInfo_Liandri_Male'

ここで必要なのは、クラスを修正して、新規作成した「 UTFamilyInfo 」を参照することだけです。この例では、ラインが以下のようになります。

CharClassInfo=class'UTGame.UTFamilyInfo_SpaceMarine'

UTPlayerReplicationInfo.uc 」スクリプトを保存してから、スクリプトを再ビルドします。コンパイラがエラーを返さなければ、新規キャラクタをゲームに投入してテストできます。

character.jpg