화면위 표지 추가하기

반응형

상위 링크 : http://udn.epicgames.com/Three/DevelopmentKitGemsKR.html
참조 링크 : http://udn.epicgames.com/Three/DevelopmentKitGemsAddingOnScreenIndicatorsKR.html

goal : 팀 모드에서 각 팀원들의 위치를 레이더로 표시하자.

필요한 리소스들. : texture, material.

사용한 리소스들이 있는 패키지. C:\UDK\UDK-2011-07\UDKGame\Content\TestPackages\MasteringUnreal에 넣어뒀음.

 

프로젝트 소스 :


 

 

텍스쳐의 각 채널은 아래와 같다.

 

1 : diffuse
2 : 가운데 아이콘을 넣기 위한 불투명 마스크
3 : 그림자를 만들기 위한 마스크
4 : 불투명도 마스크

이 텍스쳐를 가지고 아래와 같은 머터리얼을 만든다.



이제 이 머터리얼을 사용해서 게임상에 표시를 할 것이다.
이 머터리얼을 레드팀과 블루팀에 다 쓰기 위해 머터리얼 인스턴스가 필요하다.
머터리얼 셋팅을 보면 param값으로 설정된 값들이 있다.
이들을 조절해서 사용할 것이다.

필요한건 HUD!!!
UTTeamHUD라는 것이 있는데 이는 HUD를 상속받아 몇몇가지 속성이 추가된 녀석이다.

우선 레이더 정보를 담기 위해 구조체를 하나 만든다.
struct SRaderInfo
{
 var UTPawn      UTPawn;         // 레이더가 가르키는 폰 참조.
 var MaterialInstanceConstant    MaterialInstanceConstant;   // 레이더의 머터리얼 인스턴스
 var bool        DeleteMe;       // 삭제
 var Vector2D    Offset;         // 화면위 레이더 오프셋
 var float       Opacity;        // 레이더 불투명도.
};
var array<SRaderInfo> RadarInfo;

머터리얼 인스턴스를 만드는 부분.
RadarInfo[i].MaterialInstanceConstant = new () class'MaterialInstanceConstant';

부모 머터리얼을 설정해 주는 부분.
RadarInfo[i].MaterialInstanceConstant.SetParent(Material'GemOnscreenRadarContent.PointerMaterial');
가장 위에 있는 사진을 보면 GemOnscreenRadarContent라는 패키지에 PointerMaterial이라는 재질이 들어있는걸 볼 수 있다.

팀 색상 지정
TeamLinearColor = (UTPawn.PlayerReplicationInfo.Team.TeamIndex == 0) ? Default.RedLinearColor : Default.BlueLinearColor;
RadarInfo[i].MaterialInstanceConstant.SetVectorParameterValue('TeamColor', TeamLinearColor);
머터리얼에 보면 TeamColor이라는 이름으로 Param값이 설정되어 있다. 이를 지정해 주는 부분.

팀 색상과 마찬가지로 미리 설정돼어 있는 Param에 원하는 값을 설정해 준다.
RadarInfo[i].MaterialInstanceConstant.SetScalarParameterValue('Opacity', RadarInfo[i].Opacity);
RadarInfo[i].MaterialInstanceConstant.SetScalarParameterValue('Rotation',
                                                              GetAngle(ActualPointerLocation, ScreenHUDLocation));

마지막으로 렌더링할 곳 지정해 주고 렌더링 하면 완료~!!!.
Canvas.SetPos(ActualPointerLocation.X - (PointerSize * 0.5f), ActualPointerLocation.Y - (PointerSize * 0.5f));
Canvas.DrawMaterialTile(RadarInfo[i].MaterialInstanceConstant, PointerSize, PointerSize, 0.f, 0.f, 1.f, 1.f);


TAGS.

Comments