解析配置文件
This commit is contained in:
parent
b46582b837
commit
51d6bbfb04
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5d5d8d4959271412c9836c232fa3acfa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,314 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using Google.MiniJSON;
|
||||
using Script.Utils;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Script.Common.FileParse
|
||||
{
|
||||
|
||||
public static class FileParse
|
||||
{
|
||||
static string resourcePath = Application.streamingAssetsPath +"/";
|
||||
public static void Parse()
|
||||
{
|
||||
string bundleId = GetBundleId();
|
||||
LoggerUtils.Debug("[FileParse] get bundleId: " + bundleId);
|
||||
ParseConfig(bundleId);
|
||||
ParseSdkConfig(bundleId);
|
||||
}
|
||||
|
||||
// 获取key-value配置信息
|
||||
public static string GetConfigByKey(string _key)
|
||||
{
|
||||
PlayerPrefPair[] configs = new PlayerPrefPair[0];
|
||||
configs = ParseConfig(GetBundleId());
|
||||
for (int i = 0; i < configs.Length; i++)
|
||||
{
|
||||
if (configs[i].Key == _key)
|
||||
{
|
||||
return configs[i].Value.ToString();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private static PlayerPrefPair[] ParseConfig(string bundleId)
|
||||
{
|
||||
string fileName = GetMD5Hash("Config" + bundleId);
|
||||
PlayerPrefPair[] configs = GetConfig(fileName, false);
|
||||
ParseConfigsInner(configs);
|
||||
return configs;
|
||||
|
||||
}
|
||||
|
||||
private static PlayerPrefPair[] ParseSdkConfig(string bundleId)
|
||||
{
|
||||
string fileName = GetMD5Hash("SdkConfig" + bundleId);
|
||||
PlayerPrefPair[] configs = GetConfig(fileName, true);
|
||||
ParseConfigsInner(configs);
|
||||
return configs;
|
||||
|
||||
}
|
||||
|
||||
private static string GetMD5Hash(string input)
|
||||
{
|
||||
using (var md5 = MD5.Create())
|
||||
{
|
||||
var inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
var hashBytes = md5.ComputeHash(inputBytes);
|
||||
|
||||
var builder = new StringBuilder();
|
||||
foreach (var t in hashBytes)
|
||||
{
|
||||
builder.Append(t.ToString("x2"));
|
||||
}
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private static PlayerPrefPair[] GetConfig(string _configFile, bool _sdkConfigFile)
|
||||
{
|
||||
return GetAllFromProperties(resourcePath + _configFile, _sdkConfigFile);
|
||||
}
|
||||
|
||||
private static PlayerPrefPair[] GetAllFromProperties(string _configPath, bool _sdkConfigFile)
|
||||
{
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
WWW reader = new WWW(_configPath);
|
||||
while (!reader.isDone) { }
|
||||
string m_content = reader.text;
|
||||
#else
|
||||
string m_content = System.IO.File.ReadAllText(_configPath);
|
||||
#endif
|
||||
|
||||
string m_ecryptFileContent = DecryptFileBody(m_content, _sdkConfigFile);
|
||||
Hashtable ht = LoadHashtable(m_ecryptFileContent);
|
||||
if (ht.Count > 0)
|
||||
{
|
||||
PlayerPrefPair[] tempPlayerPrefs = new PlayerPrefPair[ht.Count];
|
||||
int i = 0;
|
||||
foreach (string key in ht.Keys)
|
||||
{
|
||||
tempPlayerPrefs[i] = new PlayerPrefPair() { Key = key, Value = ht[key] };
|
||||
i++;
|
||||
}
|
||||
|
||||
return tempPlayerPrefs;
|
||||
}
|
||||
else
|
||||
{
|
||||
return new PlayerPrefPair[0];
|
||||
}
|
||||
}
|
||||
|
||||
private static void ParseConfigsInner(PlayerPrefPair[] _configs)
|
||||
{
|
||||
if (_configs.Length <= 0) return;
|
||||
|
||||
for (int i = 0; i < _configs.Length; i++)
|
||||
{
|
||||
string valueTemp = _configs[i].Value.ToString();
|
||||
LoggerUtils.Debug("[FileParse] ParseConfigsInner key" + _configs[i].Key + "value:" + valueTemp);
|
||||
|
||||
if (_configs[i].Key.ToLower() == KEY_Admob_CollapsibleBannerId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobCollapsibleBannerId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Admob_NormalBannerId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobNormalBannerId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Admob_SplashId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobSplashId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Admob_NativeId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobNativeId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Admob_RewardId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobRewardId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Admob_InterId.ToLower())
|
||||
{
|
||||
StaticValue.AdmobInterId = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_PRIVACY_URL.ToLower())
|
||||
{
|
||||
StaticValue.PrivacyUrl = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_ADJUST_ID.ToLower())
|
||||
{
|
||||
StaticValue.AdjustToken = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Max_APPKEY.ToLower())
|
||||
{
|
||||
StaticValue.ApplovinKey = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_THINKDATA_ID.ToLower())
|
||||
{
|
||||
StaticValue.TDAppID = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Max_Inter.ToLower())
|
||||
{
|
||||
StaticValue.InterAdUnitID = valueTemp;
|
||||
}else if (_configs[i].Key.ToLower() == KEY_Max_Reward.ToLower())
|
||||
{
|
||||
StaticValue.RewardAdUnitID = valueTemp;
|
||||
}
|
||||
else if (_configs[i].Key.ToLower() == KEY_TopOn_AppId.ToLower())
|
||||
{
|
||||
string[] condition = { "@" };
|
||||
string[] parts = valueTemp.Split(condition, StringSplitOptions.None);
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
StaticValue.TopOnAppID = parts[0];
|
||||
StaticValue.TopOnAppKey = parts[1];
|
||||
}
|
||||
}
|
||||
else if (_configs[i].Key.ToLower() == KEY_TopOn_Inter.ToLower())
|
||||
{
|
||||
StaticValue.TopOnInterAdUnitID = valueTemp;
|
||||
}
|
||||
else if (_configs[i].Key.ToLower() == KEY_TopOn_Reward.ToLower())
|
||||
{
|
||||
StaticValue.TopOnRewardAdUnitID = valueTemp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Hashtable LoadHashtable(string file)
|
||||
{
|
||||
Hashtable ht = new Hashtable(16);
|
||||
string content = null;
|
||||
try
|
||||
{
|
||||
content = file;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
string[] rows = content.Split('\n');
|
||||
string[] kv = null;
|
||||
foreach (string c in rows)
|
||||
{
|
||||
if (c.Trim().Length == 0)
|
||||
continue;
|
||||
kv = c.Split('=');
|
||||
if (kv.Length == 1)
|
||||
{
|
||||
ht[kv[0].Trim()] = "";
|
||||
}
|
||||
else if (kv.Length == 2)
|
||||
{
|
||||
ht[kv[0].Trim()] = kv[1].Trim();
|
||||
}
|
||||
}
|
||||
return ht;
|
||||
}
|
||||
|
||||
private static string DecryptFileBody(string fileBody, bool sdkConfigFile)
|
||||
{
|
||||
string padded = fileBody.PadRight(fileBody.Length + (4 - fileBody.Length % 4) % 4, '=');
|
||||
var decryptResponseBodyBytes = XXTEA.Decrypt(System.Convert.FromBase64String(padded), Encoding.UTF8.GetBytes(GetMD5Hash((sdkConfigFile ? "SdkConfigKey#$!" : "ConfigKey#$!") + GetBundleId())));
|
||||
var decryptResponseBody = Encoding.UTF8.GetString(decryptResponseBodyBytes);
|
||||
return decryptResponseBody;
|
||||
}
|
||||
|
||||
private static string GetBundleId()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
string packageName = "";
|
||||
var files = Directory.GetFiles(Application.dataPath, "*.json", SearchOption.AllDirectories);
|
||||
var googleFilePath = "";
|
||||
foreach (var item in files)
|
||||
{
|
||||
if (item.Contains("google-services.json"))
|
||||
{
|
||||
googleFilePath = item;
|
||||
}
|
||||
}
|
||||
|
||||
if (!File.Exists(googleFilePath))
|
||||
{
|
||||
// 显示错误提示框
|
||||
throw new Exception("google-services.json not exists.");
|
||||
}
|
||||
|
||||
|
||||
var googleServicesDictionary = (Dictionary<string, object>)Json.Deserialize(File.ReadAllText(googleFilePath));
|
||||
|
||||
googleServicesDictionary.TryGetValue("client", out var tempClientList);
|
||||
|
||||
if (!(tempClientList is List<object> clientList) || clientList == null || clientList.Count == 0)
|
||||
{
|
||||
// 显示错误提示框
|
||||
throw new Exception("Illegal google-services.json");
|
||||
}
|
||||
|
||||
foreach (var tempClientItem in clientList)
|
||||
{
|
||||
if (!(tempClientItem is Dictionary<string, object> clientItem))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
clientItem.TryGetValue("client_info", out var tempClientInfo);
|
||||
|
||||
if (!(tempClientInfo is Dictionary<string, object> clientInfo) || clientInfo == null || clientInfo.Count == 0)
|
||||
{
|
||||
// 显示错误提示框
|
||||
throw new Exception("Illegal google-services.json");
|
||||
}
|
||||
|
||||
clientInfo.TryGetValue("android_client_info", out var tempAndroidClientInfo);
|
||||
if (!(tempAndroidClientInfo is Dictionary<string, object> androidClientInfo) || androidClientInfo == null || androidClientInfo.Count == 0)
|
||||
{
|
||||
// 显示错误提示框
|
||||
throw new Exception("Illegal google-services.json");
|
||||
}
|
||||
|
||||
androidClientInfo.TryGetValue("package_name", out var googlePackageName);
|
||||
packageName = (string)googlePackageName;
|
||||
if (!string.IsNullOrEmpty(packageName))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return packageName;
|
||||
#else
|
||||
AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||||
AndroidJavaObject currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
|
||||
AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
|
||||
string packageName = currentActivity.Call<string>("getPackageName");
|
||||
return packageName;
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
public const string KEY_Admob_CollapsibleBannerId = "Admob_Banner_ID1";
|
||||
public const string KEY_Admob_NormalBannerId = "Admob_Banner_ID2";
|
||||
public const string KEY_Admob_SplashId = "Admob_APPOPEN_ID";
|
||||
public const string KEY_Admob_NativeId = "Admob_NATIVE_ID";
|
||||
public const string KEY_Admob_RewardId = "Admob_RV_ID";
|
||||
public const string KEY_Admob_InterId = "Admob_IV_ID";
|
||||
public const string KEY_PRIVACY_URL = "tka_url_privacy";
|
||||
public const string KEY_THINKDATA_ID = "ss_app_id";
|
||||
public const string KEY_ADJUST_ID = "adjust_id";
|
||||
public const string KEY_TopOn_AppId = "ad_appid";
|
||||
public const string KEY_TopOn_Reward = "AD_Reward";
|
||||
public const string KEY_TopOn_Inter = "AD_Inter";
|
||||
public const string KEY_Admob_AppID = "admob_id";
|
||||
public const string KEY_Max_APPKEY = "ad_appkey";
|
||||
public const string KEY_Max_Inter = "ad_interstital_id";
|
||||
public const string KEY_Max_Reward = "ad_reward_id";
|
||||
|
||||
public struct PlayerPrefPair
|
||||
{
|
||||
public string Key { get; set; }
|
||||
|
||||
public object Value { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bd74719ba6cd94424a20539116ebabff
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 96f1e9850f3d444ab85bcb5ed5ec8f00
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,193 @@
|
|||
/**********************************************************\
|
||||
| |
|
||||
| XXTEA.cs |
|
||||
| |
|
||||
| XXTEA encryption algorithm library for .NET. |
|
||||
| |
|
||||
| Encryption Algorithm Authors: |
|
||||
| David J. Wheeler |
|
||||
| Roger M. Needham |
|
||||
| |
|
||||
| Code Author: Ma Bingyao <mabingyao@gmail.com> |
|
||||
| LastModified: Mar 10, 2015 |
|
||||
| |
|
||||
\**********************************************************/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
public sealed class XXTEA {
|
||||
private static readonly UTF8Encoding utf8 = new UTF8Encoding();
|
||||
|
||||
private const UInt32 delta = 0x9E3779B9;
|
||||
|
||||
private static UInt32 MX(UInt32 sum, UInt32 y, UInt32 z, Int32 p, UInt32 e, UInt32[] k) {
|
||||
return (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
|
||||
}
|
||||
|
||||
private XXTEA() {
|
||||
}
|
||||
|
||||
public static Byte[] Encrypt(Byte[] data, Byte[] key) {
|
||||
if (data.Length == 0) {
|
||||
return data;
|
||||
}
|
||||
return ToByteArray(Encrypt(ToUInt32Array(data, true), ToUInt32Array(FixKey(key), false)), false);
|
||||
}
|
||||
|
||||
public static Byte[] Encrypt(String data, Byte[] key) {
|
||||
return Encrypt(utf8.GetBytes(data), key);
|
||||
}
|
||||
|
||||
public static Byte[] Encrypt(Byte[] data, String key) {
|
||||
return Encrypt(data, utf8.GetBytes(key));
|
||||
}
|
||||
|
||||
public static Byte[] Encrypt(String data, String key) {
|
||||
return Encrypt(utf8.GetBytes(data), utf8.GetBytes(key));
|
||||
}
|
||||
|
||||
public static String EncryptToBase64String(Byte[] data, Byte[] key) {
|
||||
return Convert.ToBase64String(Encrypt(data, key));
|
||||
}
|
||||
|
||||
public static String EncryptToBase64String(String data, Byte[] key) {
|
||||
return Convert.ToBase64String(Encrypt(data, key));
|
||||
}
|
||||
|
||||
public static String EncryptToBase64String(Byte[] data, String key) {
|
||||
return Convert.ToBase64String(Encrypt(data, key));
|
||||
}
|
||||
|
||||
public static String EncryptToBase64String(String data, String key) {
|
||||
return Convert.ToBase64String(Encrypt(data, key));
|
||||
}
|
||||
|
||||
public static Byte[] Decrypt(Byte[] data, Byte[] key) {
|
||||
if (data.Length == 0) {
|
||||
return data;
|
||||
}
|
||||
return ToByteArray(Decrypt(ToUInt32Array(data, false), ToUInt32Array(FixKey(key), false)), true);
|
||||
}
|
||||
|
||||
public static Byte[] Decrypt(Byte[] data, String key) {
|
||||
return Decrypt(data, utf8.GetBytes(key));
|
||||
}
|
||||
|
||||
public static Byte[] DecryptBase64String(String data, Byte[] key) {
|
||||
return Decrypt(Convert.FromBase64String(data), key);
|
||||
}
|
||||
|
||||
public static Byte[] DecryptBase64String(String data, String key) {
|
||||
return Decrypt(Convert.FromBase64String(data), key);
|
||||
}
|
||||
|
||||
public static String DecryptToString(Byte[] data, Byte[] key) {
|
||||
return utf8.GetString(Decrypt(data, key));
|
||||
}
|
||||
|
||||
public static String DecryptToString(Byte[] data, String key) {
|
||||
return utf8.GetString(Decrypt(data, key));
|
||||
}
|
||||
|
||||
public static String DecryptBase64StringToString(String data, Byte[] key) {
|
||||
return utf8.GetString(DecryptBase64String(data, key));
|
||||
}
|
||||
|
||||
public static String DecryptBase64StringToString(String data, String key) {
|
||||
return utf8.GetString(DecryptBase64String(data, key));
|
||||
}
|
||||
|
||||
private static UInt32[] Encrypt(UInt32[] v, UInt32[] k) {
|
||||
Int32 n = v.Length - 1;
|
||||
if (n < 1) {
|
||||
return v;
|
||||
}
|
||||
UInt32 z = v[n], y, sum = 0, e;
|
||||
Int32 p, q = 6 + 52 / (n + 1);
|
||||
unchecked {
|
||||
while (0 < q--) {
|
||||
sum += delta;
|
||||
e = sum >> 2 & 3;
|
||||
for (p = 0; p < n; p++) {
|
||||
y = v[p + 1];
|
||||
z = v[p] += MX(sum, y, z, p, e, k);
|
||||
}
|
||||
y = v[0];
|
||||
z = v[n] += MX(sum, y, z, p, e, k);
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
private static UInt32[] Decrypt(UInt32[] v, UInt32[] k) {
|
||||
Int32 n = v.Length - 1;
|
||||
if (n < 1) {
|
||||
return v;
|
||||
}
|
||||
UInt32 z, y = v[0], sum, e;
|
||||
Int32 p, q = 6 + 52 / (n + 1);
|
||||
unchecked {
|
||||
sum = (UInt32)(q * delta);
|
||||
while (sum != 0) {
|
||||
e = sum >> 2 & 3;
|
||||
for (p = n; p > 0; p--) {
|
||||
z = v[p - 1];
|
||||
y = v[p] -= MX(sum, y, z, p, e, k);
|
||||
}
|
||||
z = v[n];
|
||||
y = v[0] -= MX(sum, y, z, p, e, k);
|
||||
sum -= delta;
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
private static Byte[] FixKey(Byte[] key) {
|
||||
if (key.Length == 16) return key;
|
||||
Byte[] fixedkey = new Byte[16];
|
||||
if (key.Length < 16) {
|
||||
key.CopyTo(fixedkey, 0);
|
||||
}
|
||||
else {
|
||||
Array.Copy(key, 0, fixedkey, 0, 16);
|
||||
}
|
||||
return fixedkey;
|
||||
}
|
||||
|
||||
private static UInt32[] ToUInt32Array(Byte[] data, Boolean includeLength) {
|
||||
Int32 length = data.Length;
|
||||
Int32 n = (((length & 3) == 0) ? (length >> 2) : ((length >> 2) + 1));
|
||||
UInt32[] result;
|
||||
if (includeLength) {
|
||||
result = new UInt32[n + 1];
|
||||
result[n] = (UInt32)length;
|
||||
}
|
||||
else {
|
||||
result = new UInt32[n];
|
||||
}
|
||||
for (Int32 i = 0; i < length; i++) {
|
||||
result[i >> 2] |= (UInt32)data[i] << ((i & 3) << 3);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Byte[] ToByteArray(UInt32[] data, Boolean includeLength) {
|
||||
Int32 n = data.Length << 2;
|
||||
if (includeLength) {
|
||||
Int32 m = (Int32)data[data.Length - 1];
|
||||
n -= 4;
|
||||
if ((m < n - 3) || (m > n)) {
|
||||
return null;
|
||||
}
|
||||
n = m;
|
||||
}
|
||||
Byte[] result = new Byte[n];
|
||||
for (Int32 i = 0; i < n; i++) {
|
||||
result[i] = (Byte)(data[i >> 2] >> ((i & 3) << 3));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1db01a1175e3f451bbf15da2925e759a
|
|
@ -0,0 +1,46 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Script.Common
|
||||
{
|
||||
|
||||
public static class StaticValue
|
||||
{
|
||||
public static string AdmobCollapsibleBannerId = "";
|
||||
|
||||
public static string AdmobNormalBannerId = "";
|
||||
|
||||
public static string AdmobSplashId = "";
|
||||
|
||||
public static string AdmobNativeId = "";
|
||||
|
||||
public static string AdmobRewardId = "";
|
||||
|
||||
public static string AdmobInterId = "";
|
||||
|
||||
public static string PrivacyUrl = "";
|
||||
|
||||
public static string TopOnAppID = "";
|
||||
|
||||
public static string TopOnAppKey = "";
|
||||
|
||||
public static string TopOnRewardAdUnitID = "";
|
||||
|
||||
public static string TopOnInterAdUnitID = "";
|
||||
|
||||
public static string ApplovinKey = "";
|
||||
|
||||
public static string AdjustToken = "";
|
||||
|
||||
public static string TDAppID = "";
|
||||
|
||||
public static string TDServerURL = "";
|
||||
|
||||
// max
|
||||
public static string InterAdUnitID = "";
|
||||
|
||||
public static string RewardAdUnitID = "";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 34aa20abb977944f29d68bb385e84b01
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c6f50e7adcea1478db7f7c75a59a0186
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c995cf1c9b1ce43f08dc884ec8430308
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1d355797e637f624b9148b20da4b2a10
|
||||
guid: b218769dd2f8e41f3a8821896e5a13ef
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7b27930e2fb6bc84e96b66bdceb0c41e
|
||||
guid: 5e91905a8b73e41d2adb698f4793e279
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
Loading…
Reference in New Issue