졸업작품 기획의 요구사항중에 "Steam ID로 접속하여 친구들과 플레이 한다."가 있었다.
이 시스템을 구현하기 위해서 먼저 Steam SDK를 사용하는 방법을 알아야 했는데,
언리얼에서 바로 써보기에는 언리얼의 컴파일 속도를 기다리기가 너무 싫어서 콘솔에 먼저 붙여보기로 했다.
먼저 스팀 SDK 사이트(https://partner.steamgames.com/doc/sdk)에 들어가서 스팀 SDK를 받고 압축을 풀면 아래와 같은 폴더들이 나온다.
여기서 중요한 폴더는 형광펜으로 칠한 public 폴더와 redistributable_bin 폴더!
public 폴더에는 sdk의 인터페이스가 들어있고, redistributable_bin 폴더에는 플랫폼별 lib와 dll 파일이 들어있다.
Steam SDK를 사용하기 위해서 public 폴더를 사용할 프로젝트 폴더에 옮겨주고, redistributable_bin 폴더의 dll과 lib도 프로젝트 폴더에 넣어주자!
그 다음 마지막으로 lib 파일을 임포트 해준다!
이러면 준비 끝!
SteamAPI를 초기화하는 코드를 작성해보았다.
#include "steam/public/steam/steam_api.h"
int main()
{
if (!SteamAPI_Init()) {
printf("Failed to init");
return 0;
}
Sleep(3000);
SteamAPI_Shutdown();
return 0;
}
steam_api를 인클루드하고, SteamAPI_Init()로 초기화, SteamAPI_Shutdown()으로 해제하는 간단한 예제이다.
결과는?
SteamAPI_Init 함수의 인터페이스에 보면 에러 메세지는 디버거의 output 또는 stderr로 볼 수 있다고 되어 있다.
그래서 Debug를 보면?
steam_appid.txt라는 파일에 appID를 만들어 줘야한다고 나와있다.
테스트용 앱 아이디(480)을 담은 텍스트를 만들고 다시 실행!
더이상 "Failed to init"가 발생하지 않고, 유저의 ID가 표시되면서 정상적으로 종료되는 모습을 볼 수 있었다!
#include "steam/public/steam/steam_api.h"
int main()
{
if (!SteamAPI_Init()) {
printf("Failed to init");
return 0;
}
printf("%d\n", SteamFriends()->GetFriendCount(k_EFriendFlagAll));
Sleep(3000);
SteamAPI_Shutdown();
return 0;
}
Steam SDK를 조금만 더 유의미하게 써보기 위해서 친구의 수를 알아오는 방법을 찾아서 써보았다.
테스트용 앱 이름(Spacewar)가 현재 플레이 중인 게임으로 뜨면서 나의 친구의 수를 알아오는데 성공하였다!
이런식으로 Steam SDK를 사용하여 현재 같은 게임을 하고 있는 친구들의 Steam ID(uint64)를 받아와서 친구들의 이름과 사진을 받는 함수를 사용하여 맨 처음과 같은 로비 시스템을 구현하는데 성공하였다.
하지만 이 Steam SDK는 사용이 간편한 만큼 한계가 있는데, 친구가 아닌 사람의 정보를 받을 수 없다는 것이다..
친구가 아닌 사람의 정보를 받기 위해서는 HTTP 프로토콜을 사용하는 Steam API를 사용해야하는데 이 API를 사용하려면 개발자 등록(돈내야함...)을 해야하므로 나는 Steam SDK로 만족하기로 했다. :)