Commit 0ebba712 authored by nk161690's avatar nk161690

gg play login

parent b89e0808
using UnityEngine; using UnityEngine;
using Facebook.Unity;
using UnityEngine.Android; using UnityEngine.Android;
using Photon.Pun; using Photon.Pun;
using System.Collections.Generic;
using Photon.Realtime; using Photon.Realtime;
using UnityEditor.VersionControl;
using TMPro;
using Unity.VisualScripting.Antlr3.Runtime;
using static Log;
using System; using System;
using Facebook.Unity;
public class FacebookLogin : MonoBehaviour public class FacebookLogin : MonoBehaviour
{ {
private readonly string[] facebookPermissions = { "public_profile", "email" }; private readonly string[] facebookPermissions = { "public_profile", "email" };
private LoginSession session = new LoginSession(); private Log.LoginSession session = new Log.LoginSession();
private Log log = new Log();
private void Awake() private void Awake()
{ {
// Initialize the Facebook SDK
if (!FB.IsInitialized) if (!FB.IsInitialized)
{ {
FB.Init(OnInitComplete); FB.Init(OnInitComplete);
...@@ -29,71 +22,88 @@ public class FacebookLogin : MonoBehaviour ...@@ -29,71 +22,88 @@ public class FacebookLogin : MonoBehaviour
} }
} }
private void OnApplicationQuit()
{
session.LogoutTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
log.LogLoginSession(session);
}
private void OnInitComplete() private void OnInitComplete()
{ {
if (FB.IsInitialized) if (FB.IsInitialized)
{ {
// Enable or disable automatic App Events logging
FB.ActivateApp(); FB.ActivateApp();
} }
else else
{ {
Debug.Log("Failed to Initialize the Facebook SDK"); Debug.LogError("Failed to Initialize the Facebook SDK");
} }
} }
public void OnFacebookLoginButtonClicked() private void OnApplicationQuit()
{ {
// Check for required permissions and request them if not granted session.LogoutTime = System.DateTime.Now.ToString("dd/MM/yyyy HH:mm");
foreach (string permission in facebookPermissions) Log.LogLoginSession(session);
}
public void OnFacebookLoginButtonClicked()
{ {
if (!Permission.HasUserAuthorizedPermission(permission)) if (FB.IsLoggedIn)
{ {
// If not granted, request the permission HandleLoggedIn();
Permission.RequestUserPermission(permission);
} }
else
{
FB.LogInWithReadPermissions(callback: OnLoginComplete);
} }
// Request Facebook Login with read permissions
FB.LogInWithReadPermissions(facebookPermissions, OnLoginComplete);
} }
private void OnLoginComplete(ILoginResult result) private void OnLoginComplete(ILoginResult result)
{ {
if (result.Error == null && !result.Cancelled) if (result.Error == null && !result.Cancelled)
{ {
// Login successful, obtain the Facebook access token
string accessToken = AccessToken.CurrentAccessToken.TokenString; string accessToken = AccessToken.CurrentAccessToken.TokenString;
Debug.Log("Facebook Login Successful! Access Token: " + accessToken); Debug.Log("Facebook Login Successful! Access Token: " + accessToken);
// Use the accessToken to authenticate with Photon as a custom authentication type // Continue with Photon authentication
OnFacebookLoggedIn(); OnFacebookLoggedIn();
// Log // Log login session
session.Username = AccessToken.CurrentAccessToken.UserId; session.Username = AccessToken.CurrentAccessToken.UserId;
session.LoginTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); session.LoginTime = System.DateTime.Now.ToString("dd/MM/yyyy HH:mm");
} }
else else
{ {
// Login failed or user cancelled
Debug.Log("Facebook Login Failed or Cancelled"); Debug.Log("Facebook Login Failed or Cancelled");
} }
} }
private void HandleLoggedIn()
{
string accessToken = AccessToken.CurrentAccessToken.TokenString;
string userID = AccessToken.CurrentAccessToken.UserId;
// Request user's Facebook information
FB.API("/me?fields=id,name,email", HttpMethod.GET, OnFacebookGraphAPICallback);
}
private void OnFacebookGraphAPICallback(IGraphResult result)
{
if (string.IsNullOrEmpty(result.Error))
{
// Handle user's Facebook data
string userName = result.ResultDictionary["name"].ToString();
string userEmail = result.ResultDictionary["email"].ToString();
Debug.Log($"User Name: {userName}, Email: {userEmail}");
}
else
{
Debug.LogError($"Facebook Graph API request failed: {result.Error}");
}
}
private void OnFacebookLoggedIn() private void OnFacebookLoggedIn()
{ {
// AccessToken class will have session details
string aToken = AccessToken.CurrentAccessToken.TokenString; string aToken = AccessToken.CurrentAccessToken.TokenString;
string facebookId = AccessToken.CurrentAccessToken.UserId; string facebookId = AccessToken.CurrentAccessToken.UserId;
PhotonNetwork.AuthValues = new AuthenticationValues(); PhotonNetwork.AuthValues = new AuthenticationValues();
PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.FacebookGaming; PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.FacebookGaming;
PhotonNetwork.AuthValues.UserId = facebookId; // alternatively set by server PhotonNetwork.AuthValues.UserId = facebookId;
PhotonNetwork.AuthValues.AddAuthParameter("token", aToken); PhotonNetwork.AuthValues.AddAuthParameter("token", aToken);
PhotonNetwork.ConnectUsingSettings(); PhotonNetwork.ConnectUsingSettings();
} }
......
...@@ -18,7 +18,7 @@ MonoBehaviour: ...@@ -18,7 +18,7 @@ MonoBehaviour:
appIds: appIds:
- 275337038528210 - 275337038528210
appLabels: appLabels:
- App Name - Demo
cookie: 1 cookie: 1
logging: 1 logging: 1
status: 1 status: 1
......
using GooglePlayGames; using GooglePlayGames;
using GooglePlayGames.BasicApi;
using System;
using TMPro; using TMPro;
using UnityEngine; using UnityEngine;
...@@ -6,4 +8,21 @@ public class GgPlayLogin : MonoBehaviour ...@@ -6,4 +8,21 @@ public class GgPlayLogin : MonoBehaviour
{ {
[SerializeField] private TextMeshProUGUI message; [SerializeField] private TextMeshProUGUI message;
public void OnGgPlayLoginButtonClicked()
{
PlayGamesPlatform.Activate();
PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
}
internal void ProcessAuthentication(SignInStatus status)
{
if (status == SignInStatus.Success)
{
message.text = "Connected";
}
else
{
message.text = "Failed";
}
}
} }
fileFormatVersion: 2
guid: 756b1bfedafc369488a592fb4771379c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2 fileFormatVersion: 2
guid: be5036f1d701f274ba37e68da140a648 guid: 141e7b111350a3a408340efe931efade
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
......
...@@ -13,9 +13,10 @@ ...@@ -13,9 +13,10 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// </copyright> // </copyright>
#if UNITY_ANDROID
namespace GooglePlayGames { #if UNITY_ANDROID
namespace GooglePlayGames
{
/// ///
/// This file is automatically generated DO NOT EDIT! /// This file is automatically generated DO NOT EDIT!
/// ///
...@@ -29,31 +30,30 @@ namespace GooglePlayGames { ...@@ -29,31 +30,30 @@ namespace GooglePlayGames {
/// by checking whether it still retains its initial value - we prevent the constants from being /// by checking whether it still retains its initial value - we prevent the constants from being
/// replaced in the aforementioned search/replace by stripping off the leading and trailing "__". /// replaced in the aforementioned search/replace by stripping off the leading and trailing "__".
/// </summary> /// </summary>
public static class GameInfo { public static class GameInfo
{
private const string UnescapedApplicationId = "APP_ID"; private const string UnescapedApplicationId = "APP_ID";
private const string UnescapedIosClientId = "IOS_CLIENTID";
private const string UnescapedWebClientId = "WEB_CLIENTID"; private const string UnescapedWebClientId = "WEB_CLIENTID";
private const string UnescapedNearbyServiceId = "NEARBY_SERVICE_ID"; private const string UnescapedNearbyServiceId = "NEARBY_SERVICE_ID";
public const string ApplicationId = ""; // Filled in automatically public const string ApplicationId = "__APP_ID__"; // Filled in automatically
public const string IosClientId = "__IOS_CLIENTID__"; // Filled in automatically public const string WebClientId = "__WEB_CLIENTID__"; // Filled in automatically
public const string WebClientId = ""; // Filled in automatically public const string NearbyConnectionServiceId = "__NEARBY_SERVICE_ID__";
public const string NearbyConnectionServiceId = "";
public static bool ApplicationIdInitialized() {
return !string.IsNullOrEmpty(ApplicationId) && !ApplicationId.Equals(ToEscapedToken(UnescapedApplicationId));
}
public static bool IosClientIdInitialized() { public static bool ApplicationIdInitialized()
return !string.IsNullOrEmpty(IosClientId) && !IosClientId.Equals(ToEscapedToken(UnescapedIosClientId)); {
return !string.IsNullOrEmpty(ApplicationId) &&
!ApplicationId.Equals(ToEscapedToken(UnescapedApplicationId));
} }
public static bool WebClientIdInitialized() { public static bool WebClientIdInitialized()
{
return !string.IsNullOrEmpty(WebClientId) && !WebClientId.Equals(ToEscapedToken(UnescapedWebClientId)); return !string.IsNullOrEmpty(WebClientId) && !WebClientId.Equals(ToEscapedToken(UnescapedWebClientId));
} }
public static bool NearbyConnectionsInitialized() { public static bool NearbyConnectionsInitialized()
{
return !string.IsNullOrEmpty(NearbyConnectionServiceId) && return !string.IsNullOrEmpty(NearbyConnectionServiceId) &&
!NearbyConnectionServiceId.Equals(ToEscapedToken(UnescapedNearbyServiceId)); !NearbyConnectionServiceId.Equals(ToEscapedToken(UnescapedNearbyServiceId));
} }
...@@ -63,9 +63,10 @@ namespace GooglePlayGames { ...@@ -63,9 +63,10 @@ namespace GooglePlayGames {
/// </summary> /// </summary>
/// <returns>The escaped token.</returns> /// <returns>The escaped token.</returns>
/// <param name="token">The Token</param> /// <param name="token">The Token</param>
private static string ToEscapedToken(string token) { private static string ToEscapedToken(string token)
{
return string.Format("__{0}__", token); return string.Format("__{0}__", token);
} }
} }
} }
#endif #endif //UNITY_ANDROID
\ No newline at end of file
...@@ -6,7 +6,7 @@ using System.Text; ...@@ -6,7 +6,7 @@ using System.Text;
using UnityEngine; using UnityEngine;
using static System.Collections.Specialized.BitVector32; using static System.Collections.Specialized.BitVector32;
public class Log public static class Log
{ {
public class LoginSession public class LoginSession
{ {
...@@ -15,7 +15,7 @@ public class Log ...@@ -15,7 +15,7 @@ public class Log
public string LogoutTime { get; set; } public string LogoutTime { get; set; }
} }
public async void LogLoginSession(LoginSession session) public static async void LogLoginSession(LoginSession session)
{ {
// Serialize the data as JSON // Serialize the data as JSON
string jsonData = JsonConvert.SerializeObject(session); string jsonData = JsonConvert.SerializeObject(session);
......
using System.Net.Http;
using TMPro;
using UnityEngine;
using Newtonsoft.Json;
using Photon.Realtime;
using Photon.Pun;
using System;
using static Log;
public class Login : MonoBehaviourPunCallbacks
{
[SerializeField] private TextMeshProUGUI username;
[SerializeField] private TextMeshProUGUI password;
[SerializeField] private TextMeshProUGUI message;
private readonly string baseURL = "http://localhost:5172/User/";
private string token = "";
private LoginSession session = new LoginSession();
private Log log = new Log();
public class RespondMessage
{
public bool Success { get; set; }
public string Message { get; set; }
public string Data { get; set; }
}
public async void CallLoginAPI()
{
string endpoint = "Login";
string email = CleanInput(username.text.Trim());
string pwd = CleanInput(password.text.Trim());
using (HttpClient client = new HttpClient())
{
string apiUrl = $"{baseURL}{endpoint}?email={email}&pwd={pwd}";
using (HttpResponseMessage res = await client.GetAsync(apiUrl))
{
using (HttpContent content = res.Content)
{
string data = await content.ReadAsStringAsync();
RespondMessage respondMessage = JsonConvert.DeserializeObject<RespondMessage>(data);
if (respondMessage.Success)
{
//AuthenticateWithPhoton("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
//.eyJlbWFpbCI6ImFkbWluIiwicm9sZSI6IjAiLCJUb2tlbklkIjoiYjcxOWIxYzEtNmI4MC00N2U1L
//ThjMGQtYjU4ZTAyN2UyMmE4IiwibmJmIjoxNjkwNDUzMTc3LCJleHAiOjE2OTA0NTQ5NzcsImlhdCI6MTY5MDQ1MzE3N30
//.W-0PXJ9GAmwOOXlKi8cEr3lBkwx9rGbpLKCCUYJkyCA");
token = respondMessage.Data;
AuthenticateWithPhoton(token);
session.Username = username.text;
session.LoginTime = DateTime.Now.ToString("dd/MM/yyyy");
}
else
{
message.text = "Account is not available. Check your email/password and try again.";
}
}
}
}
}
private string CleanInput(string input)
{
return input.Replace("\u200b", "").Trim();
}
private async void AuthenticateWithPhoton(string token)
{
using (HttpClient client = new HttpClient())
{
string apiURL = baseURL + token;
using (HttpResponseMessage res = await client.GetAsync(apiURL))
{
if(res.IsSuccessStatusCode)
{
// Token is valid. Proceed to connect to Photon.
var authParameters = new System.Collections.Generic.Dictionary<string, object>
{
{ "token", token }
};
PhotonNetwork.AuthValues = new AuthenticationValues(JsonUtility.ToJson(authParameters));
// Now, connect to Photon servers with the custom authentication values.
PhotonNetwork.ConnectUsingSettings();
}
else
{
// Token is invalid. Handle the error or display a message to the user.
Debug.Log("Invalid token. Unable to connect to Photon.");
message.text = "Invalid token. Unable to connect to Photon.";
}
}
}
}
}
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true"> <application android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name"> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name">
<intent-filter> <intent-filter>
...@@ -9,16 +10,40 @@ ...@@ -9,16 +10,40 @@
</intent-filter> </intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity> </activity>
<activity android:name="com.facebook.unity.FBUnityLoginActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> <activity android:name="com.facebook.unity.FBUnityLoginActivity"
<activity android:name="com.facebook.unity.FBUnityDialogsActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
<activity android:name="com.facebook.unity.FBUnityGamingServicesFriendFinderActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity android:name="com.facebook.unity.FBUnityAppLinkActivity" android:exported="true" /> <activity android:name="com.facebook.unity.FBUnityDialogsActivity"
<activity android:name="com.facebook.unity.FBUnityDeepLinkingActivity" android:exported="true" /> android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity android:name="com.facebook.unity.FBUnityGamingServicesFriendFinderActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity android:name="com.facebook.unity.FBUnityAppLinkActivity"
android:exported="true" />
<activity android:name="com.facebook.unity.FBUnityDeepLinkingActivity"
android:exported="true" />
<activity android:name="com.facebook.unity.FBUnityGameRequestActivity" /> <activity android:name="com.facebook.unity.FBUnityGameRequestActivity" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb275337038528210" /> <meta-data android:name="com.facebook.sdk.ApplicationId"
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="" /> android:value="275337038528210" />
<meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="true" /> <meta-data android:name="com.facebook.sdk.ClientToken"
<meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="true" /> android:value="" />
<meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
android:value="true" />
<meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled"
android:value="true" />
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="App" />
<activity android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="275337038528210" />
</intent-filter>
</activity>
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider275337038528210" android:exported="true" /> <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider275337038528210" android:exported="true" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -6,15 +6,24 @@ ...@@ -6,15 +6,24 @@
android:versionCode="1" android:versionCode="1"
android:versionName="1.0" > android:versionName="1.0" >
<!-- Required for Nearby Connections -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application> <application>
<!-- Required for Nearby Connections API -->
<meta-data android:name="com.google.android.gms.nearby.connection.SERVICE_ID"
android:value="com.QuengGameStudio.com.unity.mobile2D" />
<!-- The space in these forces it to be interpreted as a string vs. int --> <!-- The space in these forces it to be interpreted as a string vs. int -->
<meta-data android:name="com.google.android.gms.games.APP_ID" <meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="\u003" /> android:value="\u003470375050882" />
<!-- Keep track of which plugin is being used --> <!-- Keep track of which plugin is being used -->
<meta-data android:name="com.google.android.gms.games.unityVersion" <meta-data android:name="com.google.android.gms.games.unityVersion"
......
fileFormatVersion: 2 fileFormatVersion: 2
guid: 61ba7accaf3fd35448ce9a56377da37a guid: cd7beb176a0d3a076a19fa88bbbd2fa2
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
......
fileFormatVersion: 2
guid: 563892b0712cfe651962a097a2e5f99f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 7d8daeeb76a4d369f9ccf2ebefbb24db
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: e883dcb7dd6de42499051215571c6ab1
timeCreated: 1427227169
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 1e0e6855446f4992d988b19ebc34e214
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
// <copyright file="AchievementGUI.cs" company="Google Inc.">
// Copyright (C) 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace SmokeTest
{
using UnityEngine;
using UnityEngine.SocialPlatforms;
using GooglePlayGames;
public class AchievementGUI : MonoBehaviour
{
private MainGui mOwner;
private string mStatus;
// Constructed by the main gui
internal AchievementGUI(MainGui owner)
{
mOwner = owner;
mStatus = "";
}
internal void OnGUI()
{
float height = Screen.height / 11f;
GUILayout.BeginVertical(GUILayout.Height(Screen.height), GUILayout.Width(Screen.width));
GUILayout.Label("SmokeTest: Achievements", GUILayout.Height(height));
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("Ach Reveal", GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
DoAchievementReveal(GPGSIds.achievement_achievementtoreveal);
}
if (GUILayout.Button("Ach Reveal Incremental", GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
DoAchievementReveal(GPGSIds.achievement_achievement_hidden_incremental);
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("Ach Unlock", GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
DoAchievementUnlock();
}
if (GUILayout.Button("Ach Increment", GUILayout.ExpandHeight(true)))
{
DoAchievementIncrement(GPGSIds.achievement_achievementtoincrement);
}
if (GUILayout.Button("Ach Increment Hidden", GUILayout.ExpandHeight(true)))
{
DoAchievementIncrement(GPGSIds.achievement_achievement_hidden_incremental);
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("List Achievements", GUILayout.ExpandHeight(true)))
{
DoListAchievements();
}
if (GUILayout.Button("List Achievement Descriptions", GUILayout.ExpandHeight(true)))
{
DoListAchievementDescriptions();
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("Ach ShowUI", GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
DoAchievementUI();
}
if (GUILayout.Button("Back", GUILayout.ExpandHeight(true),
GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
mOwner.SetUI(MainGui.Ui.Main);
}
GUILayout.EndHorizontal();
GUILayout.FlexibleSpace();
GUILayout.Label(mStatus);
GUILayout.EndVertical();
}
void SetStandBy(string msg)
{
mStatus = msg;
}
void EndStandBy()
{
mStatus += " (Done!)";
}
internal void ShowEffect(bool success)
{
Camera.main.backgroundColor =
success ? new Color(0.0f, 0.0f, 0.8f, 1.0f) : new Color(0.8f, 0.0f, 0.0f, 1.0f);
}
internal void DoAchievementReveal(string achId)
{
SetStandBy("Revealing achievement...");
Social.ReportProgress(
achId,
0.0f,
(bool success) =>
{
EndStandBy();
mStatus = success ? "Revealed successfully." : "*** Failed to reveal ach.";
Debug.Log("AchievementToReveal completed: " + mStatus);
ShowEffect(success);
});
}
internal void DoAchievementUnlock()
{
SetStandBy("Unlocking achievement...");
Social.ReportProgress(
GPGSIds.achievement_achievementtounlock,
100.0f,
(bool success) =>
{
EndStandBy();
mStatus = success ? "Unlocked successfully." : "*** Failed to unlock ach.";
ShowEffect(success);
});
}
internal void DoAchievementIncrement(string achId)
{
PlayGamesPlatform p = (PlayGamesPlatform) Social.Active;
SetStandBy("Incrementing achievement...");
p.IncrementAchievement(
achId,
1,
(bool success) =>
{
EndStandBy();
mStatus = success ? "Incremented successfully." : "*** Failed to increment ach.";
ShowEffect(success);
});
}
internal void DoAchievementUI()
{
Social.ShowAchievementsUI();
ShowEffect(true);
}
internal void DoListAchievements()
{
Social.LoadAchievements(achievements =>
{
mStatus = "Loaded " + achievements.Length + " achievments";
foreach (IAchievement ach in achievements)
{
mStatus += "\n " + ach.id + ": " + ach.completed;
}
});
}
internal void DoListAchievementDescriptions()
{
Social.LoadAchievementDescriptions(achievements =>
{
mStatus = "Loaded " + achievements.Length + " achievments";
foreach (IAchievementDescription ach in achievements)
{
mStatus += "\n " + ach.id + ": " + ach.title;
}
});
}
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: ec4a529b8f5ec47a686ad2a3aa78ed44
timeCreated: 1440612853
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
/*
* Copyright (C) 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("Assembly-CSharp")]
// Allow internal visibility for testing purposes.
[assembly: InternalsVisibleTo("PluginDev.UnitTests")]
\ No newline at end of file
fileFormatVersion: 2
guid: 73c47830015c7489c8e61bf7ebe012ea
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
// <copyright file="FriendsGui.cs" company="Google Inc.">
// Copyright (C) 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
namespace SmokeTest
{
using UnityEngine;
using UnityEngine.SocialPlatforms;
using GooglePlayGames;
using System;
using System.Linq;
using GooglePlayGames.BasicApi;
using GooglePlayGames.BasicApi.SavedGame;
using GooglePlayGames.OurUtils;
public class FriendsGUI : MonoBehaviour
{
private MainGui mOwner;
private FriendsListVisibilityStatus mFriendsListVisibilityStatus = FriendsListVisibilityStatus.Unknown;
// Constructed by the main gui
internal FriendsGUI(MainGui owner)
{
mOwner = owner;
}
internal void OnGUI()
{
float height = Screen.height / 11f;
GUILayout.BeginVertical(GUILayout.Height(Screen.height), GUILayout.Width(Screen.width));
GUILayout.Label("SmokeTest: Friends", GUILayout.Height(height));
GUILayout.Label("Friend List Visibility Status: " + mFriendsListVisibilityStatus,
GUILayout.Height(height));
GUILayout.Label("Number of friends loaded: " + Social.localUser.friends.Length,
GUILayout.Height(height));
GUILayout.Label("Load Friends Status: " + PlayGamesPlatform.Instance.GetLastLoadFriendsStatus(),
GUILayout.Height(height));
string firstFriend = "";
string firstFriendId= "";
if (Social.localUser.friends.Length > 0)
{
firstFriend = Social.localUser.friends[0].userName;
firstFriendId = Social.localUser.friends[0].id;
}
GUILayout.Label("First Friend: " + firstFriend,GUILayout.Height(height));
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("Back", GUILayout.ExpandHeight(true), GUILayout.Height(height),
GUILayout.ExpandWidth(true)))
{
mOwner.SetUI(MainGui.Ui.Main);
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (mFriendsListVisibilityStatus == FriendsListVisibilityStatus.Unknown)
{
PlayGamesPlatform.Instance.GetFriendsListVisibility( /* forceReload= */ true,
friendsListVisibilityStatus => { mFriendsListVisibilityStatus = friendsListVisibilityStatus; });
}
// Show friends paginated
if (GUILayout.Button("Load Friends", GUILayout.ExpandHeight(true), GUILayout.Height(height),
GUILayout.ExpandWidth(true)))
{
PlayGamesPlatform.Instance.LoadFriends(2, /* forceReload= */ false, /* callback= */ null);
}
if (GUILayout.Button("Load More Friends", GUILayout.ExpandHeight(true),
GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
PlayGamesPlatform.Instance.LoadMoreFriends(2, /* callback= */ null);
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (GUILayout.Button("Load All Friends", GUILayout.ExpandHeight(true),
GUILayout.Height(height), GUILayout.ExpandWidth(true)))
{
Social.localUser.LoadFriends(/* callback= */ null);
}
if (GUILayout.Button("AskForLoadFriendsResolution", GUILayout.ExpandHeight(true),
GUILayout.Height(height),
GUILayout.ExpandWidth(true)))
{
PlayGamesPlatform.Instance.AskForLoadFriendsResolution(status =>
{
// Will be updated next OnGui call
mFriendsListVisibilityStatus = FriendsListVisibilityStatus.Unknown;
});
}
GUILayout.EndHorizontal();
GUILayout.Space(50f);
GUILayout.BeginHorizontal(GUILayout.Height(height));
if (Social.localUser.friends.Length > 0)
{
if (GUILayout.Button("Show Profile: " + firstFriend, GUILayout.ExpandHeight(true),
GUILayout.Height(height),
GUILayout.ExpandWidth(true)))
{
PlayGamesPlatform.Instance.ShowCompareProfileWithAlternativeNameHintsUI(
firstFriendId, /* otherPlayerInGameName= */ null, /* currentPlayerInGameName= */ null,
/* callback= */ null);
}
}
GUILayout.EndHorizontal();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
}
}
}
fileFormatVersion: 2 fileFormatVersion: 2
guid: fe3586393ac9fe54fa149e87091296d8 guid: 7e22dc32c06d56dad9af9089c42ca0ba
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2
......
// <copyright file="GPGSIds.cs" company="Google Inc.">
// Copyright (C) 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
///
/// This file is automatically generated DO NOT EDIT!
///
/// These are the constants defined in the Play Games Console for Game Services
/// Resources.
///
namespace SmokeTest
{
public static class GPGSIds
{
/*
* This file is a placeholder to allow compilation of the sample code
* The actual values are populated by the plugin when Setup is run
* using the resource data from the Play Console.
*/
public const string
achievement_achievementtoincrement = "PLACEHOLDER - This file will be generated."; // <GPGSID>
public const string achievement_achievementtounlock = "PLACEHOLDER - This file will be generated."; // <GPGSID>
public const string achievement_achievementtoreveal = "PLACEHOLDER - This file will be generated."; // <GPGSID>
public const string event_smokingevent = "PLACEHOLDER - This file will be generated."; // <GPGSID>
public const string achievement_achievement_hidden_incremental =
"PLACEHOLDER - This file will be generated."; // <GPGSID>
public const string
leaderboard_leaders_in_smoketesting = "PLACEHOLDER - This file will be generated."; // <GPGSID>
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 16c753bca01504137bdb5b6f384aaa45
timeCreated: 1440612853
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: bddfed1fe2907456a95bc00ee2edbb91
timeCreated: 1440612853
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: bacc4fefc887d4c17b2c07a8ddf02557
timeCreated: 1427227169
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 2319c86c507e94d9aa50e3503b392986
timeCreated: 1427227170
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 2f2e0d1cb4c1a4e30a66b37bdf074b4e
timeCreated: 1427227169
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 0d71a91e9586cc26f8ba6c5b9d703284
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
...@@ -74,8 +74,8 @@ ...@@ -74,8 +74,8 @@
<file>Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.5.10.jar</file> <file>Assets/Plugins/Android/org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.5.10.jar</file>
</files> </files>
<settings> <settings>
<setting name="androidAbis" value="armeabi-v7a" /> <setting name="androidAbis" value="arm64-v8a,armeabi-v7a" />
<setting name="bundleId" value="com.DefaultCompany.API" /> <setting name="bundleId" value="com.QuengGameStudio.com.unity.mobile2D" />
<setting name="explodeAars" value="True" /> <setting name="explodeAars" value="True" />
<setting name="gradleBuildEnabled" value="True" /> <setting name="gradleBuildEnabled" value="True" />
<setting name="gradlePropertiesTemplateEnabled" value="False" /> <setting name="gradlePropertiesTemplateEnabled" value="False" />
......
lastUpgrade=01101 lastUpgrade=01101
proj.pluginVersion=0.11.01 proj.pluginVersion=0.11.01
proj.AppId=470375050882
and.BundleId=com.QuengGameStudio.com.unity.mobile2D
proj.classDir=Assets
proj.ConstantsClassName=GPGSIds
and.ResourceData=%3c%3fxml+version%3d%221.0%22+encoding%3d%22utf-8%22%3f%3e%0d%0a%3c%21--Google+Play+game+services+IDs.+Save+this+file+as+res%2fvalues%2fgames-ids.xml+in+your+project.--%3e%0d%0a%3cresources%3e%0d%0a++%3c%21--app_id--%3e%0d%0a++%3cstring+name%3d%22app_id%22+translatable%3d%22false%22%3e470375050882%3c%2fstring%3e%0d%0a++%3c%21--package_name--%3e%0d%0a++%3cstring+name%3d%22package_name%22+translatable%3d%22false%22%3ecom.QuengGameStudio.com.unity.mobile2D%3c%2fstring%3e%0d%0a%3c%2fresources%3e
and.ClientId=470375050882-us7kp4ovmjjg9kf54qm2cb4v1qhi9frf.apps.googleusercontent.com
android.SetupDone=true
App.NearbdServiceId=com.QuengGameStudio.com.unity.mobile2D
android.NearbySetupDone=true
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
<projectSetting name="com.google.external-dependency-managerAnalyticsEnabled" value="True" /> <projectSetting name="com.google.external-dependency-managerAnalyticsEnabled" value="True" />
<projectSetting name="Google.IOSResolver.VerboseLoggingEnabled" value="False" /> <projectSetting name="Google.IOSResolver.VerboseLoggingEnabled" value="False" />
<projectSetting name="Google.PackageManagerResolver.VerboseLoggingEnabled" value="False" /> <projectSetting name="Google.PackageManagerResolver.VerboseLoggingEnabled" value="False" />
<projectSetting name="Google.VersionHandler.VerboseLoggingEnabled" value="False" /> <projectSetting name="Google.VersionHandler.VerboseLoggingEnabled" value="True" />
<projectSetting name="Google.VersionHandler.VersionHandlingEnabled" value="True" />
<projectSetting name="GooglePlayServices.PromptBeforeAutoResolution" value="False" /> <projectSetting name="GooglePlayServices.PromptBeforeAutoResolution" value="False" />
<projectSetting name="GooglePlayServices.UseJetifier" value="True" /> <projectSetting name="GooglePlayServices.UseJetifier" value="True" />
</projectSettings> </projectSettings>
\ No newline at end of file
...@@ -8,7 +8,7 @@ PlayerSettings: ...@@ -8,7 +8,7 @@ PlayerSettings:
AndroidProfiler: 0 AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0 AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0 AndroidEnableSustainedPerformanceMode: 0
defaultScreenOrientation: 4 defaultScreenOrientation: 0
targetDevice: 2 targetDevice: 2
useOnDemandResources: 0 useOnDemandResources: 0
accelerometerFrequency: 60 accelerometerFrequency: 60
...@@ -155,6 +155,7 @@ PlayerSettings: ...@@ -155,6 +155,7 @@ PlayerSettings:
androidSupportedAspectRatio: 1 androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.1 androidMaxAspectRatio: 2.1
applicationIdentifier: applicationIdentifier:
Android: com.QuengGameStudio.com.unity.mobile2D
Standalone: com.DefaultCompany.2DProject Standalone: com.DefaultCompany.2DProject
buildNumber: buildNumber:
Standalone: 0 Standalone: 0
...@@ -238,14 +239,14 @@ PlayerSettings: ...@@ -238,14 +239,14 @@ PlayerSettings:
clonedFromGUID: 10ad67313f4034357812315f3c407484 clonedFromGUID: 10ad67313f4034357812315f3c407484
templatePackageId: com.unity.template.2d@6.1.2 templatePackageId: com.unity.template.2d@6.1.2
templateDefaultScene: Assets/Scenes/SampleScene.unity templateDefaultScene: Assets/Scenes/SampleScene.unity
useCustomMainManifest: 0 useCustomMainManifest: 1
useCustomLauncherManifest: 0 useCustomLauncherManifest: 0
useCustomMainGradleTemplate: 0 useCustomMainGradleTemplate: 0
useCustomLauncherGradleManifest: 0 useCustomLauncherGradleManifest: 0
useCustomBaseGradleTemplate: 0 useCustomBaseGradleTemplate: 0
useCustomGradlePropertiesTemplate: 0 useCustomGradlePropertiesTemplate: 0
useCustomProguardFile: 0 useCustomProguardFile: 0
AndroidTargetArchitectures: 1 AndroidTargetArchitectures: 3
AndroidTargetDevices: 0 AndroidTargetDevices: 0
AndroidSplashScreenScale: 0 AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0} androidSplashScreen: {fileID: 0}
...@@ -685,7 +686,8 @@ PlayerSettings: ...@@ -685,7 +686,8 @@ PlayerSettings:
tvOS: PHOTON_UNITY_NETWORKING;PUN_2_0_OR_NEWER;PUN_2_OR_NEWER;PUN_2_19_OR_NEWER tvOS: PHOTON_UNITY_NETWORKING;PUN_2_0_OR_NEWER;PUN_2_OR_NEWER;PUN_2_19_OR_NEWER
additionalCompilerArguments: {} additionalCompilerArguments: {}
platformArchitecture: {} platformArchitecture: {}
scriptingBackend: {} scriptingBackend:
Android: 1
il2cppCompilerConfiguration: {} il2cppCompilerConfiguration: {}
managedStrippingLevel: managedStrippingLevel:
EmbeddedLinux: 1 EmbeddedLinux: 1
...@@ -706,7 +708,7 @@ PlayerSettings: ...@@ -706,7 +708,7 @@ PlayerSettings:
allowUnsafeCode: 0 allowUnsafeCode: 0
useDeterministicCompilation: 1 useDeterministicCompilation: 1
enableRoslynAnalyzers: 1 enableRoslynAnalyzers: 1
selectedPlatform: 0 selectedPlatform: 2
additionalIl2CppArgs: additionalIl2CppArgs:
scriptingRuntimeVersion: 1 scriptingRuntimeVersion: 1
gcIncremental: 1 gcIncremental: 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment