PlayFab에서 클라우드 스크립트는 자바스크립트만 작성할 수 있기 때문에 Unity를 하던 저에겐 부담스러운 일이었습니다.
그러나 C#을 사용하고 디버그까지 할 수 있는 쉬운 방법이 있어 정리하게 되었습니다.
기본 준비물
- PlayFab 계정 및 타이틀
- Visual Studio Code (글에서는 1.85.1 사용)
- Unity
목차
- Azure 계정 등록 및 구독
- Visual Studio Code 확장 및 설정
- 테스트 코드 작성
- Azure 함수 등록 및 PlayFab 연결
- 테스트
1. Azure 계정 등록 및 구독
Azure에 로그인 후 체험판 등록
Microsoft Azure(클릭)에 접속합니다.
무료로 시작하기
클릭로그인 해줍니다.
기본 정보 작성
카드 정보 작성
Azure 구독
체험판을 등록하면 구독이 자동으로 생성되어 있을겁니다.
만약 생성이 안됐다면 여기를 클릭하여
구독 만들기
를 참고하고 생성해주세요.
2. Visual Studio Code 확장
.Net 6 설치
.Net 6에 접속하여 설치해줍니다.
cmd
를 켜서dotnet
을 입력하여 작동되는지 확인
VSCode 필수 확장
로컬 프로젝트 생성
먼저 원하는 위치에 폴더를 생성하고
VSCode
로 열어줍니다.좌측 탭에서
Azure
를 클릭합니다. (단축키 : Shift + Alt + A)하단
WORKSPACE
에 커서를 가져가면번개모양 Icon
이 보이는데 그걸 클릭!Create New Project
클릭 후 다음과 같이 진행해 주세요.폴더 선택
C#
.NET 6.0
HTTP trigger
기본으로 생성될 함수 이름인데
HelloWorld
라고 지어줍시다.C# namespace 이름입니다. 원하는대로 적어주세요.
권한 부분입니다. 저는
Anonymous
로 진행했습니다. (권한의 자세한 내용[클릭])WORKPACE
에 로컬 프로젝트가 생성되었는지 확인!
VSCode에 Terminal을 열고
dotnet add package PlayFabAllSDK
을 실행해줍니다.마지막으로 CS2AFHelperClasses.cs(CS2AFHelperClasses Container) 소스코드를 다운로드하여 폴더에 넣어줍니다.
Azure 로그인 및 Function 생성
좌측 탭에서
Azure
를 클릭합니다. (단축키 : Shift + Alt + A)상단
RESOURCES
에서 로그인을 진행합니다.구독(열쇠 모양)에 우클릭 후
Create Resource
->Create Function App in Azure
순서로 클릭!함수 이름 작성 ->
.Net 6
->Korea Central
선택리소스 그룹과 함께
Function
,Storage
가 생성됐는지 확인!
3. 테스트 코드 작성
클라이언트(Unity) 측 구현
클라이언트에서 Azure 함수를 호출하는 코드를 구현합니다.
PlayFab에 로그인한 사용자는 Azure의 HelloWorld 함수를 실행하여 inputValue 인수 이름에 Test 문자열을 넣어 함수를 호출합니다.
클라이언트 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.CloudScriptModels;
using UnityEngine;
public void Login()
{
// TODO : PlayFab 로그인 먼저 진행
CallCSharpExecuteFunction();
}
// Azure 함수 호출
private void CallCSharpExecuteFunction()
{
// Azure 함수 실행
PlayFabCloudScriptAPI.ExecuteFunction(new ExecuteFunctionRequest()
{
Entity = new PlayFab.CloudScriptModels.EntityKey()
{
// 로그인할 때부터 가져오기 ( Id, Type )
Id = PlayFabSettings.staticPlayer.EntityId,
Type = PlayFabSettings.staticPlayer.EntityType
},
FunctionName = "HelloWorld", // Azure 함수의 이름
FunctionParameter = new Dictionary<string, object>() { { "inputValue", "Test" } },
GeneratePlayStreamEvent = true
},
CallSuccess, CallError);
}
// 성공 시
private void CallSuccess(ExecuteFunctionResult result)
{
if (result.FunctionResultTooLarge != null && (bool)result.FunctionResultTooLarge)
{
Debug.Log("This can happen if you exceed the limit that can be returned from an Azure Function," +
" See PlayFab Limits Page for details.");
return;
}
Debug.Log($"The {result.FunctionName} function took {result.ExecutionTimeMilliseconds} to complete");
Debug.Log($"Result: {result.FunctionResult.ToString()}");
}
// 실패 시
private void CallError(PlayFabError error)
{
Debug.Log($"Opps Something went wrong: {error.GenerateErrorReport()}");
}
서버(Azure Functions) 측 구현
Azure 함수에 등록할 코드를 구현합니다.
HelloWorld라는 Azure Function을 실행하고, 인수로 받은 inputValue를 기록하고, 플레이어 ID를 반환 값으로 반환합니다
서버 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[FunctionName("HelloWorld")]
public static async Task<dynamic> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
string body = await req.ReadAsStringAsync();
var context = JsonConvert.DeserializeObject<FunctionExecutionContext<dynamic>>(body);
var args = context.FunctionArgument;
var message = $"Hello {context.CallerEntityProfile.Lineage.MasterPlayerAccountId}!";
log.LogInformation(message);
dynamic inputValue = null;
if (args != null && args["inputValue"] != null)
{
inputValue = args["inputValue"];
}
log.LogDebug($"HelloWorld: {new { input = inputValue } }");
return new { messageValue = message };
}
4. Azure 함수 등록 및 PlayFab 연결
Azure에 HelloWorld 서버 코드 등록
좌측 탭에서
Azure
를 클릭합니다. (단축키 : Shift + Alt + A)하단
WORKSPACE
에 방금 작성한 HelloWorld 서버 코드 파일이 존재하는지 확인합니다. 만약 없으면 폴더안에 파일이 있는지, 저장되어 있는지 확인하세요.WORKSPACE
칸에 마우스 커서를 대고번개모양 Icon
을 누르고Deploy to Function App
를 클릭합니다.로딩이 완료되면 상단
RESOURCES
의Functions
에 등록되는 것을 확인합니다.
Azure 함수 PlayFab에 연결
방금 등록한 함수에 우클릭하고
Copy Function URL
을 클릭하여 복사합니다.좌측 탭에서
PlayFab Explorer
를 클릭합니다.로그인 진행
함수를 등록하고 싶은 타이틀을 우클릭하고
Register HTTP function
을 클릭합니다.방금 복사한 URL을 붙여넣기 해주세요.
5. 테스트
Unity를 실행하고 코드를 실행해줍니다.
다음과 같이 Debug되면 연결 성공!
- The
<함수 이름>
function took<시간>
to complete - Result: Hello
<플레이팹 Id>
- The
❓ 비용이 걱정된다면
Azure를 사용하다보면 Storage
부분에서 비용이 발생하는 것을 알 수 있습니다.
12개월 체험판 제품 중 Storage
가 포함되어 있어 비용이 발생하더라도 무료로 사용이 가능합니다.
12개월이 지나더라도 Microsoft에서 서비스를 계속 진행할 것인지 알려주기 때문에 기간이 지나면 딱 끝나고 추가 결제는 안된다고 합니다.