Unityéçºè ã¯ãiOSãAndroidãªã©ã®ãã©ãããã©ãŒã ã§ã²ãŒã ã¹ããªãŒã ãšãµãŒãã¹ã管çããããšã«ãã§ã«æ £ããŠããŸãããã ããHuaweiã¢ãã€ã«ãµãŒãã¹ããšã³ã·ã¹ãã ã«ç»å ŽããåŸãHuaweiããã€ã¹ãæã£ãŠãããã¬ãŒã€ãŒã«ãªãŒããããå Žåã¯ãã²ãŒã ã®å¥ã®ããŒãžã§ã³ããµããŒãããå¿ èŠããããŸãã
ãã®èšäºã§ã¯ãæå°éã®åŽåã§1ã€ã®ã³ãŒãããŒã¹ã§è€æ°ã®Androidã¢ãã€ã«ãµãŒãã¹ãšHuaweiã¢ãã€ã«ãµãŒãã¹éã®äŸåé¢ä¿ã管çããæ¹æ³ã«ã€ããŠèª¬æããŸãã
å³1.ããŸããŸãªãã©ãããã©ãŒã ãšã¢ãã€ã«ãµãŒãã¹ã®ãµããŒãã®éãäž
ã®å³ã§ãããããã«ãHuaweiæºåž¯é»è©±ã¯Androidãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã䜿çšããŠãããããUnityãããžã§ã¯ãã¯ãã®äŒç€Ÿã®ããã€ã¹çšã«ãã«ããããšãã«ããã䜿çšããå¿ èŠããããŸãããã ããAndroidçšã«2ã€ã®ç°ãªãAPKãéçºããããHuaweiAppGalleryçšã«å¥ã®ããã±ãŒãžãéçºããå¿ èŠããããŸãã
ãããã®APKã®éãã¯äœã§ããïŒ
äœãããéèŠãªéãã¯ã¢ãã€ã«ãµãŒãã¹ã§ãããããã¯ãã¢ããªå è³Œå ¥ãåºåãã²ãŒã ãµãŒãã¹ãåæãªã©ã®ãµãŒãã¹ã§ããHuaweiã¢ãã€ã«ããã€ã¹ã§ã¯GMSã䜿çšã§ããŸããããã®ãããHuaweiAppGalleryãšGooglePlayã§ãªãªãŒã¹ããããã«2ã€ã®APKãäœæããå¿ èŠããããŸãã
2çªç®ã®åæ§ã«éèŠãªéãã¯ããã±ãŒãžåã§ããäž¡æ¹ã®ãšã³ã·ã¹ãã ã¯Androidã§å®è¡ããããããäžæŽåããªãŒããŒã©ã€ããåé¿ããããã«ãHuawei App Galleryã«ã¯ãããã±ãŒãžåã.huaweiãŸãã¯.HUAWEIã§çµããå¿ èŠããããšããã«ãŒã«ããããŸãããã®ã¢ãããŒãã¯ãHuaweiãã«ããä»ã®ãã¹ãŠã®Androidããã€ã¹ããåé¢ããããã«äœ¿çšãããŸãã
ãã ããå¿é ããªãã§ãã ããããããã®éãã¯1ã€ã®ã³ãŒãããŒã¹ã§åŠçã§ããŸãã
ãããã®åé¡ã解決ããã®ã«åœ¹ç«ã€2ã€ã®å°ããªããªãã¯ããããŸãã
1. #definesã«ã€ããŠèããããšããããŸããïŒ
å®çŸ©ã®ãããã§ããã«ãæãããã³åäžã®éçºç°å¢ã®ãããã§ããããŠã³ãŒãã£ã³ã°äžã«ã¹ã¬ãããå¶åŸ¡ã§ããŸãã
ç§ãã¡ã¯ã©ã®ã¹ããªãŒã ã«ã€ããŠè©±ããŠããã®ã§ããïŒ
GooglePlayãšHuaweiã®2çš®é¡ã®ã²ãŒã ãµãŒãã¹ãéçšããå¿ èŠããããšæ³åããŠã¿ãŠãã ããããããã®ã¢ããªã±ãŒã·ã§ã³ã1ã€ã®ã³ãŒãã§äœæããã«ã¯ãå®çŸ©ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãåé¢ã§ããŸããå°ããªäŸãèŠãŠã¿ãŸãããïŒ
internal static class GameServiceFactory
{
public static IGameServiceProvider CreateGameServiceProvider()
{
#if HMS_BUILD
return new HMSGameServiceProvider();
#else
return new GooglePlayGameServiceProvider();
#endif
}
}
ãHMS_BUILDãããŒã¯ãŒããå®çŸ©ãªã¹ãã«è¿œå ãããšãã²ãŒã ã¯HMSGameServiceProviderãåŒã³åºããŸãããã®ããã«ããŠã1ã€ã®ã³ãŒãã§ã¹ã¬ããã管çã§ããŸãã
以äžã®ã¹ã¯ãªããã䜿çšããŠãã¢ã»ã³ããªã®åã«å®çŸ©ãæäœã§ããŸãã DefineKeywordsã倿ŽããŠä¿åãããšãIDEã¯æå®ããããŒã¯ãŒãã«åŸã£ãŠã³ãŒããããŒãæŽæ°ããŸãã
public class ManageDefines : Editor
{
/// <summary>
/// Symbols that will be added to the editor
/// </summary>
public static readonly string [] DefineKeywords = new string[] {
//"TEST_VERSION",
"HMS_BUILD",
//"GMS_BUILD",
};
/// <summary>
/// Add define symbols as soon as Unity gets done compiling.
/// </summary>
static AddDefineSymbols ()
{
List<string> allDefines = new List<string>();
allDefines.AddRange ( DefineKeywords.Except ( allDefines ) );
PlayerSettings.SetScriptingDefineSymbolsForGroup (
EditorUserBuildSettings.selectedBuildTargetGroup,
string.Join ( ";", allDefines.ToArray () ) );
}
}
2.ãã«ãååŸã®ã¹ã¯ãªããïŒãã«ãåãšãã«ãåŸïŒ
ãããã£ãŠãåè¿°ã®ããã«ãHuaweiAppGalleryããŒãžã§ã³ã®ã²ãŒã ã®ããã±ãŒãžåã倿Žããå¿ èŠããããŸãã
ãã ããGoogle PlayãµãŒãã¹ãåæã«äœ¿çšããŠããå Žåããã¹ãŠã®æ§æã¯æ¢åã®ããã±ãŒãžåã«é¢é£ä»ãããã倿Žãããšæ§æã«åœ±é¿ããŸããããã«ããããã¢ãããŠã£ã³ããŠã®Unityãšãã£ã¿ãŒã¯ãããã±ãŒãžåãšã¢ãã€ã«ãµãŒãã¹ã®æ§æãç°ãªããããã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžåãä¿®æ£ããããã«èŠåããããšããããŸãããã®ãããã¢ãããäœåºŠãéããã®ã¯éåžžã«é¢åã§ãã
ãã®åé¡ã解決ãã2ã€ã®ç°ãªãããã±ãŒãžåãåæã«ç®¡çããããã«ãå®çŸ©ä»ãã®ãã«ãåããã³ãã«ãåŸã®ã¹ã¯ãªããã§åé¿çã䜿çšã§ããŸãã
ãã®ã³ãŒããèŠãŠãã ããïŒ
class MyCustomBuildProcessor : IPreprocessBuildWithReport, IPostprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPostprocessBuild(BuildReport report)
{
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "your.package.name");
}
public void OnPreprocessBuild(BuildReport report)
{
#if HMS_BUILD
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "your.package.name.huawei");
#elif GMS_BUILD
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "your.package.name");
#endif
}
}
ã芧ã®ãšããããã¹ãŠãã·ã³ãã«ã§ããå®çŸ©ã®å©ããåããŠãHMS_BUILDã®ãã¬ãã«ãäžã«ã®ã¿ããã±ãŒãžåã倿Žã§ããŸããæ¬¡ã«ããã«ãåŸãããã±ãŒãžåãå ã®ååã«æ»ãããšãã§ããŸãããããããšãUnityã¯ããã±ãŒãžåã®äžäžèŽã«ã€ããŠèŠåããªããªããŸãã
ããã§å šéšã§ããããã§ãHuaweiãšGooglePlayã®1ã€ã®ã³ãŒãã§åæã«ã²ãŒã ãéçºããæºåãæŽããŸããã
ã¢ããªã±ãŒã·ã§ã³éçºäŸ
ã²ãŒã ãµãŒãã¹ãã²ãŒã å è³Œå ¥ãåºåãªã©ãAndroidãšHuaweiã®åãã³ãŒãããŒã¹ã§ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããã
ããã¯åãªããã¢ã§ãããããåãµãŒãã¹ã®ãã¹ãŠã®æ©èœãå®è£ ããããã§ã¯ãããŸãããåæ©èœãèªåã§æ¡åŒµã§ããŸãã
ãµãŒãã¹ã¢ãžã¥ãŒã«ã®æ§é
å³2.ãµãŒãã¹ã¢ãžã¥ãŒã«ã®æäœã¹ããŒã ãµãŒãã¹
ããšã«ç¬èªã®ãã®ããããŸãã
- ãããŒãžã£ãŒïŒãã®ã¯ã©ã¹ã«ã¯ããµãŒãã¹ã®ã²ãŒã ããžãã¯ãå«ãŸããäžè¬çãªæ©èœã管çããŸããããŸããŸãªã²ãŒã ã§ãèŠä»¶ã«åãããŠãã®ã¯ã©ã¹ã倿Žããå¿ èŠãããå ŽåããããŸãã
- ãã¡ã¯ããªã¯ã©ã¹ïŒãã¡ã¯ããªïŒïŒãã®ã¯ã©ã¹ã«ã¯ããããã€ããŒãéžæããããã®ããžãã¯ãå«ãŸããŠããŸããç§ãã¡ã®ã¢ãããŒãã§ã¯ãå®çŸ©ã䜿çšããŸããããããã€ããŒã®éžæã¡ã«ããºã ã奜ã¿ã«åãããŠå€æŽã§ããŸãã
- ãããã€ããŒïŒãµãŒãã¹ããšã«ãç¬èªã®ãããã€ããŒãäœæããå¿ èŠããããŸãããããžã§ã¯ããšã¢ãã€ã«ãµãŒãã¹éã®ãã¹ãŠã®äŸåé¢ä¿ã¯ããã®ã¯ã©ã¹å ã«ãšã©ãŸãå¿ èŠããããŸãã
- ãããã€ããŒã€ã³ã¿ãŒãã§ã€ã¹ïŒããŸããŸãªã¢ãã€ã«ãµãŒãã¹ã®äœ¿çšãçµ±åããã«ã¯ãå ±éã®ãããã€ããŒãå¿ èŠã§ãããã®ç®çã®ããã«ããããã€ããŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæãããŸããã²ãŒã ã®èŠä»¶ã«åŸã£ãŠãã¢ãã€ã«ãµãŒãã¹ããã²ãŒã ã§äœ¿çšãããã¹ãŠã®ã¡ãœãããå®çŸ©ããå¿ èŠããããŸãã
å¿ èŠã«å¿ããŠã以äžãæå¹ã«ããããšãã§ããŸãã
- äžè¬çãªãšã³ãã£ãã£ïŒã²ãŒã ããäžéšã®ãµãŒãã¹ãæœè±¡åããã«ã¯ãäžè¬çãªãšã³ãã£ãã£ãå¿ èŠã«ãªãå ŽåããããŸãããããã€ããŒã¯ã©ã¹ã®ã¿ãžã®äŸåé¢ä¿ãç¶æããããã«ãèŠä»¶ã«åŸã£ãŠæ±çšãšã³ãã£ãã£ã䜿çšã§ããŸãã
- ãžã§ããªãã¯ãªã¹ããŒïŒãžã§ããªãã¯ãšã³ãã£ãã£ãšåæ§ã«ããžã§ããªãã¯ãªã¹ããŒãå¿ èŠãªå Žåã¯ãããããäœæããããšãã§ããŸãã
å³3.ã²ãŒã ãµãŒãã¹ã¢ãžã¥ãŒã«ã®æ§é
äŸæ¬¡ã«ãäŸãèŠãŠãèšäºã§èª¬æãããŠããæ¹æ³ã§äœãã§ããããçè§£ããŠã¿ãŸãããã
ã²ãŒã ããžãã¯ããã¢ãã€ã«ãµãŒãã¹ãæœè±¡åããããã«ããããŒãžã£ãŒã䜿çšããŸãããããŒãžã£ãŒã¯ããã¡ããªãã¯ãä»ããŠãããã€ããŒãšéä¿¡ããŸãããã®ããã«ããŠããã©ã°ã€ã³ãªã©ã®ãããã€ããŒã䜿çšã§ããŸããã¢ã¯ã»ã¹ãããã¡ãœãããå«ãå ±éã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããå¿ èŠããããŸãã
public interface IGameServiceProvider
{
void Init();
bool IsAuthenticated();
void SignOut();
void AuthenticateUser(Action<bool> callback = null);
void SendScore(int score, string boardId);
void ShowLeaderBoard(string boardId = "");
void ShowAchievements();
void UnlockAchievement(string key);
CommonAuthUser GetUserInfo();
}
次ã«ããµãŒãã¹ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãããããã€ããŒãå°ãªããšã1ã€å¿ èŠã§ããåè¿°ã®ããã«ãã²ãŒã ãšãµãŒãããŒãã£ã®ã¢ãã€ã«ãµãŒãã¹éã®ãã¹ãŠã®äŸåé¢ä¿ã¯ããã®ã¯ã©ã¹å ã«ãšã©ãŸãå¿ èŠããããŸããHuaweiãšGooglePlayã®2ã€ã®ãããã€ããŒãäœæããŸãããã
ããã«ããã€ãã®ã³ãŒãäŸããããŸããèšäºã®æåŸã«ããGitHubã®ãããžã§ã¯ãã§ããããèŠã€ããããšãã§ããŸãã
Huaweiã²ãŒã ãµãŒãã¹ãããã€ããŒ
public class HMSGameServiceProvider : IGameServiceProvider
{
private static string TAG = "HMSGameServiceProvider";
private HuaweiIdAuthService _authService;
private IRankingsClient _rankingClient;
private IAchievementsClient _achievementClient;
public AuthHuaweiId HuaweiId;
public CommonAuthUser commonAuthUser = null;
public void Init()
{
InitHuaweiAuthService();
}
....
}
Googleã²ãŒã ãµãŒãã¹ãããã€ããŒ
public class GooglePlayGameServiceProvider : IGameServiceProvider
{
private static string TAG = "GooglePlayServiceProvider";
private PlayGamesPlatform _platform;
public CommonAuthUser commonAuthUser = null;
public void Init()
{
InitPlayGamesPlatform();
}
....
}
次ã«ããããŒãžã£ãŒãšãã¡ã¯ããªã¯ã©ã¹ãäœæããå¿ èŠããããŸããæ¬¡ã«ãå®çŸ©ã«åŸã£ãŠãããã€ããŒãååŸããŸãã
public class GameServiceManager : Singleton<GameServiceManager>
{
public IGameServiceProvider provider;
protected override void Awake()
{
base.Awake();
provider = GameServiceFactory.CreateGameServiceProvider();
}
.....
}
ããã¯ç§ãã¡ã®ãã¡ã¯ããªãŒã¯ã©ã¹ãã©ã®ããã«èŠãããã§ãïŒ
internal static class GameServiceFactory
{
public static IGameServiceProvider CreateGameServiceProvider()
{
#if HMS_BUILD
return new HMSGameServiceProvider();
#else
return new GooglePlayGameServiceProvider();
#endif
}
}
ããã§ããã«ããããã€ããŒã²ãŒã ãµãŒãã¹ã®æ©èœã管çã§ããGameManagerã¯ã©ã¹ãã§ããŸããã
GameServicesãåæåããã«ã¯ãå¿ èŠã«å¿ããŠæ¬¡ã®ã³ãŒãè¡ã䜿çšããŸãã
public class MainSceneManager : MonoBehaviour
{
void Start()
{
GameServiceManager.Instance.Init();
....
}
....
private void OnClickedScoreBoardButton()
{
GameServiceManager.Instance.provider.ShowLeaderBoard();
}
private void OnClickedAchievementButton()
{
GameServiceManager.Instance.provider.ShowAchievements();
}
....
}
ãã¹ãŠã®ãµãŒãã¹ã¢ãžã¥ãŒã«ã¯åãããžãã¯ãšæ§é ãæã£ãŠãããããåãµãŒãã¹ã¢ãžã¥ãŒã«ã®äœæ¥ã«ã€ããŠã¯èª¬æããŸããããããžã§ã¯ãããGitHubã«ã³ãŒããã³ããŒããããšã§ãå®éã®åäœã確èªã§ããŸãã
ãŸããUnityã§Huaweiãã©ã°ã€ã³ãèšå®ããæ¹æ³ã«ã€ããŠã®ã¬ã€ãã³ã¹ãå¿ èŠãªå Žåã¯ããã®æçš¿ã§èª¬æãã ãŠããŸãã
çµè«ã«ç§»ããŸãããã
DefineConfig.csã§HMS_BUILDãšGMS_BUILDã®éã§å®çŸ©ã倿Žããã«ã¯ã次ã®ããã«ããŸãã
- HuaweiAppGalleryãšGooglePlayã®2ã€ã®ç°ãªãAPKãŸãã¯ããã±ãŒãžãå ¥æã§ããŸãã
- HMSãšGMSã®éã§ããã°ã€ã³ãšãã°ã¢ãŠãã®æ©èœããªãŒããŒããŒããå®çžŸãã²ãŒã å è³Œå ¥ãå€åããŠããŸãã
以äžã¯ãäž¡æ¹ã®ã¢ã»ã³ããªã®çããããªã§ãã
ãHMS_BUILDãã®
å ŽåïŒãGMS_BUILDãã® å ŽåïŒ
ãã¢ãããžã§ã¯ããšHMSããã³GMSçšã«æºåãããAPKã¯ãGitHubã®ãªã³ã¯ã«ãã ãŸãã