이전 섹션에서는 C++ 내려보기 템플릿을 참고해서 일반적인 RPG처럼 마우스 클릭을 통해 캐릭터를 이동시키는 방법을 구현해보고 코드를 분석해본다.
프로젝트 세팅
RpgProject 라는 이름으로 새 프로젝트를 하나 만든다.
RpgProject를 생성한 뒤에는 내려보기 템플릿으로도 새 프로젝트를 하나 만드는데, 이것은 캐릭터의 메시와 애니메이션을 가져오기 위함이다.
제일 먼저 할 일은 내려보기 프로젝트에서 캐릭터의 메시와 애니메이션을 가져올 것이다. 방금 만든 내려보기 프로젝트의 콘텐츠 패널의 콘텐츠 폴더 하위에 Mannequin 폴더가 보일 것이다. 이 안에 캐릭터의 메시와 애니메이션이 들어있다. 이 폴더의 내용물들을 RpgProject로 옮겨야 한다. 이렇게 프로젝트에 포함된 애셋들을 다른 프로젝트로 옮기는 작업을 이주(Migrate)라고 한다. 직접 파일을 옮기지 않아도 언리얼 엔진에서는 이것을 도와주는 기능을 제공한다.
Mannequin 폴더에 우클릭을 하고, 이주... 를 선택한다. 애셋 리포트 창이 뜨면 리스트를 체크하고 확인 버튼을 누른다.
그 다음 대상 콘텐츠 폴더 선택 대화상자가 열리면 RpgProject 프로젝트의 Content 폴더를 찾아서 폴더 선택을 한다.
이주 작업이 끝난 뒤에 RpgProject로 가서 콘텐츠 브라우저 패널을 확인하면 내려보기 프로젝트에 있던 Mannequin 폴더와 그 안의 애셋들이 RpgProject에 성공적으로 옮겨진 것을 확인할 수 있다.
캐릭터의 메시와 애니메이션을 모두 이주시켰으면 그 다음은, 비주얼 스튜티오를 열고 솔루션 탐색기에서 RpgProject.Build.cs를 찾아서 소스파일을 연다.
Build.cs에서는 게임을 개발하면서 사용할 모듈을 추가하거나 뺄 수 있는데, 여기서는 두 가지 모듈을 추가할 것이다. 아래의 예시 코드와 같이 PublicDependencyModuleNames에 "NavigationSystem"과 "AIModule"을 추가해주자. NavigationSystem 모듈은 네비게이션 메시와 관련된 기능에 도움을 주는 모듈이고 AIModule 은 이름 그대로 AI 기능에 관련된 모듈이다. 클릭된 위치로 캐릭터를 이동시킬 때, 처리하는 코드를 일일이 만드는 대신, 이 두 모듈의 기능의 도움으로 내비게이션된 경로를 따라서 움직이도록 만들 예정이다.
if (Distance > 120.0f) { UAIBlueprintHelperLibrary::SimpleMoveToLocation(this, DestLocation); } } }
이 함수에서는 우선 컨트롤러가 소유하고 있는 폰을 가져와서 폰과 목적지 사이의 거리를 측정해서, 그 거리가 120 언리얼 유닛보다 크면 폰을 목적지로 이동시킨다. UAIBlueprintHelperLibrary클래스의 SimpleMoveToLocation() 함수는 프로그래머가 목적지로 폰을 이동시키기 위한 처리를 하는 모든 코드를 일일이 작성하는 대신에 간단한 함수 호출로 그 모든 일을 할 수 있도록 도와준다. 아까 전 프로젝트 세팅 단계에 모듈을 추가한 것은 이 기능을 사용하기 위해서 였다.
이 코드는 캐릭터의 무브먼트를 규정하는 코드로, 캐릭터를 이동시키기 전에 이동 방향과 현재 캐릭터의 방향이 다르면 캐릭터를 이동 방향으로 초당 640도의 회전 속도로 회전시킨다음 이동시킨다. 그리고 캐릭터의 이동을 평면으로 제한하고, 시작할 때 캐릭터의 위치가 평면을 벗어난 상태라면 가까운 평면으로 붙여서 시작되도록 한다. 여기서 평면이란 내비게이션 메시를 의미한다.
이 항목에서는 .NET용 AWS SDK 버전 3의 변경 사항과 이 버전의 SDK로 코드를 마이그레이션하는 방법에 대해 설명한다.
.NET 버전용 AWS SDK 정보
2009년 11월에 처음 출시된 .NET용 AWS SDK는 .NET Framework 2.0용으로 설계되었다.이 릴리스 이후 .NET은 .NET Framework 4.0 및 .NET Framework 4.5로 개선되었으며 새로운 대상 플랫폼인 WinRT 및 Windows Phone이 추가되었다.
.NET 버전 2의 AWS SDK는 .NET 플랫폼의 새로운 기능을 활용하고 WinRT 및 Windows Phone을 대상으로 업데이트되었다.
.NET 버전 3용 AWS SDK가 어셈블리가 모듈화되도록 업데이트되었다.
SDK를 위한 아키텍처 재설계
.NET용 AWS SDK의 전체 버전 3은 모듈형으로 재설계되었다. 각 서비스는 이제 하나의 전역 어셈블리가 아닌 자체 어셈블리로 구현된다. 더 이상 .NET 용 AWS SDK 전체를 응용 프로그램에 추가할 필요없다. 이제 응용 프로그램에서 사용하는 AWS 서비스에 대해서만 어셈블리를 추가 할 수 있다.
변경 사항 요약
다음 섹션에서는 .NET용 AWS SDK 버전 3의 변경 사항에 대해 설명한다.
AWSClientFactory 제거
Amazon.AWSClientFactory 클래스가 제거되었다.이제 서비스 클라이언트를 만들려면 서비스 클라이언트의 생성자를 사용해야 한다.예를 들어, AmazonEC2Client를 작성하려면 다음의 작업을 수행해야 한다.
var ec2Client = new Amazon.EC2.AmazonEC2Client();
Amazon.Runtime.AssumeRoleAWSCredentials 제거
Amazon.Runtime.AssumeRoleAWSCredentials 클래스는 코어 네임 스페이스에 있었지만 AWS Security Token Service에 대한 종속성이 있고 SDK에서 사용되지 않으므로 제거되었다. 이 클래스를 대신해서 Amazon.SecurityToken.AssumeRoleAWSCredentials 클래스를 사용해야 한다.
SetACL 메서드가 S3Link에서 제거
S3Link 클래스는 Amazon.DynamoDBv2 패키지의 일부이며 Amazon S3에서 DynamoDB 항목의 참조인 객체를 저장하는 데 사용된다. 이것은 유용한 기능이지만 DynamoDB용 Amazon.S3 패키지에 대한 컴파일 종속성을 생성하고 싶지 않았기 때문에 S3Link 클래스에서 노출된 Amazon.S3 메서드를 단순화하여 SetACL 메서드를 MakeS3ObjectPublic 메서드로 대체했다. 객체에 대한 액세스 제어 목록(Access Control List, ACL)을 보다 효과적으로 제어하려면 Amazon.S3 패키지를 직접 사용해야 한다.
사용되지 않는 결과 클래스 제거(Removal of Obsolete Result Classes)
.NET 용 AWS SDK의 대부분의 서비스에서 작업은 요청 ID 및 결과 객체와 같은 작업에 대한 메타 데이터가 포함된 응답 객체를 반환한다. 별도의 응답 및 결과 클래스를 갖는 것이 중복되어 개발자를 위한 추가 타이핑(extra typing)을 만들었다. .NET 용 AWS SDK 버전 2에서는 결과 클래스의 모든 정보를 응답 클래스에 넣었고 결과 클래스를 사용하지 못하도록 폐기했다. .NET 용 AWS SDK 버전 3에서는 SDK의 크기를 줄이기 위해 이러한 쓸모없는 결과 클래스를 제거했다.
AWS 구성 섹션 변경(AWS Config Section Changes)
App.config 또는 Web.config 파일을 통해 .NET 용 AWS SDK의 고급 구성을 수행할 수 있다.SDK 어셈블리 이름을 참조하는 다음과 같은 <aws> config 섹션을 통해 이 작업을 수행할 수 있다.
.NET 용 AWS SDK 버전 3에서는 AWSSDK 어셈블리가 더 이상 존재하지 않고 공통 코드를 AWSSDK.Core 어셈블리에 넣었다. 따라서 다음과 같이 App.config 또는 Web.config 파일에서 AWSSDK 어셈블리에 대한 참조를 AWSSDK.Core 어셈블리로 변경해야 한다.