Initial commit
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21f32d2f4add49b3b11fadb6889a2156
|
||||
timeCreated: 1714382287
|
||||
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Common.Analytics;
|
||||
using UnityEngine.Analytics;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
/// <summary>
|
||||
/// Package representation in the analytics data.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
internal struct Package
|
||||
{
|
||||
/// <summary>
|
||||
/// The identifier of the package.
|
||||
/// </summary>
|
||||
public string PackageId;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the user has selected this package for installation.
|
||||
/// </summary>
|
||||
public bool SelectedForInstall;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the package was recommended.
|
||||
/// </summary>
|
||||
public bool IsRecommended;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the package was already installed when the installation attempt event occured
|
||||
/// </summary>
|
||||
public bool IsAlreadyInstalled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A single Answer to the GameSpecs questionnaire.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
internal struct GameSpec
|
||||
{
|
||||
/// <summary>
|
||||
/// The identifier of the answered question (does not change).
|
||||
/// </summary>
|
||||
public string QuestionId;
|
||||
|
||||
/// <summary>
|
||||
/// The text of the question as displayed in the UI (may change with versions).
|
||||
/// </summary>
|
||||
public string QuestionText;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the question accepts multiple answers.
|
||||
/// </summary>
|
||||
public bool AcceptsMultipleAnswers;
|
||||
|
||||
/// <summary>
|
||||
/// The identifier of the answered question (does not change).
|
||||
/// </summary>
|
||||
public string AnswerId;
|
||||
|
||||
/// <summary>
|
||||
/// The text of the answer as displayed in the UI (may change with versions).
|
||||
/// </summary>
|
||||
public string AnswerText;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
internal struct RecommendationData : IAnalytic.IData
|
||||
{
|
||||
/// <summary>
|
||||
/// The preset selected by the user.
|
||||
/// </summary>
|
||||
public int Preset;
|
||||
|
||||
/// <summary>
|
||||
/// The preset selected by the user (game genre) as displayed in the UI.
|
||||
/// </summary>
|
||||
public string PresetName;
|
||||
|
||||
/// <summary>
|
||||
/// The version defined in the Questionnaire data.
|
||||
/// </summary>
|
||||
public string QuestionnaireVersion;
|
||||
|
||||
/// <summary>
|
||||
/// All the selected answers to the questions of the game specs questionnaire.
|
||||
/// </summary>
|
||||
public GameSpec[] GameSpecs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// What type of content the user Interacted with (buttons).
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
internal struct InteractionData : IAnalytic.IData
|
||||
{
|
||||
/// <summary>
|
||||
/// The identifier of the section that contains the button.
|
||||
/// </summary>
|
||||
public string SectionId;
|
||||
|
||||
/// <summary>
|
||||
/// Whether it is a call to action or a link.
|
||||
/// </summary>
|
||||
public InteractionDataType Type;
|
||||
|
||||
/// <summary>
|
||||
/// The name of the button in the UI.
|
||||
/// </summary>
|
||||
public string DisplayName;
|
||||
|
||||
/// <summary>
|
||||
/// The target package for which the section is helpful.
|
||||
/// </summary>
|
||||
public string TargetPackageId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Payload of the installation event.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
internal struct InstallData : IAnalytic.IData
|
||||
{
|
||||
/// <summary>
|
||||
/// The preset selected by the user.
|
||||
/// </summary>
|
||||
public int Preset;
|
||||
|
||||
/// <summary>
|
||||
/// The preset selected by the user (game genre) as displayed in the UI.
|
||||
/// </summary>
|
||||
public string PresetName;
|
||||
|
||||
/// <summary>
|
||||
/// The version defined in the Questionnaire data.
|
||||
/// </summary>
|
||||
public string QuestionnaireVersion;
|
||||
|
||||
/// <summary>
|
||||
/// All the selected answers to the questions of the game specs questionnaire.
|
||||
/// </summary>
|
||||
public GameSpec[] GamesSpecs;
|
||||
|
||||
/// <summary>
|
||||
/// The packages that were in the recommendation tab of the multiplayer center
|
||||
/// </summary>
|
||||
public Package[] Packages;
|
||||
|
||||
/// <summary>
|
||||
/// The hosting model selected by the user as displayed in the UI.
|
||||
/// </summary>
|
||||
public string hostingModelName;
|
||||
|
||||
/// <summary>
|
||||
/// The hosting model is the recommended solution.
|
||||
/// </summary>
|
||||
public bool hostingModelRecommended;
|
||||
|
||||
/// <summary>
|
||||
/// The netcode solution selected by the user as displayed in the UI.
|
||||
/// </summary>
|
||||
public string netcodeSolutionName;
|
||||
|
||||
/// <summary>
|
||||
/// The netcode solution is the recommended solution.
|
||||
/// </summary>
|
||||
public bool netcodeSolutionRecommended;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4cee1dc929764056ac40ece91efef712
|
||||
timeCreated: 1714481696
|
||||
@@ -0,0 +1,175 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Unity.Multiplayer.Center.Common;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
using Unity.Multiplayer.Center.Recommendations;
|
||||
using Unity.Multiplayer.Center.Window.UI;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
internal static class AnalyticsUtils
|
||||
{
|
||||
// hard-coded to avoid recomputing every time / resizing arrays
|
||||
public const int NumNetcodePackage = 2;
|
||||
public const int NumHostingPackages = 1;
|
||||
|
||||
/// <summary>
|
||||
/// From the recommendation view data (which contains the packages that the user sees and the user's selection),
|
||||
/// create the list of packages that will be sent to the analytics backend.
|
||||
/// </summary>
|
||||
/// <param name="data">The recommendation view data as shown in the recommendation tab</param>
|
||||
/// <param name="solutionToPackageData">The packages views</param>
|
||||
/// <returns>The list of packages to be sent along with the installation event.</returns>
|
||||
public static Package[] GetPackagesWithAnalyticsFormat(RecommendationViewData data, SolutionsToRecommendedPackageViewData solutionToPackageData)
|
||||
{
|
||||
var selectedNetcode = RecommendationUtils.GetSelectedNetcode(data);
|
||||
var selectedHostingModel = RecommendationUtils.GetSelectedHostingModel(data);
|
||||
var packages = solutionToPackageData.GetPackagesForSelection(selectedNetcode.Solution, selectedHostingModel.Solution);
|
||||
var packageCount = NumNetcodePackage + NumHostingPackages + packages.Length;
|
||||
|
||||
var result = new Package[packageCount];
|
||||
var resultIndex = 0;
|
||||
|
||||
AddSolutionPackages(data.NetcodeOptions, result, ref resultIndex);
|
||||
AddSolutionPackages(data.ServerArchitectureOptions, result, ref resultIndex);
|
||||
AddRecommendedPackages(packages, result, ref resultIndex);
|
||||
|
||||
Debug.Assert(resultIndex == packageCount, $"Expected {packageCount} packages, got {resultIndex}");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fetches all the inspector name attributes of the Preset enum and returns the displayNames
|
||||
/// Important! It assumes the enum values are 0, ... , N
|
||||
/// </summary>
|
||||
/// <returns>The array of preset names. The index in the array is the integer value of the enum value</returns>
|
||||
public static string[] GetPresetFullNames()
|
||||
{
|
||||
var t = typeof(Preset);
|
||||
var values = Enum.GetValues(t);
|
||||
var array = new string[values.Length];
|
||||
foreach (var value in values)
|
||||
{
|
||||
var preset = (Preset) value;
|
||||
var index = (int)preset;
|
||||
var asString = value.ToString();
|
||||
var memInfo = t.GetMember(asString);
|
||||
var attribute = memInfo[0].GetCustomAttribute<InspectorNameAttribute>(false);
|
||||
|
||||
if (attribute != null)
|
||||
{
|
||||
array[index] = attribute.displayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"Could not fetch the full name of the preset value {asString}");
|
||||
array[index] = asString;
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts AnswerData to game specs, providing the knowledge of the display names.
|
||||
/// It assumes there is exactly one answer in the answer list at this point.
|
||||
/// </summary>
|
||||
/// <param name="data">The answer data of the user</param>
|
||||
/// <param name="answerIdToAnswerName">Mapping answer id to display name</param>
|
||||
/// <param name="questionIdToQuestionName">Mapping question id to display name</param>
|
||||
/// <returns>The list of game spec that will be consumed by the analytics backend</returns>
|
||||
public static GameSpec[] ToGameSpecs(AnswerData data,
|
||||
IReadOnlyDictionary<string, string> answerIdToAnswerName,
|
||||
IReadOnlyDictionary<string, string> questionIdToQuestionName)
|
||||
{
|
||||
var result = new GameSpec[data.Answers.Count];
|
||||
for (var i = 0; i < result.Length; ++i)
|
||||
{
|
||||
var answer = data.Answers[i];
|
||||
var answerId = answer.Answers[0]; // TODO: make sure that this always exists
|
||||
result[i] = new GameSpec()
|
||||
{
|
||||
QuestionId = answer.QuestionId,
|
||||
QuestionText = questionIdToQuestionName[answer.QuestionId],
|
||||
AcceptsMultipleAnswers = false, // TODO: add test that verifies this assumption
|
||||
AnswerId = answerId,
|
||||
AnswerText = answerIdToAnswerName[answerId]
|
||||
};
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the mapping from question id to question display name
|
||||
/// </summary>
|
||||
/// <param name="questionnaireData">The questionnaire data</param>
|
||||
/// <returns>The mapping</returns>
|
||||
public static IReadOnlyDictionary<string, string> GetQuestionDisplayNames(QuestionnaireData questionnaireData)
|
||||
{
|
||||
var dictionary = new Dictionary<string, string>();
|
||||
foreach (var question in questionnaireData.Questions)
|
||||
{
|
||||
dictionary[question.Id] = question.Title;
|
||||
}
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the mapping from answer id to answer display name
|
||||
/// </summary>
|
||||
/// <param name="questionnaireData">The questionnaire data</param>
|
||||
/// <returns>The mapping</returns>
|
||||
public static IReadOnlyDictionary<string, string> GetAnswerDisplayNames(QuestionnaireData questionnaireData)
|
||||
{
|
||||
var dictionary = new Dictionary<string, string>();
|
||||
foreach (var question in questionnaireData.Questions)
|
||||
{
|
||||
foreach (var answer in question.Choices)
|
||||
{
|
||||
dictionary[answer.Id] = answer.Title;
|
||||
}
|
||||
}
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
static void AddSolutionPackages(RecommendedSolutionViewData[] options, Package[] result, ref int resultIndex)
|
||||
{
|
||||
foreach (var t in options)
|
||||
{
|
||||
if(string.IsNullOrEmpty(t.MainPackage?.PackageId))
|
||||
continue;
|
||||
|
||||
result[resultIndex] = new Package()
|
||||
{
|
||||
PackageId = t.MainPackage.PackageId,
|
||||
SelectedForInstall = t.Selected && t.RecommendationType != RecommendationType.Incompatible,
|
||||
IsRecommended = t.RecommendationType is RecommendationType.MainArchitectureChoice,
|
||||
IsAlreadyInstalled = t.MainPackage.IsInstalledAsProjectDependency
|
||||
};
|
||||
++resultIndex;
|
||||
}
|
||||
}
|
||||
|
||||
static void AddRecommendedPackages(RecommendedPackageViewData[] packageViewDatas, Package[] result, ref int resultIndex)
|
||||
{
|
||||
foreach (var viewData in packageViewDatas)
|
||||
{
|
||||
result[resultIndex] = new Package()
|
||||
{
|
||||
PackageId = viewData.PackageId,
|
||||
// TODO: remove hidden?
|
||||
SelectedForInstall = viewData.Selected && viewData.RecommendationType != RecommendationType.Incompatible,
|
||||
IsRecommended = viewData.RecommendationType.IsRecommendedPackage(),
|
||||
IsAlreadyInstalled = viewData.IsInstalledAsProjectDependency
|
||||
};
|
||||
++resultIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 54407f5deee4439eb1885bee01956e9c
|
||||
timeCreated: 1714483618
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Analytics;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
/// <summary>
|
||||
/// Does the same as the MultiplayerCenterAnalytics, but logs the events to the console instead of sending them.
|
||||
/// It is useful to debug fast, without the EditorAnalytics Debugger package (but it does not replace it).
|
||||
/// </summary>
|
||||
internal class DebugAnalytics : MultiplayerCenterAnalytics
|
||||
{
|
||||
public DebugAnalytics(string questionnaireVersion, IReadOnlyDictionary<string, string> questionDisplayNames,
|
||||
IReadOnlyDictionary<string,string> answerDisplayNames)
|
||||
: base(questionnaireVersion, questionDisplayNames, answerDisplayNames) { }
|
||||
|
||||
protected override void SendAnalytic(IAnalytic analytic)
|
||||
{
|
||||
analytic.TryGatherData(out var data, out var _);
|
||||
switch (data)
|
||||
{
|
||||
case InstallData installData:
|
||||
Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(installData)}");
|
||||
break;
|
||||
case RecommendationData recommendationData:
|
||||
Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(recommendationData)}");
|
||||
break;
|
||||
case InteractionData interactionEventAnalytic:
|
||||
Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(interactionEventAnalytic)}");
|
||||
break;
|
||||
default:
|
||||
Debug.Log($"Unknown event: {analytic.GetType()} - Data: {data}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static string ToString(GameSpec p) => $"GameSpec [{p.QuestionText} -> {p.AnswerText}]";
|
||||
|
||||
static string ToString(Package p) => $"Package [{p.PackageId} - Selected {p.SelectedForInstall} - Reco {p.IsRecommended} - Inst {p.IsAlreadyInstalled}]";
|
||||
|
||||
static string ToString(InstallData data)
|
||||
{
|
||||
var packageStrings = new List<string>(data.Packages.Length);
|
||||
foreach (var package in data.Packages)
|
||||
{
|
||||
packageStrings.Add(ToString(package));
|
||||
}
|
||||
return $"{data.PresetName} - Packages [{data.Packages.Length}] packages: \n{string.Join("\n", packageStrings)}";
|
||||
}
|
||||
|
||||
static string ToString(RecommendationData data)
|
||||
{
|
||||
var gameSpecStrings = new List<string>(data.GameSpecs.Length);
|
||||
foreach (var gameSpec in data.GameSpecs)
|
||||
{
|
||||
gameSpecStrings.Add(ToString(gameSpec));
|
||||
}
|
||||
return $"{data.PresetName} - GameSpecs [{data.GameSpecs.Length}] gamespecs: \n{string.Join("\n", gameSpecStrings)}";
|
||||
}
|
||||
|
||||
static string ToString(InteractionData data) => $"{data.SectionId}({data.TargetPackageId}) - {data.Type} - {data.DisplayName}";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd20f32039084a12a8e48dffd4d58f48
|
||||
timeCreated: 1714651117
|
||||
@@ -0,0 +1,156 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Multiplayer.Center.Common;
|
||||
using Unity.Multiplayer.Center.Common.Analytics;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Analytics;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
/// <summary>
|
||||
/// The interface for the Multiplayer Center Analytics provider (only one functional implementation, but the
|
||||
/// interface is needed for testing purposes)
|
||||
/// </summary>
|
||||
internal interface IMultiplayerCenterAnalytics
|
||||
{
|
||||
void SendInstallationEvent(AnswerData data, Preset preset, Package[] packages,
|
||||
string hostingModelName, bool hostingModelRecommended, string netcodeSolutionName, bool netcodeSolutionRecommended);
|
||||
void SendRecommendationEvent(AnswerData data, Preset preset);
|
||||
void SendGettingStartedInteractionEvent(string targetPackageId, string sectionId, InteractionDataType type, string displayName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The concrete implementation of the multiplayer center analytics provider.
|
||||
/// It convert
|
||||
/// </summary>
|
||||
internal class MultiplayerCenterAnalytics : IMultiplayerCenterAnalytics
|
||||
{
|
||||
const string k_VendorKey = "unity.multiplayer.center";
|
||||
const string k_InstallationEventName = "multiplayer_center_onInstallClicked";
|
||||
const string k_RecommendationEventName = "multiplayer_center_onRecommendation";
|
||||
const string k_GetStartedInteractionEventName = "multiplayer_center_onGetStartedInteraction";
|
||||
|
||||
readonly string m_QuestionnaireVersion;
|
||||
readonly IReadOnlyDictionary<string, string> m_AnswerIdToAnswerName;
|
||||
readonly IReadOnlyDictionary<string, string> m_QuestionIdToQuestionName;
|
||||
readonly string[] m_PresetFullNames = AnalyticsUtils.GetPresetFullNames();
|
||||
string PresetName(Preset v) => m_PresetFullNames[(int)v];
|
||||
|
||||
GameSpec[] FillGameSpecs(AnswerData data)
|
||||
{
|
||||
return AnalyticsUtils.ToGameSpecs(data, m_AnswerIdToAnswerName, m_QuestionIdToQuestionName);
|
||||
}
|
||||
|
||||
protected virtual void SendAnalytic(IAnalytic analytic)
|
||||
{
|
||||
EditorAnalytics.SendAnalytic(analytic);
|
||||
}
|
||||
|
||||
public MultiplayerCenterAnalytics(string questionnaireVersion, IReadOnlyDictionary<string, string> questionDisplayNames,
|
||||
IReadOnlyDictionary<string, string> answerDisplayNames)
|
||||
{
|
||||
m_QuestionnaireVersion = questionnaireVersion;
|
||||
m_QuestionIdToQuestionName = questionDisplayNames;
|
||||
m_AnswerIdToAnswerName = answerDisplayNames;
|
||||
}
|
||||
|
||||
public void SendGettingStartedInteractionEvent(string targetPackageId, string sectionId, InteractionDataType type, string displayName)
|
||||
{
|
||||
var analytic = new GetStartedInteractionEventAnalytic(sectionId, type, displayName, targetPackageId);
|
||||
SendAnalytic(analytic);
|
||||
}
|
||||
|
||||
public void SendInstallationEvent(AnswerData data, Preset preset, Package[] packages,
|
||||
string hostingModelName, bool hostingModelRecommended, string netcodeSolutionName, bool netcodeSolutionRecommended)
|
||||
{
|
||||
var analytic = new InstallationEventAnalytic(new InstallData()
|
||||
{
|
||||
Preset = (int)preset,
|
||||
PresetName = PresetName(preset),
|
||||
QuestionnaireVersion = m_QuestionnaireVersion,
|
||||
GamesSpecs = FillGameSpecs(data),
|
||||
Packages = packages,
|
||||
hostingModelName = hostingModelName,
|
||||
hostingModelRecommended = hostingModelRecommended,
|
||||
netcodeSolutionName = netcodeSolutionName,
|
||||
netcodeSolutionRecommended = netcodeSolutionRecommended
|
||||
});
|
||||
SendAnalytic(analytic);
|
||||
}
|
||||
|
||||
public void SendRecommendationEvent(AnswerData data, Preset preset)
|
||||
{
|
||||
var analytic = new RecommendationEventAnalytic(new RecommendationData()
|
||||
{
|
||||
Preset = (int)preset,
|
||||
PresetName = PresetName(preset),
|
||||
QuestionnaireVersion = m_QuestionnaireVersion,
|
||||
GameSpecs = FillGameSpecs(data)
|
||||
});
|
||||
SendAnalytic(analytic);
|
||||
}
|
||||
|
||||
[AnalyticInfo(eventName: k_InstallationEventName, vendorKey: k_VendorKey)]
|
||||
private class InstallationEventAnalytic : IAnalytic
|
||||
{
|
||||
InstallData m_Data;
|
||||
|
||||
public InstallationEventAnalytic(InstallData data)
|
||||
{
|
||||
m_Data = data;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool TryGatherData(out IAnalytic.IData data, out Exception error)
|
||||
{
|
||||
data = m_Data;
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[AnalyticInfo(eventName: k_RecommendationEventName, vendorKey: k_VendorKey)]
|
||||
private class RecommendationEventAnalytic : IAnalytic
|
||||
{
|
||||
RecommendationData m_Data;
|
||||
|
||||
public RecommendationEventAnalytic(RecommendationData data)
|
||||
{
|
||||
m_Data = data;
|
||||
}
|
||||
|
||||
public bool TryGatherData(out IAnalytic.IData data, out Exception error)
|
||||
{
|
||||
data = m_Data;
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[AnalyticInfo(eventName: k_GetStartedInteractionEventName, vendorKey: k_VendorKey)]
|
||||
private class GetStartedInteractionEventAnalytic : IAnalytic
|
||||
{
|
||||
InteractionData m_Data;
|
||||
|
||||
public GetStartedInteractionEventAnalytic(string sectionId, InteractionDataType type, string displayName, string targetPackageId)
|
||||
{
|
||||
m_Data = new InteractionData()
|
||||
{
|
||||
SectionId = sectionId,
|
||||
Type = type,
|
||||
DisplayName = displayName,
|
||||
TargetPackageId = targetPackageId
|
||||
};
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool TryGatherData(out IAnalytic.IData data, out Exception error)
|
||||
{
|
||||
data = m_Data;
|
||||
error = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 185e678d90804a8a85ab38276eca86fb
|
||||
timeCreated: 1714382339
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
internal static class MultiplayerCenterAnalyticsFactory
|
||||
{
|
||||
public static IMultiplayerCenterAnalytics Create()
|
||||
{
|
||||
var questionnaire = QuestionnaireObject.instance;
|
||||
var questionnaireVersion = questionnaire.Questionnaire.Version;
|
||||
var questionDisplayNames = AnalyticsUtils.GetQuestionDisplayNames(questionnaire.Questionnaire);
|
||||
var answerDisplayNames = AnalyticsUtils.GetAnswerDisplayNames(questionnaire.Questionnaire);
|
||||
|
||||
// Uncomment this line to use the DebugAnalytics class instead of the MultiplayerCenterAnalytics class
|
||||
// return new DebugAnalytics(questionnaireVersion, questionDisplayNames, answerDisplayNames);
|
||||
|
||||
return new MultiplayerCenterAnalytics(questionnaireVersion, questionDisplayNames, answerDisplayNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8bce0b24c28e45d884acfcf49a3b8945
|
||||
timeCreated: 1714640827
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Common.Analytics;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Analytics
|
||||
{
|
||||
/// <summary>
|
||||
/// The concrete implementation of the IOnboardingSectionAnalyticsProvider interface.
|
||||
/// It shall be created by the GettingStarted tab with the knowledge of the target package and the section id
|
||||
/// provided by the attribute of the onboarding section, so that the section implementer does not have to worry
|
||||
/// about it.
|
||||
/// </summary>
|
||||
internal class OnboardingSectionAnalyticsProvider : IOnboardingSectionAnalyticsProvider
|
||||
{
|
||||
readonly IMultiplayerCenterAnalytics m_Analytics;
|
||||
readonly string m_TargetPackageId;
|
||||
readonly string m_SectionId;
|
||||
|
||||
public OnboardingSectionAnalyticsProvider(IMultiplayerCenterAnalytics analytics, string targetPackageId, string sectionId)
|
||||
{
|
||||
Debug.Assert(analytics != null);
|
||||
m_Analytics = analytics;
|
||||
m_TargetPackageId = targetPackageId;
|
||||
m_SectionId = sectionId;
|
||||
}
|
||||
|
||||
public void SendInteractionEvent(InteractionDataType type, string displayName)
|
||||
{
|
||||
m_Analytics.SendGettingStartedInteractionEvent(m_TargetPackageId, m_SectionId, type, displayName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9faa4a7023c43c5805642250c703f48
|
||||
timeCreated: 1714637861
|
||||
@@ -0,0 +1,5 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly:InternalsVisibleTo("Unity.Multiplayer.Center.Editor.Tests")]
|
||||
[assembly:InternalsVisibleTo("Unity.Multiplayer.Center.Integrations")]
|
||||
[assembly:InternalsVisibleTo("Unity.Multiplayer.Center.GettingStartedTab.Tests")]
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 51566b3736df4282bbe76645014b0cc5
|
||||
timeCreated: 1700487414
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22d3dbf8d488d49d2b1130d698010dee
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,325 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEditor.PackageManager;
|
||||
using UnityEditor.PackageManager.Requests;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.Multiplayer.Center
|
||||
{
|
||||
internal static class PackageManagement
|
||||
{
|
||||
static PackageInstaller s_Installer;
|
||||
|
||||
/// <summary>
|
||||
/// Opens the package manager window with selected package name and hides error
|
||||
/// </summary>
|
||||
public static void OpenPackageManager(string packageName)
|
||||
{
|
||||
try
|
||||
{
|
||||
UnityEditor.PackageManager.UI.Window.Open(packageName);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// Hide the error in the PackageManager API until the team fixes it
|
||||
// Debug.Log("Error opening Package Manager: " + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the package is a direct dependency of the project
|
||||
/// </summary>
|
||||
/// <param name="packageId">The package name/id e.g. com.unity.netcode</param>
|
||||
/// <returns>True if the package is a direct dependency</returns>
|
||||
public static bool IsDirectDependency(string packageId)
|
||||
{
|
||||
var package = GetInstalledPackage(packageId);
|
||||
return package != null && package.isDirectDependency;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a package is installed.
|
||||
/// </summary>
|
||||
/// <param name="packageId">The package name, e.g. com.unity.netcode</param>
|
||||
/// <returns>True if the package is installed, false otherwise</returns>
|
||||
public static bool IsInstalled(string packageId) => GetInstalledPackage(packageId) != null;
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a package is embedded, linked locally, installed via Git or local Tarball.
|
||||
/// </summary>
|
||||
/// <param name="packageId">The package name, e.g. com.unity.netcode</param>
|
||||
/// <returns>True if the package is linked locally, false otherwise</returns>
|
||||
public static bool IsLinkedLocallyOrEmbeddedOrViaGit(string packageId) =>
|
||||
GetInstalledPackage(packageId) is { source: PackageSource.Embedded or PackageSource.Local or PackageSource.Git or PackageSource.LocalTarball };
|
||||
|
||||
/// <summary>
|
||||
/// Finds the installed package with the given packageId or returns null.
|
||||
/// </summary>
|
||||
/// <param name="packageId">The package name/id e.g. com.unity.netcode</param>
|
||||
/// <returns>The package info</returns>
|
||||
public static UnityEditor.PackageManager.PackageInfo GetInstalledPackage(string packageId)
|
||||
{
|
||||
return UnityEditor.PackageManager.PackageInfo.FindForPackageName(packageId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters out the packages that are already embedded, linked locally, installed via Git or local Tarball and returns this new list.
|
||||
/// </summary>
|
||||
/// <param name="installCandidates">A list of package IDs that are candidates for installation.</param>
|
||||
/// <returns>A new filtered list of packages.</returns>
|
||||
public static IEnumerable<string> RemoveLocallyLinkedOrEmbeddedOrViaGitPackagesFromList(IEnumerable<string> installCandidates)
|
||||
{
|
||||
var filteredList = new List<string>();
|
||||
|
||||
foreach (var packageId in installCandidates)
|
||||
{
|
||||
if (!IsLinkedLocallyOrEmbeddedOrViaGit(packageId))
|
||||
{
|
||||
filteredList.Add(packageId);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"Removing {packageId} from install candidates.\n" +
|
||||
"This package is already embedded, linked locally, installed via Git, or from a local tarball. " +
|
||||
"Please check the Package Manager for more information or to upgrade manually.");
|
||||
}
|
||||
}
|
||||
|
||||
return filteredList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if any of the given packageIds is installed.
|
||||
/// </summary>
|
||||
/// <param name="packageIds">List of package is e.g com.unity.netcode</param>
|
||||
/// <returns>True if any package is installed, false otherwise</returns>
|
||||
public static bool IsAnyPackageInstalled(params string[] packageIds)
|
||||
{
|
||||
var installedPackages = UnityEditor.PackageManager.PackageInfo.GetAllRegisteredPackages();
|
||||
var hashset = new HashSet<string>();
|
||||
|
||||
foreach (var package in installedPackages)
|
||||
{
|
||||
hashset.Add(package.name);
|
||||
}
|
||||
|
||||
foreach (var packageId in packageIds)
|
||||
{
|
||||
if (hashset.Contains(packageId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Installs a single package and invokes the callback when the package is installed/when the install failed.
|
||||
/// </summary>
|
||||
/// <param name="packageId">The package name/id e.g. com.unity.netcode</param>
|
||||
/// <param name="onInstalled">The callback</param>
|
||||
public static void InstallPackage(string packageId, Action<bool> onInstalled = null)
|
||||
{
|
||||
s_Installer = new PackageInstaller(packageId);
|
||||
s_Installer.OnInstalled += onInstalled;
|
||||
s_Installer.OnInstalled += _ => s_Installer = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Register to an existing installation callback. This has no effect if no installation is ongoing (check
|
||||
/// <see cref="IsInstallationFinished"/> to see if that is the case).
|
||||
/// </summary>
|
||||
/// <param name="onInstalled">The callback</param>
|
||||
public static void RegisterToExistingInstaller(Action<bool> onInstalled)
|
||||
{
|
||||
if (s_Installer != null)
|
||||
{
|
||||
s_Installer.OnInstalled += onInstalled;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Installs several packages and invokes the callback when all packages are installed/when the installation failed.
|
||||
/// </summary>
|
||||
/// <param name="packageIds">The package names/ids e.g. com.unity.netcode</param>
|
||||
/// <param name="onAllInstalled">The callback</param>
|
||||
/// <param name="packageIdsToRemove">Optional package name/ids to remove</param>
|
||||
public static void InstallPackages(IEnumerable<string> packageIds, Action<bool> onAllInstalled = null, IEnumerable<string> packageIdsToRemove = null)
|
||||
{
|
||||
s_Installer = new PackageInstaller(RemoveLocallyLinkedOrEmbeddedOrViaGitPackagesFromList(packageIds), packageIdsToRemove);
|
||||
s_Installer.OnInstalled += onAllInstalled;
|
||||
s_Installer.OnInstalled += _ => s_Installer = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a dictionary with package names as keys and versions as values
|
||||
/// </summary>
|
||||
/// <returns>The mapping (package id, installed version) </returns>
|
||||
internal static Dictionary<string, string> InstalledPackageDictionary()
|
||||
{
|
||||
var installedPackages = UnityEditor.PackageManager.PackageInfo.GetAllRegisteredPackages();
|
||||
var installedPackageDictionary = new Dictionary<string, string>();
|
||||
|
||||
foreach (var package in installedPackages)
|
||||
{
|
||||
var splitPackageId = package.packageId.Split('@');
|
||||
if (splitPackageId.Length == 2)
|
||||
{
|
||||
installedPackageDictionary[splitPackageId[0]] = splitPackageId[1];
|
||||
}
|
||||
}
|
||||
|
||||
return installedPackageDictionary;
|
||||
}
|
||||
|
||||
internal class VersionChecker
|
||||
{
|
||||
SearchRequest m_Request;
|
||||
public VersionChecker(string packageID)
|
||||
{
|
||||
m_Request = Client.Search(packageID, false);
|
||||
EditorApplication.update += Progress;
|
||||
}
|
||||
|
||||
public event Action<UnityEditor.PackageManager.PackageInfo> OnVersionFound;
|
||||
|
||||
void Progress()
|
||||
{
|
||||
if (!m_Request.IsCompleted) return;
|
||||
|
||||
EditorApplication.update -= Progress;
|
||||
var foundPackage = m_Request.Result;
|
||||
foreach (var packageInfo in foundPackage)
|
||||
{
|
||||
OnVersionFound?.Invoke(packageInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class PackageInstaller
|
||||
{
|
||||
Request m_Request;
|
||||
string[] m_PackagesToAddIds;
|
||||
public event Action<bool> OnInstalled;
|
||||
|
||||
public PackageInstaller(string packageId)
|
||||
{
|
||||
// Add a package to the project
|
||||
m_Request = Client.Add(packageId);
|
||||
m_PackagesToAddIds = new[] {packageId};
|
||||
EditorApplication.update += Progress;
|
||||
}
|
||||
|
||||
public PackageInstaller(IEnumerable<string> packageIds, IEnumerable<string> packageIdsToRemove = null)
|
||||
{
|
||||
var packageIdsList = new List<string>();
|
||||
foreach (var id in packageIds)
|
||||
{
|
||||
packageIdsList.Add(id);
|
||||
}
|
||||
|
||||
var packageIdsArray = packageIdsList.ToArray();
|
||||
|
||||
string[] packageIdsToRemoveArray = null;
|
||||
if (packageIdsToRemove != null)
|
||||
{
|
||||
var packageIdsToRemoveList = new List<string>();
|
||||
foreach (var id in packageIdsToRemove)
|
||||
{
|
||||
packageIdsToRemoveList.Add(id);
|
||||
}
|
||||
packageIdsToRemoveArray = packageIdsToRemoveList.ToArray();
|
||||
}
|
||||
|
||||
// Add a package to the project
|
||||
m_Request = Client.AddAndRemove(packageIdsArray, packageIdsToRemoveArray);
|
||||
m_PackagesToAddIds = packageIdsArray;
|
||||
EditorApplication.update += Progress;
|
||||
}
|
||||
|
||||
public bool IsCompleted()
|
||||
{
|
||||
return m_Request == null || m_Request.IsCompleted;
|
||||
}
|
||||
|
||||
void Progress()
|
||||
{
|
||||
if (!m_Request.IsCompleted) return;
|
||||
|
||||
EditorApplication.update -= Progress;
|
||||
if (m_Request.Status == StatusCode.Success)
|
||||
{
|
||||
Debug.Log("Installed: " + GetInstalledPackageId());
|
||||
}
|
||||
else if (m_Request.Status >= StatusCode.Failure)
|
||||
{
|
||||
// if the request has more than one package, it will only prompt error message for one
|
||||
// We should prompt all the failed packages
|
||||
Debug.Log("Package installation request with selected packages: " + String.Join(", ", m_PackagesToAddIds) +
|
||||
" failed. \n Reason: "+ m_Request.Error.message);
|
||||
}
|
||||
|
||||
OnInstalled?.Invoke(m_Request.Status == StatusCode.Success);
|
||||
}
|
||||
|
||||
string GetInstalledPackageId()
|
||||
{
|
||||
switch (m_Request)
|
||||
{
|
||||
case AddRequest addRequest:
|
||||
return addRequest.Result.packageId;
|
||||
case AddAndRemoveRequest addAndRemoveRequest:
|
||||
var packageIds = new List<string>();
|
||||
foreach (var packageInfo in addAndRemoveRequest.Result)
|
||||
{
|
||||
packageIds.Add(packageInfo.packageId);
|
||||
}
|
||||
return string.Join(", ", packageIds);
|
||||
default:
|
||||
throw new InvalidOperationException("Unknown request type");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Detects if any multiplayer package is installed by checking for services and Netcode installed packages.
|
||||
/// </summary>
|
||||
/// <returns>True if any package was detected, False otherwise</returns>
|
||||
public static bool IsAnyMultiplayerPackageInstalled()
|
||||
{
|
||||
var packagesToCheck = new []
|
||||
{
|
||||
"com.unity.netcode",
|
||||
"com.unity.netcode.gameobjects",
|
||||
"com.unity.services.multiplayer",
|
||||
"com.unity.transport",
|
||||
"com.unity.dedicated-server",
|
||||
"com.unity.services.cloudcode",
|
||||
"com.unity.multiplayer.playmode",
|
||||
"com.unity.services.vivox"
|
||||
// Note about "com.unity.services.core": it used to be installed only with multiplayer packages, but it is also a dependency of the analytics, which is now always installed.
|
||||
};
|
||||
|
||||
foreach (var package in packagesToCheck)
|
||||
{
|
||||
if (IsInstalled(package))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the installation process has finished.
|
||||
/// </summary>
|
||||
/// <returns>True if there is no current installer instance or installation is finished on the installer</returns>
|
||||
public static bool IsInstallationFinished()
|
||||
{
|
||||
return s_Installer == null || s_Installer.IsCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 676a3852811f4199813ce7f6dbac6880
|
||||
timeCreated: 1694784710
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a7dcde6448847648629a13d746ce966
|
||||
timeCreated: 1695036776
|
||||
@@ -0,0 +1,225 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Analytics;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window
|
||||
{
|
||||
internal class MultiplayerCenterWindow : EditorWindow, ISerializationCallbackReceiver
|
||||
{
|
||||
const string k_PathInPackage = "Packages/com.unity.multiplayer.center/Editor/MultiplayerCenterWindow";
|
||||
const string k_SpinnerClassName = "processing";
|
||||
const string k_SessionStateDomainReloadKey = "MultiplayerCenter.InDomainReload";
|
||||
|
||||
VisualElement m_SpinningIcon;
|
||||
|
||||
/// <summary>
|
||||
/// Nest the main container in a VisualElement to allow for easy enabling/disabling of the entire window but
|
||||
/// without the spinning icon.
|
||||
/// </summary>
|
||||
VisualElement m_MainContainer;
|
||||
|
||||
Vector2 m_WindowSize = new(350, 300);
|
||||
|
||||
public int CurrentTab => m_TabGroup.CurrentTab;
|
||||
|
||||
// Testing purposes only. We don't want to set CurrentTab from window
|
||||
internal int CurrentTabTest
|
||||
{
|
||||
get => m_TabGroup.CurrentTab;
|
||||
set => m_TabGroup.SetSelected(value);
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
bool m_RequestGettingStartedTabAfterDomainReload = false;
|
||||
|
||||
[SerializeField]
|
||||
TabGroup m_TabGroup;
|
||||
|
||||
/// <summary>
|
||||
/// This is the reference Multiplayer Center analytics implementation. This class owns it.
|
||||
/// </summary>
|
||||
IMultiplayerCenterAnalytics m_MultiplayerCenterAnalytics;
|
||||
|
||||
IMultiplayerCenterAnalytics MultiplayerCenterAnalytics => m_MultiplayerCenterAnalytics ??= MultiplayerCenterAnalyticsFactory.Create();
|
||||
|
||||
[MenuItem("Window/Multiplayer/Multiplayer Center")]
|
||||
public static void OpenWindow()
|
||||
{
|
||||
var showUtility = false; // TODO: figure out if it would be a good idea to have a utility window (always on top, cannot be tabbed)
|
||||
GetWindow<MultiplayerCenterWindow>(showUtility, "Multiplayer Center", true);
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
// Adjust window size based on dpi scaling
|
||||
var dpiScale = EditorGUIUtility.pixelsPerPoint;
|
||||
minSize = new Vector2(m_WindowSize.x * dpiScale, m_WindowSize.y * dpiScale);
|
||||
|
||||
AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeDomainReload;
|
||||
AssemblyReloadEvents.afterAssemblyReload -= OnAfterDomainReload;
|
||||
AssemblyReloadEvents.beforeAssemblyReload += OnBeforeDomainReload;
|
||||
AssemblyReloadEvents.afterAssemblyReload += OnAfterDomainReload;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeDomainReload;
|
||||
AssemblyReloadEvents.afterAssemblyReload -= OnAfterDomainReload;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes Tab from Recommendation to the Quickstart tab.
|
||||
/// </summary>
|
||||
public void RequestShowGettingStartedTabAfterDomainReload()
|
||||
{
|
||||
m_RequestGettingStartedTabAfterDomainReload = true;
|
||||
|
||||
// If no domain reload is necessary, this will be called.
|
||||
// If domain reload is necessary, the delay call will be forgotten, but CreateGUI will be called like after any domain reload
|
||||
// An extra delay is added to make sure that the visibility conditions of the Quickstart tab have been
|
||||
// fully evaluated. This solves MTT-8939.
|
||||
EditorApplication.delayCall += () =>
|
||||
{
|
||||
rootVisualElement.schedule.Execute(CallCreateGuiWithQuickstartRequest).ExecuteLater(300);
|
||||
};
|
||||
}
|
||||
|
||||
internal void DisableUiForInstallation()
|
||||
{
|
||||
SetSpinnerIconRotating();
|
||||
m_MainContainer.SetEnabled(false);
|
||||
}
|
||||
|
||||
internal void ReenableUiAfterInstallation()
|
||||
{
|
||||
RemoveSpinnerIconRotating();
|
||||
m_MainContainer.SetEnabled(true);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// Restore the GUI if it was cleared in OnBeforeSerialize.
|
||||
if (m_TabGroup == null || m_TabGroup.ViewCount < 1)
|
||||
{
|
||||
CreateGUI();
|
||||
}
|
||||
}
|
||||
|
||||
void CreateGUI()
|
||||
{
|
||||
rootVisualElement.name = "root";
|
||||
m_MainContainer ??= new VisualElement();
|
||||
m_MainContainer.name = "recommendation-tab-container";
|
||||
m_MainContainer.Clear();
|
||||
rootVisualElement.Add(m_MainContainer);
|
||||
m_SpinningIcon = new VisualElement();
|
||||
var theme = EditorGUIUtility.isProSkin ? "dark" : "light";
|
||||
rootVisualElement.styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>($"{k_PathInPackage}/UI/{theme}.uss"));
|
||||
rootVisualElement.styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>($"{k_PathInPackage}/UI/MultiplayerCenterWindow.uss"));
|
||||
|
||||
if (m_TabGroup == null || m_TabGroup.ViewCount < 1 || !m_TabGroup.TabsAreValid())
|
||||
m_TabGroup = new TabGroup(MultiplayerCenterAnalytics, new ITabView[] {new RecommendationTabView(), new GettingStartedTabView()});
|
||||
else // since we are not serializing the analytics provider, we need to set it again
|
||||
m_TabGroup.MultiplayerCenterAnalytics = MultiplayerCenterAnalytics;
|
||||
|
||||
m_TabGroup.CreateTabs();
|
||||
m_MainContainer.Add(m_TabGroup.Root);
|
||||
|
||||
var installationInProgress = !PackageManagement.IsInstallationFinished();
|
||||
SetWindowContentEnabled(installationInProgress, m_RequestGettingStartedTabAfterDomainReload);
|
||||
ShowAppropriateTab(installationInProgress);
|
||||
}
|
||||
|
||||
void ShowAppropriateTab(bool installationInProgress)
|
||||
{
|
||||
if (installationInProgress)
|
||||
{
|
||||
PackageManagement.RegisterToExistingInstaller(b => RequestShowGettingStartedTabAfterDomainReload());
|
||||
m_TabGroup.SetSelected(0, force: true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_RequestGettingStartedTabAfterDomainReload)
|
||||
{
|
||||
m_RequestGettingStartedTabAfterDomainReload = false;
|
||||
m_TabGroup.SetSelected(1, force: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TabGroup.SetSelected(m_TabGroup.CurrentTab, force: true);
|
||||
}
|
||||
}
|
||||
|
||||
void SetWindowContentEnabled(bool installationInProgress, bool quickstartRequested)
|
||||
{
|
||||
m_MainContainer.SetEnabled(!installationInProgress || quickstartRequested);
|
||||
|
||||
// if we are current already processing an installation, show the spinning icon
|
||||
if (installationInProgress)
|
||||
{
|
||||
// Wait a bit because the animation does not trigger when we call this in CreateGUI
|
||||
EditorApplication.delayCall += SetSpinnerIconRotating;
|
||||
}
|
||||
|
||||
rootVisualElement.Add(m_SpinningIcon);
|
||||
}
|
||||
|
||||
void CallCreateGuiWithQuickstartRequest()
|
||||
{
|
||||
// Interestingly, setting this before registering the delay call sometimes results in the value
|
||||
// being false when CreateGUI starts, so we set it again here.
|
||||
m_RequestGettingStartedTabAfterDomainReload = true;
|
||||
CreateGUI();
|
||||
}
|
||||
|
||||
void SetSpinnerIconRotating()
|
||||
{
|
||||
m_SpinningIcon.AddToClassList(k_SpinnerClassName);
|
||||
}
|
||||
|
||||
void RemoveSpinnerIconRotating()
|
||||
{
|
||||
m_SpinningIcon?.RemoveFromClassList(k_SpinnerClassName);
|
||||
}
|
||||
|
||||
void ClearTabs()
|
||||
{
|
||||
m_TabGroup?.Clear();
|
||||
m_TabGroup = null;
|
||||
}
|
||||
|
||||
// This will not get called when the Editor is closed.
|
||||
void OnDestroy()
|
||||
{
|
||||
ClearTabs();
|
||||
}
|
||||
|
||||
static void OnBeforeDomainReload()
|
||||
{
|
||||
SessionState.SetBool(k_SessionStateDomainReloadKey, true);
|
||||
}
|
||||
|
||||
static void OnAfterDomainReload()
|
||||
{
|
||||
SessionState.SetBool(k_SessionStateDomainReloadKey, false);
|
||||
}
|
||||
|
||||
public void OnBeforeSerialize()
|
||||
{
|
||||
// ClearTabs if the Window gets serialized, but we are not in DomainReload
|
||||
// This happens when the Editor closes or the WindowLayout is saved by the user.
|
||||
// This ensures that the State of the Tabs is not serialized into the WindowLayout of the User.
|
||||
if (SessionState.GetBool(k_SessionStateDomainReloadKey, false) == false)
|
||||
{
|
||||
ClearTabs();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnAfterDeserialize()
|
||||
{
|
||||
// Empty on purpose.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e006510f5f4425ca971c7de0bfbb77a
|
||||
timeCreated: 1695036798
|
||||
@@ -0,0 +1,197 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Analytics;
|
||||
using Unity.Multiplayer.Center.Common;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
using Unity.Multiplayer.Center.Recommendations;
|
||||
using Unity.Multiplayer.Center.Window.UI;
|
||||
using Unity.Multiplayer.Center.Window.UI.RecommendationView;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window
|
||||
{
|
||||
internal class RecommendationTabView : ITabView
|
||||
{
|
||||
QuestionnaireView m_QuestionnaireView;
|
||||
RecommendationView m_RecommendationView;
|
||||
|
||||
RecommendationViewBottomBar m_BottomBarView;
|
||||
|
||||
bool m_IsVisible;
|
||||
bool m_ShouldRefresh = true;
|
||||
|
||||
[SerializeField]
|
||||
PreReleaseHandling m_PreReleaseHandling = new();
|
||||
|
||||
[field: SerializeField] // Marked as redundant by Rider, but it is not.
|
||||
public string Name { get; private set; }
|
||||
|
||||
public VisualElement RootVisualElement { get; set; }
|
||||
public IMultiplayerCenterAnalytics MultiplayerCenterAnalytics { get; set; }
|
||||
|
||||
// Access to QuestionnaireView for testing purposes
|
||||
internal QuestionnaireView QuestionnaireView => m_QuestionnaireView;
|
||||
|
||||
public RecommendationTabView(string name = "Recommendation")
|
||||
{
|
||||
Name = name;
|
||||
m_PreReleaseHandling.OnAllChecksFinished += PatchData;
|
||||
m_PreReleaseHandling.CheckForUpdates();
|
||||
Undo.undoRedoPerformed += OnUndoRedoPerformed;
|
||||
}
|
||||
|
||||
void OnUndoRedoPerformed()
|
||||
{
|
||||
UserChoicesObject.instance.Save();
|
||||
m_QuestionnaireView?.Refresh();
|
||||
UpdateRecommendation(keepSelection:true);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
|
||||
m_RecommendationView?.Clear();
|
||||
m_QuestionnaireView?.Clear();
|
||||
RootVisualElement?.Clear();
|
||||
m_QuestionnaireView = null;
|
||||
m_RecommendationView = null;
|
||||
}
|
||||
|
||||
public void SetVisible(bool visible)
|
||||
{
|
||||
RootVisualElement.style.display = visible ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
m_IsVisible = visible;
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
Debug.Assert(MultiplayerCenterAnalytics != null, "MultiplayerCenterAnalytics != null");
|
||||
RefreshPreReleaseHandling();
|
||||
if (!m_ShouldRefresh && RootVisualElement.childCount > 0) return;
|
||||
CreateStandardView();
|
||||
m_ShouldRefresh = false;
|
||||
}
|
||||
|
||||
void RefreshPreReleaseHandling()
|
||||
{
|
||||
if (!m_PreReleaseHandling.IsReady)
|
||||
{
|
||||
m_PreReleaseHandling.OnAllChecksFinished += PatchData;
|
||||
m_PreReleaseHandling.CheckForUpdates();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PreReleaseHandling.PatchRecommenderSystemData();
|
||||
}
|
||||
}
|
||||
|
||||
void CreateStandardView()
|
||||
{
|
||||
Clear();
|
||||
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
|
||||
Undo.undoRedoPerformed += OnUndoRedoPerformed;
|
||||
MigrateUserChoices();
|
||||
|
||||
// We need this because Bottom bar is a part of the Recommendations Tab and it should always stay
|
||||
// at the bottom of the view. So we need to make sure that the root tab element is always 100% height.
|
||||
RootVisualElement.style.height = Length.Percent(100);
|
||||
|
||||
var horizontalContainer = new TwoPaneSplitView(0, 250, TwoPaneSplitViewOrientation.Horizontal);
|
||||
horizontalContainer.AddToClassList(StyleClasses.MainSplitView);
|
||||
horizontalContainer.name = "recommendation-tab-split-view";
|
||||
|
||||
// This is used to make sure the left side does not grow to 100% as this is what would happen by default.
|
||||
// It feels not 100% correct. But it seems to be the only way to match the height of the 2 sides with how
|
||||
// our views are build currently.
|
||||
horizontalContainer.contentContainer.style.position = Position.Relative;
|
||||
|
||||
m_QuestionnaireView = new QuestionnaireView(QuestionnaireObject.instance.Questionnaire);
|
||||
m_QuestionnaireView.OnQuestionnaireDataChanged += HandleQuestionnaireDataChanged;
|
||||
m_QuestionnaireView.OnPresetSelected += OnPresetSelected;
|
||||
m_QuestionnaireView.Root.AddToClassList(StyleClasses.MainSplitViewLeft);
|
||||
horizontalContainer.Add(m_QuestionnaireView.Root);
|
||||
|
||||
m_RecommendationView = new RecommendationView();
|
||||
m_RecommendationView.Root.AddToClassList(StyleClasses.MainSplitViewRight);
|
||||
horizontalContainer.Add(m_RecommendationView.Root);
|
||||
RootVisualElement.Add(horizontalContainer);
|
||||
|
||||
m_BottomBarView = new RecommendationViewBottomBar(MultiplayerCenterAnalytics);
|
||||
m_RecommendationView.OnPackageSelectionChanged +=
|
||||
() => m_BottomBarView.UpdatePackagesToInstall(m_RecommendationView.CurrentRecommendation, m_RecommendationView.AllPackages);
|
||||
RootVisualElement.Add(m_BottomBarView);
|
||||
UpdateRecommendation(keepSelection: true);
|
||||
|
||||
m_BottomBarView.SetInfoTextForCheckingPackages(!m_PreReleaseHandling.IsReady);
|
||||
}
|
||||
|
||||
void HandleQuestionnaireDataChanged()
|
||||
{
|
||||
UpdateRecommendation(keepSelection: false);
|
||||
}
|
||||
|
||||
static void MigrateUserChoices()
|
||||
{
|
||||
var questionnaire = QuestionnaireObject.instance.Questionnaire;
|
||||
var userChoices = UserChoicesObject.instance;
|
||||
|
||||
// make sure the version of the questionnaire is the same as the one in the user choices.
|
||||
if (questionnaire.Version != userChoices.QuestionnaireVersion && userChoices.UserAnswers.Answers.Count > 0)
|
||||
{
|
||||
Logic.MigrateUserChoices(questionnaire, userChoices);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateRecommendation(bool keepSelection)
|
||||
{
|
||||
var questionnaire = QuestionnaireObject.instance.Questionnaire;
|
||||
var userChoices = UserChoicesObject.instance;
|
||||
|
||||
var errors = Logic.ValidateAnswers(questionnaire, userChoices.UserAnswers);
|
||||
foreach (var error in errors)
|
||||
{
|
||||
Debug.LogError(error);
|
||||
}
|
||||
|
||||
var recommendation = userChoices.Preset == Preset.None? null
|
||||
: RecommenderSystem.GetRecommendation(questionnaire, userChoices.UserAnswers);
|
||||
m_PreReleaseHandling.PatchPackages(recommendation);
|
||||
if (keepSelection)
|
||||
{
|
||||
RecommendationUtils.ApplyPreviousSelection(recommendation, userChoices.SelectedSolutions);
|
||||
}
|
||||
else if (recommendation != null) // we only send the event if there is a recommendation and it is a new one
|
||||
{
|
||||
MultiplayerCenterAnalytics.SendRecommendationEvent(userChoices.UserAnswers, userChoices.Preset);
|
||||
}
|
||||
|
||||
m_RecommendationView.UpdateRecommendation(recommendation, m_PreReleaseHandling);
|
||||
m_BottomBarView.UpdatePackagesToInstall(recommendation, m_RecommendationView.AllPackages);
|
||||
}
|
||||
|
||||
void PatchData()
|
||||
{
|
||||
m_PreReleaseHandling.PatchRecommenderSystemData();
|
||||
m_PreReleaseHandling.OnAllChecksFinished -= PatchData;
|
||||
m_ShouldRefresh = true;
|
||||
if(m_IsVisible)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void OnPresetSelected(Preset preset)
|
||||
{
|
||||
var (resultAnswerData, recommendation) = Logic.ApplyPresetToAnswerData(
|
||||
UserChoicesObject.instance.UserAnswers, preset, QuestionnaireObject.instance.Questionnaire);
|
||||
|
||||
UserChoicesObject.instance.UserAnswers = resultAnswerData;
|
||||
UserChoicesObject.instance.Save();
|
||||
|
||||
if (recommendation != null)
|
||||
MultiplayerCenterAnalytics.SendRecommendationEvent(resultAnswerData, preset);
|
||||
|
||||
m_QuestionnaireView.Refresh();
|
||||
m_RecommendationView.UpdateRecommendation(recommendation, m_PreReleaseHandling);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 052c764978664486a9c04518899ddf57
|
||||
timeCreated: 1700489744
|
||||
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Multiplayer.Center.Analytics;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
using Unity.Multiplayer.Center.Recommendations;
|
||||
using Unity.Multiplayer.Center.Window.UI;
|
||||
using UnityEditor;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window
|
||||
{
|
||||
class RecommendationViewBottomBar : VisualElement
|
||||
{
|
||||
readonly Label m_PackageCount;
|
||||
readonly Button m_InstallPackageButton;
|
||||
readonly Label m_InfoLabel;
|
||||
|
||||
IMultiplayerCenterAnalytics m_Analytics;
|
||||
|
||||
MultiplayerCenterWindow m_Window = EditorWindow.GetWindow<MultiplayerCenterWindow>();
|
||||
List<string> m_PackagesToInstallIds = new ();
|
||||
List<string> m_PackagesToInstallNames = new ();
|
||||
RecommendationViewData m_RecommendationViewData;
|
||||
SolutionsToRecommendedPackageViewData m_SolutionToPackageData;
|
||||
|
||||
public RecommendationViewBottomBar(IMultiplayerCenterAnalytics analytics)
|
||||
{
|
||||
m_Analytics = analytics;
|
||||
name = "bottom-bar";
|
||||
m_PackageCount = new Label {name = "package-count"};
|
||||
m_InfoLabel = new Label();
|
||||
|
||||
// Setup Install Button
|
||||
m_InstallPackageButton = new Button(OnInstallButtonClicked) {text = "Install Packages"};
|
||||
m_InstallPackageButton.AddToClassList(StyleClasses.NextStepButton);
|
||||
|
||||
// Put the button in a container
|
||||
var installPackageContainer = new VisualElement() {name = "install-package-container"};
|
||||
installPackageContainer.Add(m_InstallPackageButton);
|
||||
|
||||
Add(m_PackageCount);
|
||||
Add(m_InfoLabel);
|
||||
Add(installPackageContainer);
|
||||
}
|
||||
|
||||
void OnInstallButtonClicked()
|
||||
{
|
||||
if (!PackageManagement.IsAnyMultiplayerPackageInstalled() || WarnDialogForPackageInstallation())
|
||||
{
|
||||
SendInstallationAnalyticsEvent();
|
||||
InstallSelectedPackagesAndExtension();
|
||||
}
|
||||
}
|
||||
|
||||
void SendInstallationAnalyticsEvent()
|
||||
{
|
||||
var answerObject = UserChoicesObject.instance;
|
||||
var selectedNetcode = RecommendationUtils.GetSelectedNetcode(m_RecommendationViewData);
|
||||
var selectedHostingModel = RecommendationUtils.GetSelectedHostingModel(m_RecommendationViewData);
|
||||
m_Analytics.SendInstallationEvent(answerObject.UserAnswers, answerObject.Preset,
|
||||
AnalyticsUtils.GetPackagesWithAnalyticsFormat(m_RecommendationViewData, m_SolutionToPackageData),
|
||||
selectedNetcode.Title, selectedNetcode.RecommendationType == RecommendationType.MainArchitectureChoice,
|
||||
selectedHostingModel.Title, selectedHostingModel.RecommendationType == RecommendationType.MainArchitectureChoice);
|
||||
}
|
||||
|
||||
bool WarnDialogForPackageInstallation()
|
||||
{
|
||||
var warningMessage =
|
||||
"Ensure compatibility with your current multiplayer packages before installing or upgrading the following:\n" +
|
||||
string.Join("\n", m_PackagesToInstallNames);
|
||||
return EditorUtility.DisplayDialog("Install Packages", warningMessage, "OK", "Cancel");
|
||||
}
|
||||
|
||||
void InstallSelectedPackagesAndExtension()
|
||||
{
|
||||
SetInfoTextForInstallation(isInstalling:true);
|
||||
m_Window.DisableUiForInstallation();
|
||||
PackageManagement.InstallPackages(m_PackagesToInstallIds, onAllInstalled: OnInstallationFinished);
|
||||
}
|
||||
|
||||
void OnInstallationFinished(bool success)
|
||||
{
|
||||
SetInfoTextForInstallation(isInstalling:false);
|
||||
m_Window.RequestShowGettingStartedTabAfterDomainReload();
|
||||
m_Window.ReenableUiAfterInstallation();
|
||||
}
|
||||
|
||||
public void UpdatePackagesToInstall(RecommendationViewData data, SolutionsToRecommendedPackageViewData packageViewData)
|
||||
{
|
||||
m_RecommendationViewData = data;
|
||||
m_SolutionToPackageData = packageViewData;
|
||||
var packages = RecommendationUtils.PackagesToInstall(data, packageViewData);
|
||||
RecommendationUtils.GetPackagesWithAdditionalPackages(packages, out m_PackagesToInstallIds, out m_PackagesToInstallNames, out var toolTip);
|
||||
m_PackageCount.tooltip = toolTip;
|
||||
|
||||
// Note: quickstart is counted in the list of packages to install, but not the names
|
||||
m_PackageCount.text = $"Packages to install: {m_PackagesToInstallNames.Count}";
|
||||
// if the list is empty, disable the button
|
||||
m_InstallPackageButton.SetEnabled(m_PackagesToInstallNames.Count > 0);
|
||||
}
|
||||
|
||||
internal void SetInfoTextForInstallation(bool isInstalling)
|
||||
{
|
||||
SetInfoLabelTextAndVisibility("Downloading packages, please wait ...", isInstalling);
|
||||
}
|
||||
|
||||
internal void SetInfoTextForCheckingPackages(bool isChecking)
|
||||
{
|
||||
SetInfoLabelTextAndVisibility("Querying packages information ...", isChecking);
|
||||
|
||||
// Handle the case of reopening the window during the installation.
|
||||
// When reopening the window, the packages are being checked. Once that check is done, we still want to
|
||||
// display the installation package text if there is an ongoing installation.
|
||||
if(!isChecking && !PackageManagement.IsInstallationFinished())
|
||||
SetInfoTextForInstallation(isInstalling:true);
|
||||
}
|
||||
|
||||
void SetInfoLabelTextAndVisibility(string text, bool isVisible)
|
||||
{
|
||||
m_InfoLabel.text = text;
|
||||
m_InfoLabel.visible = isVisible;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d1084186a4004823abee9b87c8ddf198
|
||||
timeCreated: 1710930997
|
||||
@@ -0,0 +1,197 @@
|
||||
using System;
|
||||
using Unity.Multiplayer.Center.Analytics;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window
|
||||
{
|
||||
// Note: there is a TabView API in UI Toolkit, but only starting from 2023.2
|
||||
internal interface ITabView
|
||||
{
|
||||
/// <summary>
|
||||
/// The name as displayed in the tab button
|
||||
/// Should be serialized.
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The root visual element of the tab view.
|
||||
/// The setter will only be used if the root visual element is null when the tab is created.
|
||||
/// </summary>
|
||||
VisualElement RootVisualElement { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Sets the tab view visible or not.
|
||||
/// </summary>
|
||||
/// <param name="visible">If true, visible.</param>
|
||||
void SetVisible(bool visible);
|
||||
|
||||
/// <summary>
|
||||
/// If true the Tab can be selected by the user.
|
||||
/// </summary>
|
||||
bool IsEnabled => true;
|
||||
|
||||
/// <summary>
|
||||
/// Tooltip which will be shown on the Tab Button.
|
||||
/// </summary>
|
||||
string ToolTip => "";
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes the UI Elements according to latest data.
|
||||
/// If the UI is not created yet, it does it.
|
||||
/// </summary>
|
||||
void Refresh();
|
||||
|
||||
/// <summary>
|
||||
/// Unregister all events and clear UI Elements
|
||||
/// </summary>
|
||||
void Clear();
|
||||
|
||||
/// <summary>
|
||||
/// The Multiplayer Center Analytics provider.
|
||||
/// </summary>
|
||||
IMultiplayerCenterAnalytics MultiplayerCenterAnalytics { get; set; }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
internal class TabGroup
|
||||
{
|
||||
const string k_TabViewName = "tab-view";
|
||||
const string k_TabZoneName = "tab-zone";
|
||||
const string k_TabButtonUssClass = "tab-button";
|
||||
|
||||
// The container for all the tabs
|
||||
const string k_TabsContainerUssClass ="tabs-container";
|
||||
|
||||
// Gets applied to the root of each tab
|
||||
const string k_TabContentUssClass = "tab-content";
|
||||
|
||||
[field: SerializeField]
|
||||
public int CurrentTab { get; private set; } = -1;
|
||||
|
||||
public int ViewCount => m_TabViews?.Length ?? 0;
|
||||
|
||||
VisualElement[] m_TabButtons;
|
||||
|
||||
[SerializeReference]
|
||||
ITabView[] m_TabViews;
|
||||
|
||||
public VisualElement Root { get; private set; }
|
||||
|
||||
VisualElement m_MainContainer;
|
||||
|
||||
IMultiplayerCenterAnalytics m_MultiplayerCenterAnalytics;
|
||||
|
||||
internal IMultiplayerCenterAnalytics MultiplayerCenterAnalytics
|
||||
{
|
||||
get => m_MultiplayerCenterAnalytics;
|
||||
set
|
||||
{
|
||||
m_MultiplayerCenterAnalytics = value;
|
||||
foreach (var tabView in m_TabViews)
|
||||
{
|
||||
if(tabView != null)
|
||||
tabView.MultiplayerCenterAnalytics = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TabGroup(IMultiplayerCenterAnalytics analytics, ITabView[] tabViews, int defaultIndex = 0)
|
||||
{
|
||||
m_TabViews = tabViews;
|
||||
CurrentTab = defaultIndex;
|
||||
MultiplayerCenterAnalytics = analytics;
|
||||
}
|
||||
|
||||
public void SetSelected(int index, bool force = false)
|
||||
{
|
||||
// Select the first tab, if the requested tab is not enabled.
|
||||
// This assumes the first tab is always enabled.
|
||||
if (!m_TabViews[index].IsEnabled)
|
||||
index = 0;
|
||||
|
||||
if (index == CurrentTab && !force)
|
||||
return;
|
||||
|
||||
if (CurrentTab >= 0 && CurrentTab < m_TabViews.Length)
|
||||
{
|
||||
m_TabButtons[CurrentTab].RemoveFromClassList("selected");
|
||||
m_TabViews[CurrentTab].SetVisible(false);
|
||||
}
|
||||
|
||||
EditorPrefs.SetInt(PlayerSettings.productName + "_MultiplayerCenter_TabIndex", index);
|
||||
CurrentTab = index;
|
||||
m_TabViews[CurrentTab].Refresh();
|
||||
m_TabButtons[CurrentTab].AddToClassList("selected");
|
||||
m_TabViews[CurrentTab].SetVisible(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates the visual elements for all the tabs.
|
||||
/// Use this to create the tabs for the first time the UI is shown or after a domain reload.
|
||||
/// </summary>
|
||||
public void CreateTabs()
|
||||
{
|
||||
Root ??= new VisualElement();
|
||||
m_MainContainer ??= new VisualElement();
|
||||
|
||||
if (Root.Q(k_TabZoneName) != null)
|
||||
Root.Q(k_TabZoneName).RemoveFromHierarchy();
|
||||
|
||||
var tabZone = new VisualElement() {name = k_TabZoneName};
|
||||
Root.Add(tabZone);
|
||||
Root.name = k_TabViewName;
|
||||
m_TabButtons = new VisualElement[m_TabViews.Length];
|
||||
for (var i = 0; i < m_TabViews.Length; i++)
|
||||
{
|
||||
var tabView = m_TabViews[i];
|
||||
var index = i; // copy for closure
|
||||
var tabButton = new Button(() => SetSelected(index));
|
||||
tabButton.enabledSelf = tabView.IsEnabled;
|
||||
tabButton.tooltip = tabView.ToolTip;
|
||||
tabButton.AddToClassList(k_TabButtonUssClass);
|
||||
tabButton.text = tabView.Name;
|
||||
tabZone.Add(tabButton);
|
||||
m_TabButtons[i] = tabButton;
|
||||
tabView.RootVisualElement ??= new VisualElement();
|
||||
tabView.RootVisualElement.AddToClassList(k_TabContentUssClass);
|
||||
tabView.RootVisualElement.style.display = DisplayStyle.None;
|
||||
m_MainContainer.Add(m_TabViews[i].RootVisualElement);
|
||||
}
|
||||
|
||||
m_MainContainer.AddToClassList(k_TabsContainerUssClass);
|
||||
Root.Add(m_MainContainer);
|
||||
CurrentTab = EditorPrefs.GetInt(PlayerSettings.productName + "_MultiplayerCenter_TabIndex", 0);
|
||||
}
|
||||
|
||||
static void SetVisible(VisualElement e, bool visible)
|
||||
{
|
||||
e.style.display = visible ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
if(m_TabViews == null)
|
||||
return;
|
||||
|
||||
foreach (var tabView in m_TabViews)
|
||||
{
|
||||
tabView?.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public bool TabsAreValid()
|
||||
{
|
||||
if (m_TabViews == null)
|
||||
return false;
|
||||
|
||||
foreach (var tab in m_TabViews)
|
||||
{
|
||||
if (tab == null)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fdefed6b790f4373b0feb7d25854d8ac
|
||||
timeCreated: 1700582398
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9bd34ec3fe8f4aed936c3a0cf2f32e56
|
||||
timeCreated: 1695037065
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 34a09eb4d6e8d44989194a25525c5147
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,127 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f78a544322c742b89e63fb68557b1d2
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 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: 0
|
||||
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: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 32
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 631 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b2ce704e56cc84fb3b347499263c6244
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c7a38e6eccbfc49778cb8b77f594a971
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ad1d29f4654194951a3c8bf507914d05
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 987 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a23c0dd570fd44b57a03a8880002fcca
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 897 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dce12af736e0a4a1ba35d6424f897dc9
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7711b0cc806d430b8a95f1e33ec3649
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 657 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3fe892784421e47f5aa40c2784a6cb3e
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38b78df4a34c94fa6a52c90239606ff1
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 432 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d63245ece6d8f476c8c7ca24da9937f6
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 802 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0354877031b64465ea7e5cafea1a2653
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 84e4bbd00035e4671bf14e0380a89001
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2adffcc506285402aa795dee6f3166d0
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 424a8de5def3b46dcb08edd00ad1c7bd
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 974 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9669051ff70449b5923861e0e0b8838
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2cb589d4e01184d928bb698f06e77561
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99da7b3894f364efdb5fa1443952a55d
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 83b28bcaaf34b4fd580114fb05d9f160
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 407 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1daed49eec0f94f7ebb36dfef6159884
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 609 B |
@@ -0,0 +1,128 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b58a826ca804e4c67bab4283ad5a6102
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,114 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9d9689eab72c8480c90679f4dcf18820
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 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: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 64
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 427 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4616b2fa4acd1429e931835b80966c2a
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 841 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0423146d9f51c4563a0f2a8200b6cd38
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 236 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 679f9999c6f8f497e806a2d5d0511879
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 309 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9431e8221045c4af189b2fa7174b9e9f
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,127 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd70cd654275d47db807e918055e004f
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 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: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 32
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 6.3 KiB |
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dab91f148d99946e7b3c3a87ecf4b973
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,114 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 525a6cca8dd9a4d28875a8fe824710d9
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 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: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 64
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 428 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77be953cf28de42a4ad8532539fef3f5
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 792 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 318df756abab5463e9aa361360784865
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 235 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b4c88814ec6241eb8e327515399c006
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 322 B |
@@ -0,0 +1,115 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a6fd0c627f5aa48fa81512221e70a11e
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,127 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 741761e72e6f24446bd8ba03ea3d0261
|
||||
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
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 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: 0
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
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: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 32
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 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
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,626 @@
|
||||
#root {
|
||||
--dark-grey: var(--unity-colors-window-background);
|
||||
--standard-grey: var(--unity-colors-app_toolbar_button-background-hover);
|
||||
--standard-background-color: var(--unity-colors-window-background);
|
||||
--light-grey: var(--unity-colors-dropdown-background);
|
||||
--border-color: var(--unity-colors-dropdown-border);
|
||||
--card-background: var(--unity-colors-inspector_titlebar-border_accent);
|
||||
|
||||
--doc-separator-color: #5D5D5D;
|
||||
|
||||
--tab-button-bar-height: 32px;
|
||||
|
||||
--bottom-bar-height: 56px;
|
||||
|
||||
--card-width: 300px;
|
||||
--card-min-width: 200px;
|
||||
--card-poster-icon-width: 92px;
|
||||
--card-poster-icon-height: 64px;
|
||||
|
||||
--checkmark-icon: url("Icons/Check.png");
|
||||
--questionnaire-empty-view-icon: url('Icons/EmptyViewIcon.png');
|
||||
}
|
||||
|
||||
.color-recommendation-badge {
|
||||
color: var(--recommendation-badge-color);
|
||||
border-color: var(--recommendation-badge-color);
|
||||
}
|
||||
|
||||
.icon{
|
||||
min-width: 16px;
|
||||
max-width: 16px;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
}
|
||||
|
||||
Label{
|
||||
overflow: hidden;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.view-headline{
|
||||
font-size: 14px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
.recommendation-view-headline{
|
||||
font-size: 14px;
|
||||
padding-bottom: 16px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.icon-package-manager{
|
||||
background-image: var(--package-manager-icon);
|
||||
}
|
||||
|
||||
.icon-questionmark {
|
||||
background-image: var(--info-icon);
|
||||
}
|
||||
|
||||
.icon-three-dots {
|
||||
background-image: var(--three-dot-icon);
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
}
|
||||
|
||||
.icon-package-installed{
|
||||
margin-left: 4px;
|
||||
background-image: var(--package-installed-icon);
|
||||
}
|
||||
|
||||
.icon-NGO{background-image:url('Icons/Ngo.png')}
|
||||
.icon-N4E{background-image:url('Icons/N4E.png')}
|
||||
.icon-LS{background-image:url('Icons/ClientHosted.png')}
|
||||
.icon-DS{background-image:url('Icons/DedicatedServer.png')}
|
||||
.icon-DA{background-image:url('Icons/DistributedAuthority.png')}
|
||||
.icon-CustomNetcode{background-image:url('Icons/CustomNetcode.png')}
|
||||
.icon-NoNetcode{background-image:url('Icons/NoNetcode.png')}
|
||||
.icon-CloudCode{background-image:url('Icons/CloudCode.png')}
|
||||
|
||||
/*Utilities*/
|
||||
|
||||
.processing{
|
||||
background-image: var(--spinner-icon-big);
|
||||
rotate: 360000deg;
|
||||
transition-property: rotate;
|
||||
transition-timing-function: linear;
|
||||
transition-duration: 2000s;
|
||||
min-width: 64px;
|
||||
max-width: 64px;
|
||||
min-height: 64px;
|
||||
max-height: 64px;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
translate: -50% -50%;
|
||||
}
|
||||
|
||||
.flex-wrap{
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.color-grey {
|
||||
color: var(--badge-color-grey);
|
||||
opacity: 0.8;
|
||||
border-color: var(--badge-color-grey);
|
||||
}
|
||||
|
||||
.highlight-background-color {
|
||||
background-color: var(--standard-background-color);
|
||||
}
|
||||
|
||||
.next-step-button {
|
||||
padding: 6px;
|
||||
margin-top: 6px;
|
||||
min-height: 32px;
|
||||
max-height: 32px;
|
||||
}
|
||||
|
||||
.packageIcon {
|
||||
background-image: var(--package-icon);
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
margin-right: 4px;
|
||||
background-size: 16px 16px;
|
||||
}
|
||||
|
||||
.questionnaireIcon {
|
||||
background-image: var(--questionnaire-icon);
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
background-size: 14px 14px;
|
||||
}
|
||||
|
||||
/* Questionnaire view */
|
||||
|
||||
#questionnaire-view {
|
||||
margin: 10px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
|
||||
#questionnaire-view Label {
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
#questionnaire-view Toggle {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
#advanced-questions > Toggle {
|
||||
-unity-font-style: bold;
|
||||
}
|
||||
|
||||
/*question-view One single question in question-view*/
|
||||
|
||||
.question-view{
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
#advanced-questions .question-view > Label {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.question-view Toggle {
|
||||
background-color: var(--dark-grey);
|
||||
}
|
||||
|
||||
.question-view .question-text {
|
||||
margin: 5px;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.question-view .unity-radio-button__label {
|
||||
left: 32px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.question-view .unity-radio-button__input {
|
||||
position: absolute;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
.mandatory-question Label {
|
||||
padding-bottom: 4px;
|
||||
-unity-font-style: bold;
|
||||
}
|
||||
|
||||
.question-section {
|
||||
}
|
||||
|
||||
.question-section__no-scrollbar{
|
||||
align-content: flex-start;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/*bottom bar - holding the install button, spinning icon and the package count */
|
||||
#bottom-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
max-height: var(--bottom-bar-height);
|
||||
min-height: var(--bottom-bar-height);
|
||||
flex-direction: row;
|
||||
border-width: 1px;
|
||||
background-color: var(--unity-colors-window-background);
|
||||
border-top-color: var(--border-color);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#bottom-bar #install-package-container {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
EnumField, DropdownField {
|
||||
margin: 0px;
|
||||
min-height: 19px;
|
||||
}
|
||||
|
||||
/* recommendation view*/
|
||||
|
||||
#main-sections-container{
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.main-section{
|
||||
background-color: var(--card-background);
|
||||
border-width: 1px;
|
||||
border-color: var(--border-color);
|
||||
padding-bottom: 16px;
|
||||
margin: 0px 8px 8px 0px;
|
||||
width: var(--card-width);
|
||||
min-width: var(--card-min-width);
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.main-section .recommendation-item{
|
||||
padding: 0px;
|
||||
margin-left: -4px;
|
||||
margin-right: -4px;
|
||||
|
||||
}
|
||||
|
||||
.main-section DropdownField{
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.main-section .unity-help-box{
|
||||
margin-top: 4px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.sub-section{
|
||||
margin-top: 0px;
|
||||
margin-left: 0px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.subsection-headline{
|
||||
font-size: 12px;
|
||||
-unity-font-style: bold;
|
||||
}
|
||||
|
||||
.subsection-headline > .unity-base-field{
|
||||
margin-top: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/*recommendation section - foldout that holds recommendations*/
|
||||
#card-headline{
|
||||
font-size: 12px;
|
||||
-unity-font-style: bold;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
#associated-features-headline{
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
#card-poster-image{
|
||||
margin-right: -16px;
|
||||
margin-left: -16px;
|
||||
min-width: 100%;
|
||||
min-height: 92px;
|
||||
|
||||
background-color: var(--card-poster-image-bg-color);
|
||||
margin-bottom: 16px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#card-poster-image >*{
|
||||
|
||||
min-width: var(--card-poster-icon-width);
|
||||
max-width: var(--card-poster-icon-width);
|
||||
min-height: var(--card-poster-icon-height);
|
||||
max-height: var(--card-poster-icon-height);
|
||||
}
|
||||
|
||||
#recommendation-view-section-container {
|
||||
flex-grow: 1;
|
||||
margin-left: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/*recommendation item - One Item that a user can select or unselect within recommendation section*/
|
||||
|
||||
.recommendation-item {
|
||||
border-width: 1px;
|
||||
-unity-font-style: normal;
|
||||
background-color: var(--card-background);
|
||||
overflow: hidden;
|
||||
flex-grow: 0;
|
||||
flex-shrink: 1;
|
||||
min-height: 32px;
|
||||
margin-top: 4px;
|
||||
padding:4px;
|
||||
}
|
||||
|
||||
.recommendation-item #sub-info-text {
|
||||
margin-left: 20px;
|
||||
-unity-font-style: italic;
|
||||
white-space: normal;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.recommendation-item #header {
|
||||
|
||||
flex-direction: row;
|
||||
align-content: center;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.recommendation-item-top-left-container {
|
||||
flex-direction: row;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.recommendation-item-top-left-container Label {
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.recommendation-item-top-right-container {
|
||||
max-width: 64px;
|
||||
flex-shrink: 0;
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.badge {
|
||||
font-size: 9px;
|
||||
padding: 1px;
|
||||
margin-left: 4px;
|
||||
padding-left: 3px;
|
||||
padding-right: 3px;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
min-width: 24px;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.pre-release-badge {
|
||||
color: var(--pre-release-badge-color);
|
||||
background-color: var(--pre-release-badge-color-bg);
|
||||
border-color: var(--pre-release-badge-color);
|
||||
}
|
||||
|
||||
/*Tab views - if we are sure we will not support 2022, we should merge this with TabView uss*/
|
||||
#tab-view{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#tab-zone {
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: var(--tab-button-bar-height);
|
||||
max-height: var(--tab-button-bar-height);
|
||||
}
|
||||
|
||||
.tabs-container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.tab-content{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#recommendation-tab-container
|
||||
{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.main-split-view {
|
||||
border-top-width: 1px;
|
||||
border-top-color: var(--border-color);
|
||||
height: 100%;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.main-split-view-right{
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#unity-dragline-anchor{
|
||||
background-color: var(--border-color);
|
||||
}
|
||||
|
||||
#unity-dragline-anchor:hover{
|
||||
background-color: white;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.tab-button {
|
||||
margin: 0;
|
||||
padding-top: 4px;
|
||||
border-width: 0px;
|
||||
border-bottom-width: 2px;
|
||||
min-height: var(--tab-button-bar-height);
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
border-color: var(--dark-grey);
|
||||
background-color: var(--dark-grey);
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
|
||||
.tab-button:hover {
|
||||
background-color: var(--standard-grey);
|
||||
}
|
||||
|
||||
.tab-button.selected {
|
||||
border-bottom-width: 2px;
|
||||
border-bottom-color: var(--tab-button-highlight-color);
|
||||
}
|
||||
|
||||
/* Getting started views */
|
||||
.onboarding-categories{
|
||||
margin: 0px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.onboarding-categories .unity-button-group{
|
||||
flex-direction: column;
|
||||
align-self: stretch;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.onboarding-category-button{
|
||||
margin: 0px;
|
||||
padding-left: 20px;
|
||||
-unity-text-align: middle-left;
|
||||
width: 100%;
|
||||
min-height: 28px;
|
||||
border-width: 0px;
|
||||
background-color: transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
.onboarding-category-button:hover {
|
||||
background-color: var(--standard-grey);
|
||||
}
|
||||
|
||||
.onboarding-category-button:checked {
|
||||
background-color: var(--unity-colors-highlight-background);
|
||||
-unity-font-style: bold;
|
||||
color: var(--onboarding-button-selected-text-color);
|
||||
}
|
||||
|
||||
.onboarding-section-category-container{
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.onboarding-section-mainbutton{
|
||||
max-height: 24px;
|
||||
align-self: flex-start;
|
||||
padding: 2px 4px 2px 4px;
|
||||
margin-left: 0;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
/*onboarding section*/
|
||||
.onboarding-section {
|
||||
background-color: var(--unity-colors-inspector_titlebar-border_accent);
|
||||
padding: 16px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.section-foldout {
|
||||
background-color: var(--card-background);
|
||||
padding: 16px;
|
||||
padding-top: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.section-foldout .unity-foldout__checkmark {
|
||||
/* Use width instead of display: none, which results in the title being cut */
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.section-foldout .unity-foldout__text {
|
||||
font-size: 14px;
|
||||
-unity-font-style: Bold;
|
||||
margin-bottom: 8px;
|
||||
margin-left: -6px;
|
||||
}
|
||||
|
||||
.section-foldout .onboarding-section-short-description {
|
||||
margin-left: -16px;
|
||||
}
|
||||
|
||||
.onboarding-section-title {
|
||||
font-size: 14px;
|
||||
-unity-font-style: Bold;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.three-dot-button {
|
||||
background-color: transparent;
|
||||
border-width: 0px;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.three-dot-button:hover {
|
||||
background-color: var(--standard-grey);
|
||||
}
|
||||
|
||||
.onboarding-section-short-description {
|
||||
max-width: 700px;
|
||||
overflow: hidden;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.horizontal-container {
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.flex-spacer {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.doc-button {
|
||||
border-width: 0px;
|
||||
padding: 1px;
|
||||
margin-left: 0px;
|
||||
margin-right: 2px;
|
||||
background-color: var(--card-background);
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
.doc-button:hover {
|
||||
background-color: var(--dark-grey);
|
||||
}
|
||||
|
||||
#doc-button-separator {
|
||||
margin: 2px;
|
||||
color: var(--doc-separator-color);
|
||||
}
|
||||
|
||||
.checkmark-icon {
|
||||
background-image: var(--checkmark-icon);
|
||||
-unity-background-scale-mode: scale-to-fit;
|
||||
background-size: 16px 16px;
|
||||
min-width: 16px;
|
||||
max-width: 16px;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
}
|
||||
|
||||
/* Empty view which is shown when no recommendations are shown*/
|
||||
|
||||
#empty-view {
|
||||
flex-grow: 1;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#empty-view-content{
|
||||
height: 100%;
|
||||
width: 75%;
|
||||
max-width: 400px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#empty-view-icon {
|
||||
min-height: 50%;
|
||||
background-image: var(--questionnaire-empty-view-icon);
|
||||
background-size: contain;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
#empty-view-message {
|
||||
flex-shrink: 0;
|
||||
flex-grow: 0;
|
||||
width: 100%;
|
||||
-unity-text-align: upper-left;
|
||||
overflow: hidden;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bac00d6e07f0b4305bb395363c89d92b
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
@@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Multiplayer.Center.Common;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
using Unity.Multiplayer.Center.Recommendations;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// Questions that go together in the Questionnaire view.
|
||||
/// Example: mandatory questions in "Game Specs" section, optional questions in "Advanced" section.
|
||||
/// </summary>
|
||||
internal class QuestionSection : VisualElement
|
||||
{
|
||||
EnumField m_PresetDropdown;
|
||||
public VisualElement ContentRoot { get; private set; }
|
||||
public event Action<AnsweredQuestion> QuestionUpdated;
|
||||
|
||||
public event Action<Preset> OnPresetSelected;
|
||||
|
||||
const string k_AdvancedFoldoutName = "advanced-questions";
|
||||
|
||||
public void CreateAdvancedFoldout(Question[] questions, IEnumerable<AnsweredQuestion> existingAnswers, string headerTitle)
|
||||
{
|
||||
var foldout = new Foldout
|
||||
{
|
||||
text = headerTitle,
|
||||
name = k_AdvancedFoldoutName
|
||||
};
|
||||
foreach (var question in questions)
|
||||
{
|
||||
if (question.IsMandatory)
|
||||
continue;
|
||||
|
||||
foldout.Add(CreateSingleQuestionView(question, existingAnswers));
|
||||
}
|
||||
|
||||
ContentRoot.Insert(1, foldout);
|
||||
}
|
||||
|
||||
public QuestionSection(Question[] questions, IEnumerable<AnsweredQuestion> existingAnswers, string headerTitle,
|
||||
bool mandatoryQuestions)
|
||||
{
|
||||
var title = new VisualElement();
|
||||
title.Add(new Label() {text = headerTitle});
|
||||
title.AddToClassList(StyleClasses.ViewHeadline);
|
||||
Add(title);
|
||||
|
||||
ContentRoot = CreateContentRoot(true);
|
||||
|
||||
Add(ContentRoot);
|
||||
|
||||
for (var index = 0; index < questions.Length; index++)
|
||||
{
|
||||
if ((!mandatoryQuestions && questions[index].IsMandatory) || (mandatoryQuestions && !questions[index].IsMandatory))
|
||||
continue;
|
||||
|
||||
ContentRoot.Add(CreateSingleQuestionView(questions[index], existingAnswers));
|
||||
}
|
||||
|
||||
Undo.undoRedoPerformed += OnUndoRedoPerformed;
|
||||
}
|
||||
|
||||
~QuestionSection()
|
||||
{
|
||||
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
|
||||
}
|
||||
|
||||
void OnUndoRedoPerformed()
|
||||
{
|
||||
m_PresetDropdown?.SetValueWithoutNotify(UserChoicesObject.instance.Preset);
|
||||
}
|
||||
|
||||
public void AddPresetView()
|
||||
{
|
||||
ContentRoot.Insert(0, CreatePresetView());
|
||||
}
|
||||
|
||||
static VisualElement CreateContentRoot(bool withScrollView)
|
||||
{
|
||||
if (!withScrollView)
|
||||
return new VisualElement();
|
||||
|
||||
var root = new ScrollView();
|
||||
root.horizontalScrollerVisibility = ScrollerVisibility.Hidden;
|
||||
return root;
|
||||
}
|
||||
|
||||
VisualElement CreateSingleQuestionView(Question question, IEnumerable<AnsweredQuestion> existingAnswers)
|
||||
{
|
||||
Logic.TryGetAnswerByQuestionId(existingAnswers, question.Id, out var existingAnswer);
|
||||
existingAnswer ??= new AnsweredQuestion { QuestionId = question.Id };
|
||||
|
||||
var questionView = GetQuestionHeader(question, out var questionContainer);
|
||||
questionContainer.Add(QuestionViewFactory.CreateQuestionViewInput(question, existingAnswer, RaiseQuestionUpdated));
|
||||
return questionView;
|
||||
}
|
||||
|
||||
static VisualElement GetQuestionHeader(Question question, out VisualElement inputContainer)
|
||||
{
|
||||
return QuestionViewFactory.StandardQuestionHeader(question, out inputContainer);
|
||||
}
|
||||
|
||||
void RaiseQuestionUpdated(AnsweredQuestion question)
|
||||
{
|
||||
QuestionUpdated?.Invoke(question);
|
||||
}
|
||||
|
||||
VisualElement CreatePresetView()
|
||||
{
|
||||
const string description = "Select the game genre that is the closest match to your project to generate common game specifications for this genre and recommended solutions. Recommendations are based solely on player count and game specifications.";
|
||||
var presetQuestion = new Question()
|
||||
{Title = "Genre of your Game", Description = description, IsMandatory = true};
|
||||
|
||||
var questionView = GetQuestionHeader(presetQuestion, out var questionContainer);
|
||||
questionContainer.Add(PresetDropdown());
|
||||
return questionView;
|
||||
}
|
||||
|
||||
EnumField PresetDropdown()
|
||||
{
|
||||
m_PresetDropdown = new EnumField(UserChoicesObject.instance.Preset);
|
||||
m_PresetDropdown.RegisterValueChangedCallback(RaiseValueChangedCallback);
|
||||
m_PresetDropdown.name = "preset-dropdown";
|
||||
m_PresetDropdown.tooltip = "Select your game type";
|
||||
return m_PresetDropdown;
|
||||
}
|
||||
|
||||
void RaiseValueChangedCallback(ChangeEvent<Enum> eventData)
|
||||
{
|
||||
if (!Equals(eventData.newValue, eventData.previousValue))
|
||||
{
|
||||
Undo.RecordObject(UserChoicesObject.instance, "Selected Preset");
|
||||
var newVal = (Preset) eventData.newValue;
|
||||
UserChoicesObject.instance.Preset = newVal;
|
||||
OnPresetSelected?.Invoke(newVal);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetAdvancedSectionVisible (bool isVisible){
|
||||
var advanced = ContentRoot.Q<Foldout>(k_AdvancedFoldoutName);
|
||||
advanced.style.display = isVisible ? new StyleEnum<DisplayStyle>(DisplayStyle.Flex) : new StyleEnum<DisplayStyle>(DisplayStyle.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 157e1606dfbd48dda6f01acbf49435b0
|
||||
timeCreated: 1710925980
|
||||
@@ -0,0 +1,162 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Unity.Multiplayer.Center.Common;
|
||||
using Unity.Multiplayer.Center.Questionnaire;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using Toggle = UnityEngine.UIElements.Toggle;
|
||||
|
||||
namespace Unity.Multiplayer.Center.Window.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates visual elements that represent a question / the overview of the questionnaire
|
||||
/// </summary>
|
||||
internal static class QuestionViewFactory
|
||||
{
|
||||
public static VisualElement CreateOverview(QuestionnaireData questionnaire, int currentQuestionIndex)
|
||||
{
|
||||
if (currentQuestionIndex < 0 || currentQuestionIndex >= questionnaire.Questions.Length)
|
||||
throw new ArgumentOutOfRangeException(nameof(currentQuestionIndex));
|
||||
|
||||
var label = new Label($"Question {currentQuestionIndex + 1} of {questionnaire.Questions.Length}");
|
||||
label.AddToClassList("questionnaireOverview");
|
||||
return label;
|
||||
}
|
||||
|
||||
public static VisualElement StandardQuestionHeader(Question question, out VisualElement inputContainer)
|
||||
{
|
||||
var root = new VisualElement();
|
||||
root.AddToClassList(StyleClasses.QuestionView);
|
||||
if (question.IsMandatory)
|
||||
{
|
||||
root.AddToClassList(StyleClasses.MandatoryQuestion);
|
||||
}
|
||||
|
||||
var title = new Label(question.Title);
|
||||
title.tooltip = question.Description;
|
||||
root.Add(title);
|
||||
inputContainer = root;
|
||||
return root;
|
||||
}
|
||||
|
||||
public static VisualElement CreateQuestionViewInput(Question question, AnsweredQuestion answer, Action<AnsweredQuestion> onAnswerChanged)
|
||||
{
|
||||
return question.ViewType switch
|
||||
{
|
||||
ViewType.Toggle => CreateToggle(question, answer, onAnswerChanged),
|
||||
ViewType.Radio => CreateRadio(question, answer, onAnswerChanged),
|
||||
ViewType.Checkboxes => CreateCheckboxes(question, answer, onAnswerChanged),
|
||||
ViewType.DropDown => CreateDropDown(question, answer, onAnswerChanged),
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
}
|
||||
|
||||
static VisualElement CreateDropDown(Question question, AnsweredQuestion answer, Action<AnsweredQuestion> onAnswerChanged)
|
||||
{
|
||||
var dropdown = new DropdownField();
|
||||
var choices = new List<string>(question.Choices.Length);
|
||||
foreach (var choice in question.Choices)
|
||||
{
|
||||
choices.Add(choice.Title);
|
||||
}
|
||||
dropdown.choices = choices;
|
||||
|
||||
if (answer.Answers?.Count > 0)
|
||||
{
|
||||
var currentAnswer = Array.Find(question.Choices, choice => choice.Id == answer.Answers[0]);
|
||||
dropdown.SetValueWithoutNotify(currentAnswer.Title);
|
||||
}
|
||||
|
||||
dropdown.RegisterValueChangedCallback(evt =>
|
||||
{
|
||||
RecordUndo();
|
||||
string selectedId = default;
|
||||
foreach (var choice in question.Choices)
|
||||
{
|
||||
if (choice.Title == evt.newValue)
|
||||
{
|
||||
selectedId = choice.Id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
answer.Answers = new List<string>(1) {selectedId};
|
||||
onAnswerChanged?.Invoke(answer);
|
||||
});
|
||||
return dropdown;
|
||||
|
||||
}
|
||||
|
||||
public static VisualElement CreateCheckboxes(Question question, AnsweredQuestion answeredQuestion, Action<AnsweredQuestion> onAnswerChanged = null)
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
foreach (var possibleAnswer in question.Choices)
|
||||
{
|
||||
var toggle = new Toggle(possibleAnswer.Title);
|
||||
toggle.tooltip = possibleAnswer.Description;
|
||||
var answerCopy = possibleAnswer;
|
||||
toggle.RegisterValueChangedCallback(evt => UpdateAnswersWithCheckBoxes(answeredQuestion, answerCopy.Id, evt.newValue, onAnswerChanged));
|
||||
root.Add(toggle);
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
static void UpdateAnswersWithCheckBoxes(AnsweredQuestion question, string id, bool newValue, Action<AnsweredQuestion> onAnswerChanged)
|
||||
{
|
||||
RecordUndo();
|
||||
if (newValue && !question.Answers.Contains(id))
|
||||
{
|
||||
question.Answers.Add(id);
|
||||
onAnswerChanged?.Invoke(question);
|
||||
}
|
||||
else if (!newValue && question.Answers.Contains(id))
|
||||
{
|
||||
question.Answers.Remove(id);
|
||||
onAnswerChanged?.Invoke(question);
|
||||
}
|
||||
}
|
||||
|
||||
public static RadioButtonGroup CreateRadio(Question question, AnsweredQuestion answeredQuestion, Action<AnsweredQuestion> onAnswerChanged = null)
|
||||
{
|
||||
var group = new RadioButtonGroup();
|
||||
|
||||
foreach (var q in question.Choices)
|
||||
{
|
||||
var radioButton = new RadioButton(q.Title);
|
||||
radioButton.tooltip = q.Description;
|
||||
|
||||
// Todo: just checking for the first question for now.
|
||||
if (answeredQuestion.Answers != null && q.Id == answeredQuestion.Answers[0])
|
||||
radioButton.SetValueWithoutNotify(true);
|
||||
group.Add(radioButton);
|
||||
}
|
||||
|
||||
// this was not working, so I had to use the foreach loop above
|
||||
|
||||
// var answerIndex = question.Choices.ToList().FindIndex(c => c.Id == answeredQuestion.Answers[0]);
|
||||
// group.SetValueWithoutNotify(answerIndex);
|
||||
|
||||
group.RegisterValueChangedCallback(evt =>
|
||||
{
|
||||
RecordUndo();
|
||||
answeredQuestion.Answers = new List<string>(1) {question.Choices[evt.newValue].Id};
|
||||
onAnswerChanged?.Invoke(answeredQuestion);
|
||||
});
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
public static VisualElement CreateToggle(Question question, AnsweredQuestion answeredQuestion, Action<AnsweredQuestion> onAnswerChanged)
|
||||
{
|
||||
return CreateRadio(question, answeredQuestion, onAnswerChanged);
|
||||
}
|
||||
|
||||
static void RecordUndo()
|
||||
{
|
||||
Undo.RecordObject(UserChoicesObject.instance,"Game Spec Change");
|
||||
}
|
||||
}
|
||||
}
|
||||