UDN
Search public documentation:

MyFirstHUDJP
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

はじめての HUD

2226 ビルドのために2003年11月18日にChris Linder (DemiurgeStudios)により作成。Chris Linder (DemiurgeStudios)により最後に更新。v3323 の小さな更新のためMichiel Hendriksにより最後に更新。

関連文書

はじめてのポーン, はじめてのコントローラ, はじめての GameInfo, はじめてのコード,, HeadsUpDisplayReferenceJP?(ヘッドアップ表示リファレンス), CanvasReferenceJP?(キャンバス リファレンス)

はじめに

はじめてのコード文書をまだお読みでないなら、まず読む必要があります。

本書は、何回アヴァターが「ダンスした」かを報告する簡単なヘッドアップ表示の作成の仕方を取り扱います(詳細は、はじめてのコントローラを参照してください)。この例では、この目的を達成するために2つのクラスを使用します。最初のクラスであるExampleHUD.ucは、HUD.ucの拡張で、右下隅にアヴァターがダンスした回数を表示します。2つ目のクラスであるExampleScoreboard.uc は、ScoreBoard.uc の拡張で、[F1] を押したときにHUDの代わりに使用されます。スコア ボードには、現在のゲームの参加者すべての名前とスコアか、または少なくともスクリーン上で適合するものが表示されます。

HUD の例

上記のように、ExampleHUD では、アヴァターがダンスした回数が右下隅に表示されます。アヴァターがダンスした回数は、プレーヤ用のPlayerReplicationInfo のスコア変数に保存されます。(詳細は、はじめてのコントローラ文書を参照してください。)

より古いビルド(2226)では、HUDに描くことができるようになる前にまずする必要があることは、PlayerReplicationInfo を得ることです。以下のコードには、PlayerReplicationInfo を安全に得る方法が示されています。3323 およびそれ以降では、これは、基本クラスで実行されます。

var PlayerController PlayerOwner;
...


simulated function PostBeginPlay()
{
   Super.PostBeginPlay();
   PlayerOwner = PlayerController(Owner);
}


function DrawHUD(canvas Canvas)
{
   local Pawn PawnOwner;
   local PlayerReplicationInfo PawnOwnerPRI;
   ...

   // Get PlayerOwner
    if (PlayerOwner.ViewTarget == PlayerOwner)
   {
      PawnOwner = PlayerOwner.Pawn;
   }
   else if (PlayerOwner.ViewTarget.IsA('Pawn') && Pawn(PlayerOwner.ViewTarget).Controller != None)
   {
      PawnOwner = Pawn(PlayerOwner.ViewTarget);
   }
   else if ( PlayerOwner.Pawn != None )
   {
      PawnOwner = PlayerOwner.Pawn;
   }
   else
   {
      PawnOwner = None;
   }

   // Get PlayerReplication
   if ((PawnOwner != None) && (PawnOwner.Controller != None))
      PawnOwnerPRI = PawnOwner.PlayerReplicationInfo;
   else
      PawnOwnerPRI = PlayerOwner.PlayerReplicationInfo;

   ...
}

PlayerReplicationInfo を入手したら、PawnOwnerPRI.Score にアクセスして、このプレーヤのスコアを得ることができます。

 HUDに描くことができるようになる前にする必要がある次のことは、使用するフォントを選ぶことです。Unreal のフォントは扱いにくいものです。というのは、拡大縮小せず、そのためスクリーンの解像度に基づいて希望するフォントを選ぶ必要があるからです。詳細は、HeadsUpDisplayReference?(ヘッドアップ表示リファレンス)とFontTutorial?(フォントチュートリアル)を参照してください。FontArrayNames アレイで指定されたフォントは、降順でソートされています。したがって、小さな数字の指数の方が大きいフォントになります。フォントは、所定の指数でフォントを返す、静的関数である Font LoadFontStatic(int i) 関数でアクセスされます。以下のコード ブロックに、適切なフォント サイズの選び方が示されています。

function DrawHUD(canvas Canvas)
{
   ...

   //Get Font Size - (larger numbers are smaller fonts)
   if ( Canvas.ClipX <= 640 )
      FontSize=4;
   else if ( Canvas.ClipX <= 800 )
      FontSize=3;
   else if ( Canvas.ClipX <= 1024 )
      FontSize=2;
   else if ( Canvas.ClipX <= 1280 )
      FontSize=1;
   else if ( Canvas.ClipX <= 1600 )
      FontSize=0;
   else
      FontSize=0;
   Canvas.Font = LoadFontStatic(FontSize);

   ...
}

defaultproperties
{
   ...

   FontArrayNames(0)="ExampleFonts_T.ExampleFont38"
   FontArrayNames(1)="ExampleFonts_T.ExampleFont38"
   FontArrayNames(2)="ExampleFonts_T.ExampleFont34"
   FontArrayNames(3)="ExampleFonts_T.ExampleFont30"
   FontArrayNames(4)="ExampleFonts_T.ExampleFont26"
   FontArrayNames(5)="ExampleFonts_T.ExampleFont22"
   FontArrayNames(6)="ExampleFonts_T.ExampleFont18"
   FontArrayNames(7)="ExampleFonts_T.ExampleFont14"
   FontArrayNames(8)="ExampleFonts_T.ExampleFont10"

   ...
}

これで、スコアとフォントが手に入り、HUD上に何かを実際に描く準備ができました。以下のコード ブロックによって、現在の解像度に基づいたスケールで右下隅にテクスチャが描かれ、次にテクスチャの上部に現在のスコアが描かれます。スコアのテキストは、StrLen 関数を使用してマニュアル操作で正しく調整されます。HUDに描くために以下で使用される関数についての詳細は、CanvasReference(キャンバス リファレンス)文書を参照してください。

function DrawHUD(canvas Canvas)
{
   ...

   // Draw Hud

   Canvas.SetDrawColor(255,255,255);
   HUDScoreScaleX = Canvas.ClipX/800;
   HUDScoreScaleY = Canvas.ClipY/600;
   HUDScorePosX = Canvas.ClipX - 256*HUDScoreScaleX;
   HUDScorePosY = Canvas.ClipY - 128*HUDScoreScaleY;
   Canvas.SetPos(HUDScorePosX, HUDScorePosY);
   Canvas.DrawTileScaled(HUDScoreBox, HUDScoreScaleX, HUDScoreScaleY);

   Canvas.SetDrawColor(230,240,240);
   Score = PawnOwnerPRI.Score;
   ScoreString = ""$Score;
   Canvas.StrLen(ScoreString,XL,YL);
   Canvas.SetPos(HUDScorePosX + 235*HUDScoreScaleX - XL, HUDScorePosY + 70*HUDScoreScaleY);
   Canvas.DrawText(Score);
}

スコアボードの例

スコアボードは、ScoreBoard.uc などで定義されるGRI.PRIArray にアクセスすることによって機能します。

var() GameReplicationInfo GRI;

GameReplicationInfo クラスでは、PRIArray が次のように定義されます。

var() array PRIArray;

PRIArray には、ゲームのすべてのプレーヤについてのプレーヤ レプリケーション情報が含まれます。このアレイによって、スコアボードに表示するためのすべてのプレーヤの名前やスコアを得ることができます。

スコアボードを実際に描くことは、比較的簡単ですが、描くものがたくさんあるのでコードは少し長くなります。コードは良く文書化されており、UnrealScript ファイルであるExampleScoreboard.ucを調べることが、何が進行中かを理解するための最良の方法です。HUDに描くために以下で使用される関数についての詳細は、HeadsUpDisplayReference?(ヘッドアップ表示リファレンス)およびCanvasReference?(キャンバス リファレンス)を参照してください。