my workspace upadte

This commit is contained in:
mher 2025-06-01 14:53:35 +03:30
parent 4584cda041
commit b4dd11c8f4
1168 changed files with 145287 additions and 4449 deletions

64
.gitignore vendored Normal file
View File

@ -0,0 +1,64 @@
7# This .gitignore file should be placed at the root of your Unity
project directory
#
# Get latest from
https://github.com/github/gitignore/blob/master/Unity.gitignore
#
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Mm]emoryCaptures/
# Never ignore Asset meta data
!/[Aa]ssets/**/*.meta
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Builds
*.apk
*.unitypackage
# Crashlytics generated file
crashlytics-build.properties
.idea

View File

@ -56,5 +56,5 @@
"temp/": true,
"Temp/": true
},
"dotnet.defaultSolution": "xroom.sln"
"dotnet.defaultSolution": "gitdadechin.sln"
}

View File

@ -1,35 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="Current">
<!-- Generated file, do not modify, your changes will be overwritten (use AssetPostprocessor.OnGeneratedCSProject) -->
<PropertyGroup>
<LangVersion>9.0</LangVersion>
<BaseIntermediateOutputPath>Temp\obj\$(Configuration)\$(MSBuildProjectName)</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)</IntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<ItemGroup>
<ProjectCapability Include="Unity" />
</ItemGroup>
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<EnableDefaultItems>false</EnableDefaultItems>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<LangVersion>9.0</LangVersion>
<Configurations>Debug;Release</Configurations>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<RootNamespace></RootNamespace>
<ProjectGuid>{1744771A-3D62-EB4A-D39C-B11BAE626AEE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<AssemblyName>Assembly-CSharp-Editor</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFramework>netstandard2.1</TargetFramework>
<BaseDirectory>.</BaseDirectory>
</PropertyGroup>
<PropertyGroup>
<NoWarn>0169;USG0001</NoWarn>
<DefineConstants>UNITY_6000_0_48;UNITY_6000_0;UNITY_6000;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_2023_1_OR_NEWER;UNITY_2023_2_OR_NEWER;UNITY_2023_3_OR_NEWER;UNITY_6000_0_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_MARSHALLING_TESTS;ENABLE_VIDEO;ENABLE_NAVIGATION_OFFMESHLINK_TO_NAVMESHLINK;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_ACCESSIBILITY;TEXTCORE_1_0_OR_NEWER;EDITOR_ONLY_NAVMESH_BUILDER_DEPRECATED;PLATFORM_ANDROID;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;PLATFORM_EXTENDS_VULKAN_PIPELINE_CACHE;PLATFORM_SUPPORTS_SPLIT_GRAPHICS_JOBS;PLATFORM_HAS_ADDITIONAL_API_CHECKS;PLATFORM_HAS_BUGGY_MSAA_RESOLVE;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER;FUSION_WEAVER;FUSION2;READY_PLAYER_ME;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER;UNITY_EDITOR_ONLY_COMPILATION</DefineConstants>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Temp\bin\Debug\</OutputPath>
<DefineConstants>UNITY_6000_0_48;UNITY_6000_0;UNITY_6000;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_2023_1_OR_NEWER;UNITY_2023_2_OR_NEWER;UNITY_2023_3_OR_NEWER;UNITY_6000_0_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_MARSHALLING_TESTS;ENABLE_VIDEO;ENABLE_NAVIGATION_OFFMESHLINK_TO_NAVMESHLINK;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;TEXTCORE_1_0_OR_NEWER;EDITOR_ONLY_NAVMESH_BUILDER_DEPRECATED;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_AMD;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_USES_EXPLICIT_MEMORY_MANAGER_INITIALIZER;PLATFORM_SUPPORTS_WAIT_FOR_PRESENTATION;PLATFORM_SUPPORTS_SPLIT_GRAPHICS_JOBS;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER;FUSION_WEAVER;FUSION2;READY_PLAYER_ME;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER;UNITY_EDITOR_ONLY_COMPILATION</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169;USG0001</NoWarn>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@ -37,25 +40,25 @@
<OutputPath>Temp\bin\Release\</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169;USG0001</NoWarn>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup>
<NoConfig>true</NoConfig>
<NoStandardLibraries>true</NoStandardLibraries>
<NoStdLib>true</NoStdLib>
<AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
<ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades>
<ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>
<NoConfig>true</NoConfig>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<MSBuildWarningsAsMessages>MSB3277</MSBuildWarningsAsMessages>
</PropertyGroup>
<PropertyGroup>
<ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<UnityProjectGenerator>Package</UnityProjectGenerator>
<UnityProjectGeneratorVersion>2.0.23</UnityProjectGeneratorVersion>
<UnityProjectGeneratorStyle>Legacy</UnityProjectGeneratorStyle>
<UnityProjectGeneratorVersion>2.0.25</UnityProjectGeneratorVersion>
<UnityProjectGeneratorStyle>SDK</UnityProjectGeneratorStyle>
<UnityProjectType>Editor:5</UnityProjectType>
<UnityBuildTarget>Android:13</UnityBuildTarget>
<UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
<UnityVersion>6000.0.48f1</UnityVersion>
</PropertyGroup>
<ItemGroup>
<Analyzer Include="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.SourceGenerators.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.Properties.SourceGenerator.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.UIToolkit.SourceGenerator.dll" />
@ -1544,94 +1547,48 @@
</Reference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Assembly-CSharp.csproj">
<Project>{BCF81C60-B27E-59BC-2489-304D6CE6F9B6}</Project>
<Name>Assembly-CSharp</Name>
</ProjectReference>
<ProjectReference Include="Paroxe.PDFRenderer.csproj">
<Project>{02F38F0B-845B-9E49-468F-FE23CDAA2F5D}</Project>
<Name>Paroxe.PDFRenderer</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Fusion.Editor.csproj">
<Project>{794422FF-310C-9E32-D148-66A5BDC0D754}</Project>
<Name>PhotonVoice.Fusion.Editor</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Unity.csproj">
<Project>{362579EE-69FB-D892-7242-B7BBD73292F3}</Project>
<Name>Fusion.Unity</Name>
</ProjectReference>
<ProjectReference Include="RTLTMPro-Editor.csproj">
<Project>{3E839FFB-0EEB-8A86-00D5-2F986AE09F29}</Project>
<Name>RTLTMPro-Editor</Name>
</ProjectReference>
<ProjectReference Include="PhotonRealtime.csproj">
<Project>{FB924014-A3DA-444B-2E65-5F499EB1E4B7}</Project>
<Name>PhotonRealtime</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Utilities.Editor.csproj">
<Project>{FBEEC828-9655-314B-6FFB-06535D38FB8B}</Project>
<Name>PhotonVoice.Utilities.Editor</Name>
</ProjectReference>
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.csproj">
<Project>{F6EC86B2-74B6-66E2-92CD-AB0F7B980089}</Project>
<Name>Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard</Name>
</ProjectReference>
<ProjectReference Include="RTLTMPro.csproj">
<Project>{77EC1535-0F51-FC33-7569-6319E51B4764}</Project>
<Name>RTLTMPro</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.API.csproj">
<Project>{28B1E00A-0F67-79A2-51D9-4BBACA33501D}</Project>
<Name>PhotonVoice.API</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Addons.Physics.csproj">
<Project>{30D80258-4B74-2B1E-FE8A-40D849700894}</Project>
<Name>Fusion.Addons.Physics</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.csproj">
<Project>{1E0A7769-5DC9-2A12-78BD-51F1CFBAFA82}</Project>
<Name>PhotonVoice</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Unity.Editor.csproj">
<Project>{5668B588-E965-E797-A802-D09E7C2D442C}</Project>
<Name>Fusion.Unity.Editor</Name>
</ProjectReference>
<ProjectReference Include="BNGHandPoseID.csproj">
<Project>{5DBBD5A6-AE0A-8388-06E5-3B1436BC9183}</Project>
<Name>BNGHandPoseID</Name>
</ProjectReference>
<ProjectReference Include="MicAmplifierEditor.Editor.csproj">
<Project>{F74CB9A9-8860-8AE8-69DF-3AC6832BA89D}</Project>
<Name>MicAmplifierEditor.Editor</Name>
</ProjectReference>
<ProjectReference Include="Paroxe.PDFRenderer.Editor.csproj">
<Project>{717A50DB-563A-1C17-7054-7B2C654B72AF}</Project>
<Name>Paroxe.PDFRenderer.Editor</Name>
</ProjectReference>
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor.csproj">
<Project>{01F8A9E8-A55B-9A21-24E3-B15A8553A6D0}</Project>
<Name>Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor</Name>
</ProjectReference>
<ProjectReference Include="Voice.FMOD.Editor.csproj">
<Project>{4E63FDFC-4120-FE47-E713-ADE891043A9E}</Project>
<Name>Voice.FMOD.Editor</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Fusion.csproj">
<Project>{053174A6-EA02-2514-B3A5-E4FDEBA15F6D}</Project>
<Name>PhotonVoice.Fusion</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Editor.csproj">
<Project>{EB8311CD-A967-3EF7-CC99-280ED99ADA62}</Project>
<Name>PhotonVoice.Editor</Name>
</ProjectReference>
<ProjectReference Include="Assembly-CSharp.csproj" />
<ProjectReference Include="Paroxe.PDFRenderer.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarLoading.csproj" />
<ProjectReference Include="PhotonVoice.Fusion.Editor.csproj" />
<ProjectReference Include="Fusion.Unity.csproj" />
<ProjectReference Include="RTLTMPro-Editor.csproj" />
<ProjectReference Include="PhotonRealtime.csproj" />
<ProjectReference Include="ReadyPlayerMe.AvatarCreator.Editor.csproj" />
<ProjectReference Include="PhotonVoice.Utilities.Editor.csproj" />
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.WebGLSample.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.Editor.csproj" />
<ProjectReference Include="RTLTMPro.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarCreatorElements.csproj" />
<ProjectReference Include="Fusion.Addons.Physics.csproj" />
<ProjectReference Include="PhotonVoice.API.csproj" />
<ProjectReference Include="PhotonVoice.csproj" />
<ProjectReference Include="Fusion.Unity.Editor.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.QuickStart.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarRenders.csproj" />
<ProjectReference Include="ReadyPlayerMe.AvatarCreator.csproj" />
<ProjectReference Include="BNGHandPoseID.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.WebGLSample.Editor.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.csproj" />
<ProjectReference Include="MicAmplifierEditor.Editor.csproj" />
<ProjectReference Include="Paroxe.PDFRenderer.Editor.csproj" />
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor.csproj" />
<ProjectReference Include="Voice.FMOD.Editor.csproj" />
<ProjectReference Include="PhotonVoice.Fusion.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarCreatorWizard.csproj" />
<ProjectReference Include="PhotonVoice.Editor.csproj" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<ItemGroup>
<ProjectCapability Remove="LaunchProfiles" />
<ProjectCapability Remove="SharedProjectReferences" />
<ProjectCapability Remove="ReferenceManagerSharedProjects" />
<ProjectCapability Remove="ProjectReferences" />
<ProjectCapability Remove="ReferenceManagerProjects" />
<ProjectCapability Remove="COMReferences" />
<ProjectCapability Remove="ReferenceManagerCOM" />
<ProjectCapability Remove="AssemblyReferences" />
<ProjectCapability Remove="ReferenceManagerAssemblies" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="GenerateTargetFrameworkMonikerAttribute" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -1,35 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="Current">
<!-- Generated file, do not modify, your changes will be overwritten (use AssetPostprocessor.OnGeneratedCSProject) -->
<PropertyGroup>
<LangVersion>9.0</LangVersion>
<BaseIntermediateOutputPath>Temp\obj\$(Configuration)\$(MSBuildProjectName)</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)</IntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<ItemGroup>
<ProjectCapability Include="Unity" />
</ItemGroup>
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<EnableDefaultItems>false</EnableDefaultItems>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<LangVersion>9.0</LangVersion>
<Configurations>Debug;Release</Configurations>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<RootNamespace></RootNamespace>
<ProjectGuid>{BCF81C60-B27E-59BC-2489-304D6CE6F9B6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<AssemblyName>Assembly-CSharp</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFramework>netstandard2.1</TargetFramework>
<BaseDirectory>.</BaseDirectory>
</PropertyGroup>
<PropertyGroup>
<NoWarn>0169;USG0001</NoWarn>
<DefineConstants>UNITY_6000_0_48;UNITY_6000_0;UNITY_6000;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_2023_1_OR_NEWER;UNITY_2023_2_OR_NEWER;UNITY_2023_3_OR_NEWER;UNITY_6000_0_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_MARSHALLING_TESTS;ENABLE_VIDEO;ENABLE_NAVIGATION_OFFMESHLINK_TO_NAVMESHLINK;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_ACCESSIBILITY;TEXTCORE_1_0_OR_NEWER;EDITOR_ONLY_NAVMESH_BUILDER_DEPRECATED;PLATFORM_ANDROID;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;PLATFORM_EXTENDS_VULKAN_PIPELINE_CACHE;PLATFORM_SUPPORTS_SPLIT_GRAPHICS_JOBS;PLATFORM_HAS_ADDITIONAL_API_CHECKS;PLATFORM_HAS_BUGGY_MSAA_RESOLVE;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER;FUSION_WEAVER;FUSION2;READY_PLAYER_ME;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Temp\bin\Debug\</OutputPath>
<DefineConstants>UNITY_6000_0_48;UNITY_6000_0;UNITY_6000;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_2023_1_OR_NEWER;UNITY_2023_2_OR_NEWER;UNITY_2023_3_OR_NEWER;UNITY_6000_0_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_MARSHALLING_TESTS;ENABLE_VIDEO;ENABLE_NAVIGATION_OFFMESHLINK_TO_NAVMESHLINK;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;TEXTCORE_1_0_OR_NEWER;EDITOR_ONLY_NAVMESH_BUILDER_DEPRECATED;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_AMD;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_USES_EXPLICIT_MEMORY_MANAGER_INITIALIZER;PLATFORM_SUPPORTS_WAIT_FOR_PRESENTATION;PLATFORM_SUPPORTS_SPLIT_GRAPHICS_JOBS;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_INPUT_SYSTEM;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER;FUSION_WEAVER;FUSION2;READY_PLAYER_ME;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169;USG0001</NoWarn>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@ -37,25 +40,25 @@
<OutputPath>Temp\bin\Release\</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169;USG0001</NoWarn>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup>
<NoConfig>true</NoConfig>
<NoStandardLibraries>true</NoStandardLibraries>
<NoStdLib>true</NoStdLib>
<AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
<ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades>
<ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>
<NoConfig>true</NoConfig>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<MSBuildWarningsAsMessages>MSB3277</MSBuildWarningsAsMessages>
</PropertyGroup>
<PropertyGroup>
<ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<UnityProjectGenerator>Package</UnityProjectGenerator>
<UnityProjectGeneratorVersion>2.0.23</UnityProjectGeneratorVersion>
<UnityProjectGeneratorStyle>Legacy</UnityProjectGeneratorStyle>
<UnityProjectGeneratorVersion>2.0.25</UnityProjectGeneratorVersion>
<UnityProjectGeneratorStyle>SDK</UnityProjectGeneratorStyle>
<UnityProjectType>Game:1</UnityProjectType>
<UnityBuildTarget>Android:13</UnityBuildTarget>
<UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
<UnityVersion>6000.0.48f1</UnityVersion>
</PropertyGroup>
<ItemGroup>
<Analyzer Include="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.SourceGenerators.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.Properties.SourceGenerator.dll" />
<Analyzer Include="C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.UIToolkit.SourceGenerator.dll" />
@ -115,6 +118,7 @@
<Compile Include="Assets\BNG Framework\Scripts\Core\HeadCollisionFade.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Components\RotateTowards.cs" />
<Compile Include="Assets\Photon\FusionXRHost\Scripts\Rig\NetworkRig.cs" />
<Compile Include="Assets\Script\ImportModel\AssetBundleLoader.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Components\CollisionSound.cs" />
<Compile Include="Assets\Photon\FusionXRHost\Scripts\Grabbing\NetworkKinematicGrabbable.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Components\ColorGradingComponent.cs" />
@ -186,6 +190,7 @@
<Compile Include="Assets\BNG Framework\Scripts\Components\GrabbableHighlightMaterial.cs" />
<Compile Include="Assets\beantowel\Aerosol\Scripts\Util.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Models\ChromaticAberrationModel.cs" />
<Compile Include="Assets\scenerestart.cs" />
<Compile Include="Assets\ApiConnection.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Helpers\HandPhysics.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Components\DitheringComponent.cs" />
@ -194,6 +199,7 @@
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Components\FogComponent.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Helpers\StaticBatch.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\PostProcessingComponent.cs" />
<Compile Include="Assets\Scripts\GlbDownloader\GLBDownloader.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Extras\ToggleActiveOnInputAction.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Utils\ColorGradingCurve.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Components\ScreenFader.cs" />
@ -249,6 +255,7 @@
<Compile Include="Assets\BNG Framework\Scripts\Components\ConstrainLocalPosition.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Components\AmbientOcclusionComponent.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Utilities\CustomMotionTexture\ExampleWheelController.cs" />
<Compile Include="Assets\shareMyCharacter.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Extras\Arrow.cs" />
<Compile Include="Assets\BNG Framework\HandPoser\Scripts\SkeletonVisualizer.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Components\Damageable.cs" />
@ -340,6 +347,7 @@
<Compile Include="Assets\BNG Framework\Scripts\Extras\Flashlight.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Components\GrabbableHighlight.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Models\VignetteModel.cs" />
<Compile Include="Assets\Script\ImportModel\AssetBundleLoaderScene.cs" />
<Compile Include="Assets\Coworking office\PostProcessing\Runtime\Attributes\TrackballAttribute.cs" />
<Compile Include="Assets\TwoHandScale.cs" />
<Compile Include="Assets\BNG Framework\Scripts\Core\InputBridge.cs" />
@ -574,6 +582,14 @@
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.ClusterInputModule">
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.ClusterRendererModule">
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.ContentLoadModule">
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll</HintPath>
<Private>False</Private>
@ -806,6 +822,10 @@
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.VirtualTexturingModule">
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UnityEngine.WindModule">
<HintPath>C:\Program Files\Unity\Hub\Editor\6000.0.48f1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll</HintPath>
<Private>False</Private>
@ -1900,90 +1920,47 @@
</Reference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Paroxe.PDFRenderer.csproj">
<Project>{02F38F0B-845B-9E49-468F-FE23CDAA2F5D}</Project>
<Name>Paroxe.PDFRenderer</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Fusion.Editor.csproj">
<Project>{794422FF-310C-9E32-D148-66A5BDC0D754}</Project>
<Name>PhotonVoice.Fusion.Editor</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Unity.csproj">
<Project>{362579EE-69FB-D892-7242-B7BBD73292F3}</Project>
<Name>Fusion.Unity</Name>
</ProjectReference>
<ProjectReference Include="RTLTMPro-Editor.csproj">
<Project>{3E839FFB-0EEB-8A86-00D5-2F986AE09F29}</Project>
<Name>RTLTMPro-Editor</Name>
</ProjectReference>
<ProjectReference Include="PhotonRealtime.csproj">
<Project>{FB924014-A3DA-444B-2E65-5F499EB1E4B7}</Project>
<Name>PhotonRealtime</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Utilities.Editor.csproj">
<Project>{FBEEC828-9655-314B-6FFB-06535D38FB8B}</Project>
<Name>PhotonVoice.Utilities.Editor</Name>
</ProjectReference>
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.csproj">
<Project>{F6EC86B2-74B6-66E2-92CD-AB0F7B980089}</Project>
<Name>Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard</Name>
</ProjectReference>
<ProjectReference Include="RTLTMPro.csproj">
<Project>{77EC1535-0F51-FC33-7569-6319E51B4764}</Project>
<Name>RTLTMPro</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.API.csproj">
<Project>{28B1E00A-0F67-79A2-51D9-4BBACA33501D}</Project>
<Name>PhotonVoice.API</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Addons.Physics.csproj">
<Project>{30D80258-4B74-2B1E-FE8A-40D849700894}</Project>
<Name>Fusion.Addons.Physics</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.csproj">
<Project>{1E0A7769-5DC9-2A12-78BD-51F1CFBAFA82}</Project>
<Name>PhotonVoice</Name>
</ProjectReference>
<ProjectReference Include="Fusion.Unity.Editor.csproj">
<Project>{5668B588-E965-E797-A802-D09E7C2D442C}</Project>
<Name>Fusion.Unity.Editor</Name>
</ProjectReference>
<ProjectReference Include="BNGHandPoseID.csproj">
<Project>{5DBBD5A6-AE0A-8388-06E5-3B1436BC9183}</Project>
<Name>BNGHandPoseID</Name>
</ProjectReference>
<ProjectReference Include="MicAmplifierEditor.Editor.csproj">
<Project>{F74CB9A9-8860-8AE8-69DF-3AC6832BA89D}</Project>
<Name>MicAmplifierEditor.Editor</Name>
</ProjectReference>
<ProjectReference Include="Paroxe.PDFRenderer.Editor.csproj">
<Project>{717A50DB-563A-1C17-7054-7B2C654B72AF}</Project>
<Name>Paroxe.PDFRenderer.Editor</Name>
</ProjectReference>
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor.csproj">
<Project>{01F8A9E8-A55B-9A21-24E3-B15A8553A6D0}</Project>
<Name>Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor</Name>
</ProjectReference>
<ProjectReference Include="Voice.FMOD.Editor.csproj">
<Project>{4E63FDFC-4120-FE47-E713-ADE891043A9E}</Project>
<Name>Voice.FMOD.Editor</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Fusion.csproj">
<Project>{053174A6-EA02-2514-B3A5-E4FDEBA15F6D}</Project>
<Name>PhotonVoice.Fusion</Name>
</ProjectReference>
<ProjectReference Include="PhotonVoice.Editor.csproj">
<Project>{EB8311CD-A967-3EF7-CC99-280ED99ADA62}</Project>
<Name>PhotonVoice.Editor</Name>
</ProjectReference>
<ProjectReference Include="Paroxe.PDFRenderer.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarLoading.csproj" />
<ProjectReference Include="PhotonVoice.Fusion.Editor.csproj" />
<ProjectReference Include="Fusion.Unity.csproj" />
<ProjectReference Include="RTLTMPro-Editor.csproj" />
<ProjectReference Include="PhotonRealtime.csproj" />
<ProjectReference Include="ReadyPlayerMe.AvatarCreator.Editor.csproj" />
<ProjectReference Include="PhotonVoice.Utilities.Editor.csproj" />
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.WebGLSample.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.Editor.csproj" />
<ProjectReference Include="RTLTMPro.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarCreatorElements.csproj" />
<ProjectReference Include="Fusion.Addons.Physics.csproj" />
<ProjectReference Include="PhotonVoice.API.csproj" />
<ProjectReference Include="PhotonVoice.csproj" />
<ProjectReference Include="Fusion.Unity.Editor.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.QuickStart.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarRenders.csproj" />
<ProjectReference Include="ReadyPlayerMe.AvatarCreator.csproj" />
<ProjectReference Include="BNGHandPoseID.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.WebGLSample.Editor.csproj" />
<ProjectReference Include="ReadyPlayerMe.Core.csproj" />
<ProjectReference Include="MicAmplifierEditor.Editor.csproj" />
<ProjectReference Include="Paroxe.PDFRenderer.Editor.csproj" />
<ProjectReference Include="Unity.XR.Interaction.Toolkit.Samples.SpatialKeyboard.Editor.csproj" />
<ProjectReference Include="Voice.FMOD.Editor.csproj" />
<ProjectReference Include="PhotonVoice.Fusion.csproj" />
<ProjectReference Include="ReadyPlayerMe.Samples.AvatarCreatorWizard.csproj" />
<ProjectReference Include="PhotonVoice.Editor.csproj" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<ItemGroup>
<ProjectCapability Remove="LaunchProfiles" />
<ProjectCapability Remove="SharedProjectReferences" />
<ProjectCapability Remove="ReferenceManagerSharedProjects" />
<ProjectCapability Remove="ProjectReferences" />
<ProjectCapability Remove="ReferenceManagerProjects" />
<ProjectCapability Remove="COMReferences" />
<ProjectCapability Remove="ReferenceManagerCOM" />
<ProjectCapability Remove="AssemblyReferences" />
<ProjectCapability Remove="ReferenceManagerAssemblies" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="GenerateTargetFrameworkMonikerAttribute" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -31,6 +31,7 @@ public class ApiConnection : MonoBehaviour
public List<string> imageLinks = new List<string>();
public List<string> pdfLinks = new List<string>();
public List<string> videoLinks = new List<string>();
public List<string> glbLinks = new List<string>();
public static ApiConnection instance;
public GameObject imageItem, videoItem;
public GameObject pdfItem;
@ -45,7 +46,7 @@ public class ApiConnection : MonoBehaviour
}
public void jobs(GetInfoResponse data)
{
Debug.Log("getInfoCall");
if (data != null)
{
foreach (var img in data.images)
@ -87,6 +88,13 @@ public class ApiConnection : MonoBehaviour
foreach (var glb in data.glbs)
{
Debug.Log("GLB: " + glb.glb);
glbLinks.Add("http://194.62.43.230:8000/" + glb.glb);
// Store the first GLB URL in PlayerPrefs for avatar use
if (glbLinks.Count == 1)
{
PlayerPrefs.SetString("profile_glb", "http://194.62.43.230:8000/" + glb.glb);
PlayerPrefs.Save();
}
}
}

View File

@ -211,7 +211,7 @@ namespace BNG {
void LateUpdate() {
if (ConnectionManager.instance.runner.IsConnectedToServer) {
print(ConnectionManager.instance.runner.LocalPlayer.PlayerId);
//print(ConnectionManager.instance.runner.LocalPlayer.PlayerId);
if (ConnectionManager.instance.presentation && !ConnectionManager.instance.Loading.gameObject.activeSelf&& ConnectionManager.instance. runner.LocalPlayer.PlayerId>1)
{
// GetComponent<BNG.SmoothLocomotion>().sit = true;

View File

@ -1,13 +1,15 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
namespace BNG {
public class VRKeyboardKey : MonoBehaviour {
UnityEngine.UI.Button thisButton;
UnityEngine.UI.Text thisButtonText;
TextMeshProUGUI thisButtonText;
VRKeyboard vrKeyboard;
@ -20,7 +22,7 @@ namespace BNG {
void Awake() {
thisButton = GetComponent<UnityEngine.UI.Button>();
thisButtonText = GetComponentInChildren<UnityEngine.UI.Text>();
thisButtonText = GetComponentInChildren<TextMeshProUGUI>();
// Assign click event handler
if (thisButton != null) {

BIN
Assets/Coworking office/Room10_sit.unity (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 17d5c11186bc848408d522c472023d95
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,49 +1,58 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.Networking;
using BNG;
using Fusion.XR.Host.Rig;
using Fusion;
public class ENMenu : MonoBehaviour
public class ENMenu : NetworkBehaviour
{
public GameObject itemPr;
public Transform menu;
public List<GameObject> items = new List<GameObject>();
// Start is called once before the first execution of Update after the MonoBehaviour is created
public GameObject tablet;
public UnityEngine.UI.Button button;
public GameObject loading;
public GameObject LoginMenu;
public GameObject Rooms;
public InputField phone, code;
public GameObject LoginButton, EnterButton, ExitButton, GuestButton;
public NetworkObject glbDownloaderPrefab;
public GameObject playerPref;
private bool isRunnerReady = false;
public float delay = 2;
public override void Spawned()
{
isRunnerReady = true;
}
void Start()
{
Invoke("PlayWelcome", delay);
//for (int i = 0; i < EN.instance.users.Count; i++)
//{
//GameObject select= Instantiate(itemPr,menu);
// select.gameObject.SetActive(true);
// select.transform.Find("number").GetComponent<Text>().text = "."+i;
// select.transform.Find("name").GetComponent<RTLTextMeshPro>().text = EN.instance.users[i].name;
// select.transform.Find("job").GetComponent<RTLTextMeshPro>().text = EN.instance.users[i].job;
// select.name = i.ToString();
// items.Add(select);
//}
EN.instance.SelectedUser = EN.instance.users[1];
string user = PlayerPrefs.GetString("user","");
EN.instance.SelectedUser = EN.instance.users[0];
string user = PlayerPrefs.GetString("user", "");
if (!string.IsNullOrEmpty(user))
{
User response = new User(user);
phone.text= PlayerPrefs.GetString("mobile_number", "");
code.text= PlayerPrefs.GetString("password","");
phone.text = PlayerPrefs.GetString("mobile_number", "");
code.text = PlayerPrefs.GetString("password", "");
var data = new Dictionary<string, string>
{
{ "password",code.text.ToString() },
{ "mobile_number",phone.text.ToString() }
};
{
{ "password", code.text.ToString() },
{ "mobile_number", phone.text.ToString() }
};
StartCoroutine(webservice.instance.LoginRequest(data, OnLoginSuccess));
//OnLoginSuccess(response);
//LoginButton.SetActive(false);
//GuestButton.SetActive(false);
//ExitButton.SetActive(true);
//EnterButton.SetActive(true);
}
else
{
@ -52,8 +61,8 @@ public class ENMenu : MonoBehaviour
ExitButton.SetActive(false);
EnterButton.SetActive(false);
}
}
public void exitAccount()
{
LoginButton.SetActive(true);
@ -61,28 +70,27 @@ public class ENMenu : MonoBehaviour
ExitButton.SetActive(false);
EnterButton.SetActive(false);
PlayerPrefs.SetString("user", "");
PlayerPrefs.SetString("mobile_number", "");
PlayerPrefs.SetString("password", "");
PlayerPrefs.SetString("mobile_number", "");
PlayerPrefs.SetString("password", "");
}
public GameObject tablet;
public void Login()
{
LoginMenu.gameObject.SetActive(false);
loading.gameObject.SetActive(true);
var data = new Dictionary<string, string>
{
{ "password",code.text.ToString() },
{ "mobile_number",phone.text.ToString() }
{ "password", code.text.ToString() },
{ "mobile_number", phone.text.ToString() }
};
PlayerPrefs.SetString("mobile_number", phone.text.ToString());
PlayerPrefs.SetString("password", code.text.ToString());
StartCoroutine(webservice.instance.LoginRequest(data, OnLoginSuccess));
}
public Button button;
public GameObject loading;
public GameObject LoginMenu;
public GameObject Rooms;
void OnLoginSuccess(User response)
{
loading.gameObject.SetActive(false);
@ -90,14 +98,17 @@ public class ENMenu : MonoBehaviour
if (response != null)
{
EN.instance.Me = response;
Debug.Log("ورود موفقیت‌آمیز!");
Debug.Log("توکن: " + response.token);
LoginMenu.SetActive(false);
Rooms.SetActive(true);
LoginButton.SetActive(false);
GuestButton.SetActive(false);
ExitButton.SetActive(true);
EnterButton.SetActive(true);
Debug.Log("Login successful");
// Call GetInfo after successful login
StartCoroutine(webservice.instance.GetInfoRequest(OnGetInfoSuccess));
}
else
{
@ -107,45 +118,55 @@ public class ENMenu : MonoBehaviour
LoginMenu.gameObject.SetActive(true);
EN.instance.showError("خطا در ورود", webservice.instance.lastErrorResponse?.message ?? "نام کاربری یا رمز عبور اشتباه است");
break;
case ErrorType.Network:
EN.instance.showError("خطای اتصال", "لطفاً اتصال اینترنت خود را بررسی کنید و دوباره تلاش کنید");
break;
case ErrorType.Server:
EN.instance.showError("خطای سرور", "در حال حاضر سرور در دسترس نیست. لطفاً کمی بعد تلاش کنید");
break;
default:
EN.instance.showError("خطا", webservice.instance.lastError ?? "خطای ناشناخته رخ داده است");
break;
}
}
}
public float delay = 2;
void OnGetInfoSuccess(GetInfoResponse response)
{
if (response != null)
{
// Update user information with GetInfo response
EN.instance.Me.characterUrl = response.customer.profile_glb;
EN.instance.Me.character=playerPref;
Debug.Log("GetInfo successful - Character URL: " + response.customer.profile_glb);
}
else
{
Debug.LogError("Failed to get user info: " + webservice.instance.lastError);
EN.instance.showError("خطا", "در دریافت اطلاعات کاربر مشکلی پیش آمده است");
}
}
public void PlayWelcome()
{
PlaySound("welcome");
}
public void PlaySound(string soundName, float volume = 1f)
{
// بارگذاری صدا از پوشه Resources
AudioClip clip = Resources.Load<AudioClip>("sounds/" + soundName);
if (clip != null)
{
// ایجاد یک GameObject جدید برای پخش صدا
GameObject audioObject = new GameObject("AudioSource_" + soundName);
AudioSource audioSource = audioObject.AddComponent<AudioSource>();
audioSource.volume = volume;
audioSource.spatialBlend = 0;
// تنظیم clip و پخش صدا
audioSource.clip = clip;
audioSource.Play();
// حذف GameObject بعد از پایان صدا
Destroy(audioObject, clip.length);
}
else
@ -153,31 +174,28 @@ public class ENMenu : MonoBehaviour
Debug.LogError("Sound not found: " + soundName);
}
}
public void Exit()
{
Application.Quit();
}
public void Select(GameObject i)
{
EN.instance.SelectedUser = EN.instance.users[int.Parse(i.name)];
}
}
public void SelectEnviroment(GameObject i)
{
Application.LoadLevel(int.Parse(i.name)+1);
Application.LoadLevel(int.Parse(i.name) + 1);
}
public InputField phone, code;
// Update is called once per frame
void Update()
{
tablet.gameObject.SetActive(!EN.instance.Error.gameObject.activeSelf);
button.interactable = phone.text.Length>10&&code.text.Length>3;
button.interactable = phone.text.Length > 10 && code.text.Length > 3;
if (Application.isEditor)
tablet.transform.parent = null;
}
public GameObject LoginButton,EnterButton,ExitButton,GuestButton;
}
}

View File

@ -1,9 +1,16 @@
fileFormatVersion: 2
guid: 9960b70afbb00c1468c54c31462b736a
AssetOrigin:
serializedVersion: 1
productId: 141496
packageName: Procedural fire
packageVersion: 1.1.0
assetPath: Assets/Hovl Studio/Procedural fire/Demo scene/Lightmap-0_comp_light.exr
uploadId: 454218
TextureImporter:
fileIDToRecycleName: {}
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 5
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
@ -20,7 +27,12 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 1
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
@ -52,40 +64,74 @@ TextureImporter:
textureType: 6
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 2
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 2
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: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 1
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 1
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 141496
packageName: Procedural fire
packageVersion: 1.1.0
assetPath: Assets/Hovl Studio/Procedural fire/Demo scene/Lightmap-0_comp_light.exr
uploadId: 454218

View File

@ -1,4 +1,4 @@
using BNG;
using BNG;
using Fusion.Sockets;
using Fusion.XR.Host.Rig;
using Photon.Realtime;
@ -46,7 +46,7 @@ namespace Fusion.Addons.ConnectionManagerAddon
{
FusionRig.instance.transform.position = usersPlace[0].transform.position;
}
if (runner.IsConnectedToServer&&presentation&&!PlayerTeleport.instance.chair&&runner.LocalPlayer.PlayerId>1)
if (runner.IsConnectedToServer&&presentation&&!PlayerTeleport.instance.chair&&runner.LocalPlayer.PlayerId>0)
{
chairs[runner.LocalPlayer.PlayerId].GetComponent<Chair>().SetSit();
@ -92,7 +92,7 @@ namespace Fusion.Addons.ConnectionManagerAddon
if (!EN.instance)
{
Application.LoadLevel(0);
//Application.LoadLevel(0);
Destroy(gameObject);
return;
}
@ -116,7 +116,7 @@ namespace Fusion.Addons.ConnectionManagerAddon
private async void Start()
{
chairs = GameObject.FindGameObjectsWithTag("chair");
Invoke("createChairs", 5);
//Invoke("createChairs", 5);
PlaySound("intro");
// Launch the connection at start
if (connectOnStart) await Connect();
@ -244,7 +244,7 @@ namespace Fusion.Addons.ConnectionManagerAddon
//if (laser)
// runner.Despawn(laser);
tablet = runner.Spawn(Tablet, position: trans.position, rotation: trans.rotation, inputAuthority: runner.LocalPlayer, (runner, obj) => {
tablet = runner.Spawn(Tablet, position: itemPos.position, rotation: itemPos.rotation, inputAuthority: runner.LocalPlayer, (runner, obj) => {
// obj.GetComponent<MarkerNetwork>().DrawColor = color;
@ -318,7 +318,7 @@ namespace Fusion.Addons.ConnectionManagerAddon
{
Debug.Log($"OnPlayerJoined. PlayerId: {player.PlayerId}" + usersPlace[runner.SessionInfo.PlayerCount - 1].transform.position.ToString());
networkPlayerObject = runner.Spawn(EN.instance.SelectedUser.character, position: pos.position, rotation: transform.rotation, inputAuthority: player, (runner, obj) => {
networkPlayerObject = runner.Spawn(EN.instance.Me.character, position: pos.position, rotation: transform.rotation, inputAuthority: player, (runner, obj) => {
obj.GetComponent<playerManager>().player = player;
// obj.GetComponent<playerManager>().RPC_RequestCharacterSpawn(player);
@ -384,11 +384,13 @@ namespace Fusion.Addons.ConnectionManagerAddon
public void OnShutdown(NetworkRunner runner, ShutdownReason shutdownReason)
{
Debug.Log("Shutdown: " + shutdownReason);
//Application.LoadLevel(0);
}
public void OnDisconnectedFromServer(NetworkRunner runner, NetDisconnectReason reason)
{
Debug.Log("OnDisconnectedFromServer: " + reason);
Application.LoadLevel(0);
}
public void OnConnectFailed(NetworkRunner runner, NetAddress remoteAddress, NetConnectFailedReason reason)
{

View File

@ -46,6 +46,7 @@ public class playerManager : NetworkBehaviour
if (Object.InputAuthority.PlayerId==Runner.LocalPlayer.PlayerId)
{
PlayerId = EN.instance.SelectedUser.id.ToString();
Nickname = EN.instance.Me.first_name + " " + EN.instance.Me.last_name;
RPC_SetPlayerName(PlayerId.Value);
}
// if(Object.HasInputAuthority)
@ -62,7 +63,7 @@ public class playerManager : NetworkBehaviour
else
transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/back").GetComponent<Image>().color= speaker.IsPlaying?Color.green:Color.grey;
transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/back1").GetComponent<Image>().color= speaker.IsPlaying?Color.green:Color.grey;
transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name").GetComponent<RTLTextMeshPro>().text = EN.instance.users[Id].first_name+" " + EN.instance.users[Id].last_name;
transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name").GetComponent<RTLTextMeshPro>().text = Nickname.ToString();
for (int i = 0; i < EN.instance.users.Count; i++)
if (transform.Find(i.ToString()))
if (i != Id)
@ -94,7 +95,16 @@ public class playerManager : NetworkBehaviour
[Networked]
public NetworkString<_16> PlayerId { get; set; } // نام کاربر با حداکثر 16 کاراکتر
[Networked, OnChangedRender(nameof(NicknameChanged))]
public NetworkString<_32> Nickname { get; set; }
private void NicknameChanged()
{
if (transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name"))
{
transform.Find("Headset/HeadsetVisuals/PhotonDummy/board/name").GetComponent<RTLTextMeshPro>().text = Nickname.ToString();
}
}
[Rpc(RpcSources.All, RpcTargets.All)]
public void RPC_SetPlayerName(string id)

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 346755686f23bf34595f19c165bbdbe0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ed793e7d3865d47ce8f3db68c1874e0c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,19 @@
mergeInto(LibraryManager.library, {
ShowReadyPlayerMeFrame: function () {
showRpm();
},
HideReadyPlayerMeFrame: function () {
hideRpm();
},
SetupRpm: function (url, targetGameObjectName){
setupRpmFrame(UTF8ToString(url), UTF8ToString(targetGameObjectName));
},
ReloadUrl: function (url){
reloadUrl(UTF8ToString(url));
}
});

View File

@ -0,0 +1,83 @@
fileFormatVersion: 2
guid: 8341ba44d96cd40a9b5a0963cd2c23d4
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 1
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
: Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux64: 1
Exclude OSXUniversal: 1
Exclude WebGL: 0
Exclude Win: 1
Exclude Win64: 1
- first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
- first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 0
settings:
CPU: x86
- first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: x86_64
- first:
WebGL: WebGL
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Plugins/ReadyPlayerMe/WebGLHelper/RpmWebGLHelper.jslib
uploadId: 704624

BIN
Assets/Prefabs/GlbDownloader.prefab (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 155af7b2dadaf094a83ba586de85efb9
labels:
- FusionPrefab
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: eb05a1bfd5c45c5449a8641d13dee884
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Prefabs/VRCharacter.prefab (Stored with Git LFS)

Binary file not shown.

BIN
Assets/Prefabs/mgroom.fbx (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,107 @@
fileFormatVersion: 2
guid: 2c6343d6ccb674043a21a77511a4b9e2
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 10279eb9fd749a74a90b3cfce7fd84cf
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a1c3b5bf707de8b48a755d6d05cb2f28
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1 @@
{"BodyType":"halfbody","OutfitGender":1,"UpdatedAt":"2025-05-12T10:37:27.051Z","SkinTone":"#e3967d"}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0311ab2b2737f0546b4e941397027cbc
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b05cd0608b542dd46898cb10deeda23d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 076415b74b4e8bb4890efd0b73c3ee9f
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dca145dc0aa5f184784ec4a296357b77
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1 @@
{"BodyType":"halfbody","OutfitGender":1,"UpdatedAt":"2025-05-26T10:52:24.93Z","SkinTone":"#be8677"}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a5bddd18d17f1ef49b86a873ee9bb803
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5b8bf5c51e186bd4784eb5c1c2be851b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 35870c4b13047bc4aaf2826b10da6dfa
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1106b4e1a5216214ab3042083da7f96c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f3a46d8fb4354a34cbb6eb5d2cc42441
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: d0fb729eb85f4294292f6d3c1bc47c46
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c8606b2f8cb405b4288f4f569326083d
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1 @@
{"BodyType":"halfbody","OutfitGender":1,"UpdatedAt":"2025-05-26T10:52:24.937Z","SkinTone":"#c37c5f"}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5410dc4a1e236d64898cb0e15a399252
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f3db13d807a7d7c4491e9a2d8e648a6a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: cba335808e7e3d04190758939bff9d0d
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3}
editorImportSettings:
generateSecondaryUVSet: 0
importSettings:
nodeNameMethod: 1
animationMethod: 2
generateMipMaps: 1
texturesReadable: 0
defaultMinFilterMode: 9729
defaultMagFilterMode: 9729
anisotropicFilterLevel: 1
instantiationSettings:
mask: -1
layer: 0
skinUpdateWhenOffscreen: 1
lightIntensityFactor: 1
sceneObjectCreation: 2
assetDependencies: []
reportItems: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: accc2378d3ac4f0448f2233c05d3e15a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,472 @@
# Changelog
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [7.3.1] - 2024.10.30
## Updated
- Re-exporting package for asset store with updated dependencies
## [7.3.0] - 2024.10.22
## Updated
- auth-related requests now use auth-service endpoints [#317](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/317)
- updated shader variants to fix issues various material issues
## Fixed
- Fixed an issue causing Out of Bounds exception in WebGL voice handler [#322](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/322)
## Added
- DestroyMesh class can be used to destroy manually destroy mesh, materials and textures to prevent memory leaks
## [7.2.0] - 2024.09.06
## Updated
- Updated handling of response data to reduce garbage allocation [#314](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/314)
## Fixed
- Preserve AssetId property in IAssetData [#313](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/313)
## [7.1.1] - 2024.07.25
## Fixed
- Fixed an issue causing json parsing to fail on iFrame events [#311](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/311/)
## [7.1.0] - 2024.07.16
## Updated
- Reworked shader overrides to support mapping of other property types [#306](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/306)
## Fixed
- Fixed an issue caused by missing bones on avatar template prefabs [#310](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/310/)
## [7.0.0] - 2024.07.01
## Updated
- Loading circle animation now using MMecanim animation [#302](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/302)
- Removed unnecessary assets from Resources folder [#303](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/303)
- Updated Template avatar assets [#300](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/300)
- Avatar Body type now moved to CoreSettings [#290](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/290)
### Added
- Added support for hero customization assets (costumes) [#301](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/301)
- Templates can now be filtered by Bodytype [#296](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/296)
### Fixed
- Fixed an issue causing invalid load settings in Avatar Loader window [#298](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/298)
## [6.3.1] - 2024.06.18
### Fixed
- Allow cache to be loaded from previous versions, where bodyType was stored as an integer [#293](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/293)
## [6.3.0] - 2024.06.11
### Updated
- XR animation avatars now have DOF enabled by default [#288](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/288)
- Updated InCreatorAvatarLoader to use avatar config [#286](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/286)
- Avatar Creator Icon categories updated [#272](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/272)
### Fixed
- Fixed an issue preventing LOD's from updating [#277](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/277)
- An issue causing multiple signup requests [#275](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/275)
### Added
- Avatar template type filter [#270](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/270)
- Handle failed body shape requests [#281](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/281)
- Option to filter Templates by gender [#273](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/273)
## [6.2.4] - 2024.05.03
### Fixed
- Updated XR template prefab meshes to prevent missing bone references to fix mesh transfer [#266](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/266)
## [6.2.3] - 2024.04.29
### Fixed
- Reverted update to GetMeshRenderer method [#264](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/264)
## [6.2.2] - 2024.04.29
### Updated
- Updated XR template avatar to have separated head mesh [#261](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/261)
- Improved GetMeshRenderer() method to exclude invalid mesh renderers [#261](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/261)
### Fixed
- Fixed issue with XR animation avatars
## [6.2.1] - 2024.04.23
### Fixed
- An issue with gender and avatarID not to be set in AvatarManager [#260](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/260)
## [6.2.0] - 2024.04.22
### Added
- XR template avatar added to the Resources folder [#258](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/258)
- Avatar Creator now supports body shapes [#252](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/252)
- support for unknown exceptions [#251](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/251)
- Simple PanelManager script
- Optional define symbol to remove camera permissions from the Android manifest [#259](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/259)
## Updated
- Removed use of tuples and deprecated old methods [#257](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/257)
## [6.1.2] - 2024.04.03
### Updated
- XR animation avatars updated to support with latest xr avatar updates
## [6.1.1] - 2024.04.03
### Updated
- Avatars done with a photo are now added as a draft avatars [#254](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/254)
## [6.1.0] - 2024.03.04
### Updated
- AvatarMeshHelper now supports multiple mesh and material transfer. [#241](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/241)
### Added
- GetHeadMeshes method to AvatarMeshHelper to get head related meshes from an avatar. [#242](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/242)
- Template avatar with all possible meshes is added to the Resources folder.
## [6.0.1] - 2024.02.26
### Updated
- Updated default render settings to fix an issue causing incorrect halfbody avatar renders [#238](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/238)
## [6.0.0] - 2024.02.19
### Updated
- **BREAKING: Renamed Avatar Create Samples** [#210](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/210) _This change
may require updates to existing references in your projects._
- Small fix for button icon resizing [#215](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/215)
- LoginWithCode can now merge avatars into RPM account [#219](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/219)
- Recover hair when headwear is removed [#224](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/224)
- Added extra check to prevent settings override [#226](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/226)
### Added
- Logout Element for Avatar Creator [#216](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/216)
- New iFrame Events to WebFrameHandler [#212](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/212)
- Added support for XR Avatar skeleton [#217](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/217)
- Added Avatar List element [#218](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/218)
- Account creation and login elements in Avatar Creator sample [#230](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/230)
### Removed
- Quickstart Parameter from UrlConfig [#221](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/221)
- Selfie to Avatar Element* [#220](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/220)
- Removed WebView auto installation [#208](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/208)
## [5.0.0] - 2024.01.12
### Updated
- Refactor and extracted shared logic from network
packages [#148](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/148)
- Replaced api urls in samples with models urls [#152](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/152)
- Added com.unity.cloud.gltfast as a dependency and removed auto install of gltfast from git
url [#155](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/155)
- Updated to GLTFast 6.0.1 [#157](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/157)
- Replaced use of ienumerator coroutines with
async/await [#172](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/172)
- Request class names updated to be more uniform [#173](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/173)
- Endpoint classes removed and refactored [#174](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/174)
- Added avatar creator POC sample using new
elements [#182](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/182)
- Removed "I don't have an account" checkbox from setup
guide [#184](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/184)
- Restructure of avatar creator samples [#185](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/185)
- Class and folder restructure to match Unity package
standards [#190](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/190)
- Namespaces added to some scripts to meet asset store
requirements [#195](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/195)
- Ready Player Me top toolbar menu is under `Tools/Ready Player Me` to comply with Asset Store
requirements [#195](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/195)
- Samples renamed for Asset Store version of package and paths updated
accordingly [#198](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/198)
- Quick start sample animations updated [#200](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/200)
- Draco compression package version updated [#202](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/202)
### Added
- Add gender select element for Avatar Creator [#159](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/159)
- Basic login element for Avatar Creator [#160](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/160)
- Photo capture element for Avatar Creator [#162](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/162)
- Avatar template element for Avatar Creator [#164](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/164)
- Selfie element for Avatar Creator [#166](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/166)
- Asset panel element for Avatar Creator [#175](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/175)
- Account creation element for Avatar Creator [#178](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/178)
- Avatar preview element for Avatar Creator [#181](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/181)
- Fixed some issues related to paths like in the Graphics Setting
Utility [#195](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/195)
- Shader override property added to avatar config [#199](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/199)
### Fixed
- Fix for handling pasted url text in subdomain
field [#183](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/183)
- Added permission and orientation fix to photo capture
element [#192](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/192)
- Added Panel Switcher clear functionality to fix issues related to relaunching the
Creator [#194](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/194)
- Namespaces added to some scripts to meet asset store
requirements [#195](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/195)
## [4.1.2] - 2023.12.20
### Fixed
- Add preserve attribute to CategoryConverter in
AvatarCreator [#193](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/193)
## [4.1.1] - 2023.11.29
### Fixed
- Fixed json converters in AvatarCreator getting stripped on android or webgl
builds [#188](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/188)
## [4.1.0] - 2023.11.29
### Updated
- Replaced API URLs with model URLs for shortcodes [#152](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/152)
- Updated render api and samples [#147](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/147)
### Added
- Added app id to setup guide [#145](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/145)
## [4.0.1] - 2023.11.14
### Fixed
- Fixed an issue causing avatars to be stored locally even if caching was
disabled [#150](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/150)
## [4.0.0] - 2023.11.01
### Breaking Changes
- Merge avatar creator into core [#135](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/135).
- AvatarProcessor no longer searches and replaces existing
avatar [#138](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/138)
### Added
- Show Avatar Creator sample button in guide [#141](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/141)
### Updated
- Merged related samples into single folders [#139](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/139)
## [3.4.0] - 2023.10.24
### Added
- Breaking change popup [#136](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/136)
### Updated
- Disable use demo toggle in setup guide [#131](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/131)
- Refactor define symbol add and remove logic [#133](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/133)
## [3.3.0] - 2023.10.05
### Added
- Moved core iframe and url logic from WebView
package [#125](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/125)
### Updated
- Refactored core settings handler [#124](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/124)
- Centred all editor window content [#122](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/122)
## [3.2.4] - 2023.09.28
### Fixed
- An issue causing WebView to be auto imported if
removed [#126](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/126)
## [3.2.3] - 2023.09.11
### Fixed
- An issue causing settings to be recreated when not
needed [#123](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/123)
## [3.2.2] - 2023.09.07
### Fixed
- An issue with module installer causing errors when importing on some Windows
machines [#117](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/117)
## [3.2.1] - 2023.08.28
### Fixed
-Issue of missing mesh references when prefabs were created by avatar loader
window [#109](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/109)
## [3.2.0] - 2023.08.24
### Added
- App Id is added to header of all web requests
### Fixed
- GLTF scripting define symbol not getting assigned
## [3.1.1] - 2023.08.11
### Fixed
- Fixed an issue causing analytics events being sent to development
environment [#102](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/102)
- Re-added RPM define symbol required for supporting
packages [#102](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/102)
## [3.1.0] - 2023.08.08
### Added
* Personal avatar loading in quick start https://github.com/readyplayerme/rpm-unity-sdk-core/pull/97
* Runtime analytics to quick start https://github.com/readyplayerme/rpm-unity-sdk-core/pull/98
## [3.0.0] - 2023.07.31
### Added
- **BREAKING: All scripts and assets from Avatar
Loader** [#87](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/87)
- Module installer now automatically removes Avatar Loader after
update [#89](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/89)
- New Integration guide editor window [#91](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/91)
### Removed
- **BREAKING: all references to ReadyPlayerMe.AvatarLoader namespace** [#87](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/87)
### Updated
- Moved GltFast dependent code behind scripting define
symbol [#87](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/87)
- Avatar config processor now uses new mesh LOD
parameter [#90](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/90)
- Setup guide window improvements [#91](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/91)
## [1.3.0] - 2023.05.29
### Added
- Import timeout to module installer [#70](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/70)
- Add new setup guide window [#71](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/71)
- Added function for folder size in MB [#72](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/72)
### Fixed
- Various editor window layout fixes [#73](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/73)
## [1.2.0] - 2023.04.18
### Added
- Support for response codes [#62](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/62)
### Updated
- Refactor of WebRequestDispatcher [#59](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/59)
### Fixed
- Fixed an issue with the popup don't ask again pref was not updating
correctly [#58](https://github.com/readyplayerme/rpm-unity-sdk-core/pull/58)
## [1.1.0] - 2023.03.21
### Added
- Quick start sample popup
- Added operation completed event
- Discussion link to README.md
### Updated
- OpenUPM installation added to README.md
## [1.0.0] - 2023.02.20
### Added
- Optional sdk logging
- Don't ask again option for update check
### Updated
- PartnerSubdomainSettings refactored to a CoreSettings scriptable object
### Fixed
- Core settings asset now automatically created if it is missing
- Various bug fixes and improvements
## [0.2.0] - 2023.02.08
### Added
- Optional sdk logging
### Updated
- PartnerSubdomainSettings refactored to a CoreSettings scriptable object
### Fixed
- Various bug fixes and improvements
## [0.1.0] - 2023.01.22
### Updated
- Repository names in module list + version numbers
## [0.1.0] - 2023.01.12
### Added
- Inline code documentation
- Contribution guide and code of conduct
- Module installer and updater for handling package installation
### Updated
- A big refactor of code and classes
### Fixed
- Various bug fixes and improvements

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 7a3e4746243f04549af24f9f9eca1f06
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/CHANGELOG.md
uploadId: 704624

View File

@ -0,0 +1,80 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address, without their explicit permission
* Contacting individual members, contributors, or leaders privately, outside designated community mechanisms, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at support@readyplayer.me. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at <https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at <https://www.contributor-covenant.org/faq>. Translations are available at <https://www.contributor-covenant.org/translations>.

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 7879103106cd18d47b36fbbd7faf0b2c
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/CODE_OF_CONDUCT.md
uploadId: 704624

View File

@ -0,0 +1,136 @@
# Welcome to the Ready Player Me Unity SDK (Core) contributing guide
Thank you for investing your time in contributing to our project! Any contribution you make will be reflected on [https://github.com/readyplayerme/Unity-Core](https://github.com/readyplayerme/Unity-Core) :sparkles:.
Read our [Code of Conduct](./CODE_OF_CONDUCT.md) to keep our community approachable and respectable.
In this guide you will get an overview of the contribution workflow from opening an issue, creating a PR, reviewing, and merging the PR.
Use the table of contents icon on the top left corner of this document to get to a specific section of this guide quickly.
## New contributor guide
To get an overview of the project, read the [README](README.md). Here are some resources to help you get started with open source contributions:
- [FAQ](#faq)
- [Set up Git](https://docs.github.com/en/get-started/quickstart/set-up-git)
- [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow)
- [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests)
- [Code style guide](https://github.com/readyplayerme/rpm-unity-sdk-core/blob/main/style-guidelines.md)
## FAQ
#### **Did you find a bug?**
* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/readyplayerme/Unity-core/issues).
* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/readyplayerme/Unity-core/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
* If possible, use the relevant bug report templates to create the issue. Simply copy the content of the appropriate template into a .rb file, make the necessary changes to demonstrate the issue, and **paste the content into the issue description**:
* [**Generic template** for other issues](https://github.com/readyplayerme/Unity-Core/blob/develop/.github/pull_request_template.md)
* If you would like to contact us directly to report an issue or for general support requests contact our Ready Player Me Support email [support@readyplayer.me](mailto:support@readyplayer.me).
#### **Did you write a patch that fixes a bug?**
* Open a new GitHub pull request with the patch.
* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
* Before submitting, please read the [Contributing to Ready Player Me Unity SDK](#) guide to know more about our coding conventions and best practices.
#### **Did you fix whitespace, format code, or make a purely cosmetic patch?**
Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability will generally not be accepted.
#### **Do you intend to add a new feature or change an existing one?**
* Suggest your change to the Ready Player Me support email [support@readyplayer.me](mailto:support@readyplayer.me) and start writing code.
* **Do not open an issue on GitHub** until you have collected positive feedback about the change. GitHub issues are primarily intended for bug reports and fixes.
#### **Do you have questions about the source code?**
* Ask any question about how to use the Ready Player Me Unity SDK in the [Ready Player Me support email](mailto:support@readyplayer.me).
## Issues
#### Create a new issue
If you spot a problem with the docs, [search if an issue already exists](https://docs.github.com/en/github/searching-for-information-on-github/searching-on-github/searching-issues-and-pull-requests#search-by-the-title-body-or-comments). If a related issue doesn't exist, you can open a new issue using a relevant [issue form](https://github.com/github/docs/issues/new/choose).
#### Solve an issue
Scan through our [existing issues](https://github.com/github/docs/issues) to find one that interests you. You can narrow down the search using `labels` as filters. See [Labels](/contributing/how-to-use-labels.md) for more information. As a general rule, we dont assign issues to anyone. If you find an issue to work on, you are welcome to open a PR with a fix.
### Make Changes
#### Make changes locally
1. [Install Git LFS](https://docs.github.com/en/github/managing-large-files/versioning-large-files/installing-git-large-file-storage).
2. Fork the repository.
- Using GitHub Desktop:
- [Getting started with GitHub Desktop](https://docs.github.com/en/desktop/installing-and-configuring-github-desktop/getting-started-with-github-desktop) will guide you through setting up Desktop.
- Once Desktop is set up, you can use it to [fork the repo](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/cloning-and-forking-repositories-from-github-desktop)!
- Using the command line:
- [Fork the repo](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo#fork-an-example-repository) so that you can make your changes without affecting the original project until you're ready to merge them.
4. Create a working branch and start with your changes!
### Commit your update
We encourage following the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format when it comes to writing commit messages. Our package repositories come with a .githooks folder that has a commit-msg file that can enforce this.
To set this up you just need to configure git's hookspath folder to point there.
You can do this by
1. Open the terminal
2. Navigate to the root folder of this repository
3. Run the following command
`git config core.hooksPath .githooks`
Commit the changes once you are happy with them. Don't forget to [self-review](#self-review) to speed up the review process:zap:.
### Self review
You should always review your own PR first.
For content changes, make sure that you:
- [ ] Confirm that the changes meet the user experience and goals outlined in the content design plan (if there is one).
- [ ] Compare your pull request's source changes to staging to confirm that the output matches the source and that everything is rendering as expected. This helps spot issues like typos, content that doesn't follow the [style guide](https://github.com/readyplayerme/rpm-unity-sdk-core/blob/main/style-guidelines.md), or content that isn't rendering due to versioning problems. Remember that lists and tables can be tricky.
- [ ] Review the content for technical accuracy.
- [ ] Review the entire pull request using the [translations guide for writers](./translations/for-writers.md).
- [ ] Copy-edit the changes for grammar, spelling, and adherence to the [style guide](https://github.com/readyplayerme/rpm-unity-sdk-core/blob/main/style-guidelines.md).
- [ ] Check new or updated Liquid statements to confirm that versioning is correct.
- [ ] If there are any failing checks in your PR, troubleshoot them until they're all passing.
### Pull Request
When you're finished with the changes, create a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).
- Fill the "Ready for review" template so that we can review your PR. This template helps reviewers understand your changes as well as the purpose of your pull request.
- Don't forget to [link PR to issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if you are solving one.
- Enable the checkbox to [allow maintainer edits](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork) so the branch can be updated for a merge.
Once you submit your PR, a team member will review your proposal. We may ask questions or request additional information.
- We may ask for changes to be made before a PR can be merged, either using [suggested changes](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request) or pull request comments. You can apply suggested changes directly through the UI. You can make any other changes in your fork, then commit them to your branch.
- As you update your PR and apply changes, mark each conversation as [resolved](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request#resolving-conversations).
- If you run into any merge issues, checkout this [git tutorial](https://github.com/skills/resolve-merge-conflicts) to help you resolve merge conflicts and other issues.
### Your PR is merged!
Congratulations :tada::tada: The GitHub team thanks you :sparkles:.
Once your PR is merged, your contributions will be publicly visible on the [GitHub docs](https://docs.github.com/en).
Now that you are part of the GitHub docs community, see how else you can [contribute to the docs](/contributing/types-of-contributions.md).
Thanks! :heart: :heart: :heart:
Ready Player Me Team

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: a9911f547d3809f45a65e24379e1e2a0
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/CONTRIBUTING.md
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 93849b2d974237746812c1d8407d660a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3cd7b15d18039474489020dd9d3daf34
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace ReadyPlayerMe.AvatarCreator.Editor
{
[CustomPropertyDrawer(typeof(AssetTypeFilterAttribute))]
public class AssetTypeFilterDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
var assetTypeAttribute = attribute as AssetTypeFilterAttribute;
if (property.propertyType == SerializedPropertyType.Enum)
{
EditorGUI.BeginProperty(position, label, property);
EditorGUI.BeginChangeCheck();
// Get the current enum value
var currentEnumValue = (AssetType) property.enumValueIndex;
var filteredEnumNames = new List<string>();
foreach (var enumName in Enum.GetNames(typeof(AssetType)))
{
var enumFieldInfo = typeof(AssetType).GetField(enumName);
var enumAttribute = (AssetTypeFilterAttribute) Attribute.GetCustomAttribute(enumFieldInfo, typeof(AssetTypeFilterAttribute));
if (enumAttribute == null) continue;
var filter = (AssetFilter) Enum.Parse(typeof(AssetFilter), enumAttribute.filter.ToString());
if (filter == assetTypeAttribute?.filter)
{
filteredEnumNames.Add(enumName);
}
}
// Display the dropdown with filtered enum values
var newIndex = EditorGUI.Popup(position, label.text, Array.IndexOf(filteredEnumNames.ToArray(), currentEnumValue.ToString()), filteredEnumNames.ToArray());
// Set the new enum value if it has changed
if (EditorGUI.EndChangeCheck())
{
property.enumValueIndex = (int) Enum.Parse(typeof(AssetType), filteredEnumNames[newIndex]);
}
EditorGUI.EndProperty();
}
else
{
EditorGUI.LabelField(position, label.text, "Use AssetType with Enum.");
}
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 6add29e0a6c64d6786c6742dfbd87acf
timeCreated: 1702392584
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/AvatarCreator/AssetTypeFilterDrawer.cs
uploadId: 704624

View File

@ -0,0 +1,19 @@
{
"name": "ReadyPlayerMe.AvatarCreator.Editor",
"rootNamespace": "",
"references": [
"ReadyPlayerMe.Core",
"ReadyPlayerMe.AvatarCreator"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 0ed01c010d356f94b99818818dbd9430
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/AvatarCreator/ReadyPlayerMe.AvatarCreator.Editor.asmdef
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 17b21c922120b25458033294675f03ec
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 15d9bb0049cd8b245900c3f74fc99cb0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Ready Player Me/Core/Editor/Core/Resources/Banner.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,127 @@
fileFormatVersion: 2
guid: 97cb8e496ac634f4ba4c0a1bb899c8da
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Resources/Banner.png
uploadId: 704624

Binary file not shown.

View File

@ -0,0 +1,139 @@
fileFormatVersion: 2
guid: 38a8827f446904c4c802c5b7850e3ff0
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Resources/rpm_error_icon.png
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 05e3bb89ec0ad464c9a480276df7c651
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ac1c518000284e8ea25dfdd1284e0f16
timeCreated: 1657013631

View File

@ -0,0 +1,301 @@
using System;
using System.Collections.Generic;
using ReadyPlayerMe.Core.Editor;
using UnityEditor;
using UnityEngine;
using static ReadyPlayerMe.Core.Analytics.Constants;
namespace ReadyPlayerMe.Core.Analytics
{
public class AmplitudeEditorLogger : IAnalyticsEditorLogger
{
private const string SDK_TARGET = "Unity";
private readonly Dictionary<HelpSubject, string> helpDataMap = new()
{
{ HelpSubject.AvatarCaching, "avatar caching" },
{ HelpSubject.Subdomain, "subdomain" },
{ HelpSubject.AvatarConfig, "avatar config" },
{ HelpSubject.GltfDeferAgent, "gltf defer agent" },
{ HelpSubject.LoadingAvatars, "download avatar into scene" },
{
HelpSubject.Avatars, "avatars body type"
}
};
private bool isEnabled;
private readonly AppData appData;
public AmplitudeEditorLogger(bool isEnabled)
{
this.isEnabled = isEnabled;
appData = ApplicationData.GetData();
}
public void Enable()
{
isEnabled = true;
if (!AmplitudeEventLogger.IsSessionIdSet())
{
GenerateSessionId();
}
ToggleAnalytics(true);
}
public void Disable()
{
ToggleAnalytics(false);
isEnabled = false;
AmplitudeEventLogger.SetSessionId(0);
}
public void IdentifyUser()
{
if (!isEnabled) return;
if (!AmplitudeEventLogger.IsSessionIdSet())
{
GenerateSessionId();
}
SetUserProperties();
}
public void LogOpenProject()
{
if (!isEnabled) return;
GenerateSessionId();
AmplitudeEventLogger.LogEvent(EventName.OPEN_PROJECT);
}
public void LogCloseProject()
{
LogEvent(EventName.CLOSE_PROJECT);
}
public void LogOpenDocumentation(string target)
{
LogEvent(EventName.OPEN_DOCUMENTATION, new Dictionary<string, object>
{
{ Properties.TARGET, target }
});
}
public void LogOpenFaq(string target)
{
LogEvent(EventName.OPEN_FAQ, new Dictionary<string, object>
{
{ Properties.TARGET, target }
});
}
public void LogOpenDiscord(string target)
{
LogEvent(EventName.OPEN_DISCORD, new Dictionary<string, object>
{
{ Properties.TARGET, target }
});
}
public void LogLoadAvatarFromDialog(string avatarUrl, bool eyeAnimation, bool voiceHandler)
{
LogEvent(EventName.LOAD_AVATAR_FROM_DIALOG, new Dictionary<string, object>
{
{ Properties.AVATAR_URL, avatarUrl },
{ Properties.EYE_ANIMATION, eyeAnimation },
{ Properties.VOICE_HANDLER, voiceHandler }
});
}
public void LogUpdatePartnerURL(string previousSubdomain, string newSubdomain)
{
LogEvent(EventName.UPDATED_PARTNER_URL, new Dictionary<string, object>
{
{ Properties.PREVIOUS_SUBDOMAIN, previousSubdomain },
{ Properties.NEW_SUBDOMAIN, newSubdomain }
}, new Dictionary<string, object>
{
{ Properties.SUBDOMAIN, newSubdomain }
});
}
public void LogOpenDialog(string dialog)
{
LogEvent(EventName.OPEN_DIALOG, new Dictionary<string, object>
{
{ Properties.DIALOG, dialog }
});
}
public void LogBuildApplication(string target, string appName, bool productionBuild)
{
LogEvent(EventName.BUILD_APPLICATION, new Dictionary<string, object>
{
{ Properties.TARGET, target },
{ Properties.APP_NAME, appName },
{ Properties.PRODUCTION_BUILD, productionBuild },
{ Properties.APP_IDENTIFIER, Application.identifier }
});
}
public void LogMetadataDownloaded(double duration)
{
LogEvent(EventName.METADATA_DOWNLOADED, new Dictionary<string, object>
{
{ Properties.DURATION, duration }
});
}
public void LogAvatarLoaded(double duration)
{
LogEvent(EventName.AVATAR_LOADED, new Dictionary<string, object>
{
{ Properties.DURATION, duration }
});
}
public void LogCheckForUpdates()
{
LogEvent(EventName.CHECK_FOR_UPDATES);
}
public void LogSetLoggingEnabled(bool isLoggingEnabled)
{
LogEvent(EventName.SET_LOGGING_ENABLED, new Dictionary<string, object>
{
{ Properties.LOGGING_ENABLED, isLoggingEnabled }
});
}
public void LogSetCachingEnabled(bool isCachingEnabled)
{
LogEvent(EventName.SET_CACHING_ENABLED, new Dictionary<string, object>
{
{ Properties.CACHING_ENABLED, isCachingEnabled }
});
}
public void LogClearLocalCache()
{
LogEvent(EventName.CLEAR_LOCAL_CACHE);
}
public void LogViewPrivacyPolicy()
{
LogEvent(EventName.PRIVACY_POLICY);
}
public void LogShowInExplorer()
{
LogEvent(EventName.SHOW_IN_EXPLORER);
}
public void LogFindOutMore(HelpSubject subject)
{
LogEvent(EventName.FIND_OUT_MORE, new Dictionary<string, object>
{
{ Properties.CONTEXT, helpDataMap[subject] }
});
}
public void LogOpenSetupGuide()
{
LogEvent(EventName.OPEN_SETUP_GUIDE);
}
public void LogOpenIntegrationGuide()
{
LogEvent(EventName.OPEN_INTEGRATION_GUIDE);
}
public void LogLoadQuickStartScene()
{
LogEvent(EventName.LOAD_QUICK_START_SCENE);
}
public void LogOpenAvatarDocumentation()
{
LogEvent(EventName.OPEN_AVATAR_DOCUMENTATION);
}
public void LogOpenAnimationDocumentation()
{
LogEvent(EventName.OPEN_ANIMATION_DOCUMENTATION);
}
public void LogOpenAvatarCreatorDocumentation()
{
LogEvent(EventName.OPEN_AVATAR_CREATOR_DOCUMENTATION);
}
public void LogOpenOptimizationDocumentation()
{
LogEvent(EventName.OPEN_OPTIMIZATION_DOCUMENTATION);
}
public void LogAvatarCreatorSampleImported()
{
LogEvent(EventName.AVATAR_CREATOR_SAMPLE_IMPORTED);
}
public void LogPackageInstalled(string id, string name)
{
LogEvent(EventName.INSTALL_PACKAGE, new Dictionary<string, object>
{
{ "id", id },
{ "name", name }
});
}
private void SetUserProperties()
{
var userProperties = new Dictionary<string, object>
{
{ Properties.SDK_SOURCE_URL, PackageManagerHelper.GetSdkPackageSourceUrl() },
{ Properties.ENGINE_VERSION, appData.UnityVersion },
{ Properties.RENDER_PIPELINE, appData.RenderPipeline },
{ Properties.SUBDOMAIN, appData.PartnerName },
{ Properties.APP_NAME, PlayerSettings.productName },
{ Properties.SDK_TARGET, SDK_TARGET },
{ Properties.APP_IDENTIFIER, Application.identifier },
{ Properties.ALLOW_ANALYTICS, true }
};
var modules = ModuleList.GetInstalledModuleVersionDictionary();
foreach (var module in modules)
{
userProperties.Add(module.Key, module.Value);
}
LogEvent(EventName.SET_USER_PROPERTIES, null, userProperties);
}
private void GenerateSessionId()
{
AmplitudeEventLogger.SetSessionId(DateTimeOffset.Now.ToUnixTimeMilliseconds());
}
private void ToggleAnalytics(bool allow)
{
LogEvent(EventName.ALLOW_ANALYTICS, new Dictionary<string, object>
{
{ Properties.ALLOW, allow }
}, new Dictionary<string, object>
{
{ Properties.ENGINE_VERSION, appData.UnityVersion },
{ Properties.RENDER_PIPELINE, appData.RenderPipeline },
{ Properties.SUBDOMAIN, appData.PartnerName },
{ Properties.APP_NAME, PlayerSettings.productName },
{ Properties.SDK_TARGET, "Unity" },
{ Properties.APP_IDENTIFIER, Application.identifier },
{ Properties.ALLOW_ANALYTICS, allow }
});
}
private void LogEvent(string eventName, Dictionary<string, object> eventProperties = null, Dictionary<string, object> userProperties = null)
{
if (!isEnabled) return;
AmplitudeEventLogger.LogEvent(eventName, eventProperties, userProperties);
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ed6804cd2c9d4b9bb873a4c1cd6af062
timeCreated: 1657032252
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Analytics/AmplitudeEditorLogger.cs
uploadId: 704624

View File

@ -0,0 +1,31 @@
using ReadyPlayerMe.Core.Editor;
namespace ReadyPlayerMe.Core.Analytics
{
public static class AnalyticsEditorLogger
{
public static readonly IAnalyticsEditorLogger EventLogger;
static AnalyticsEditorLogger()
{
IsEnabled = CoreSettingsHandler.CoreSettings.EnableAnalytics;
EventLogger = new AmplitudeEditorLogger(IsEnabled);
}
public static bool IsEnabled { get; private set; }
public static void Enable()
{
IsEnabled = true;
EventLogger.Enable();
CoreSettingsSetter.SetEnableAnalytics(true);
}
public static void Disable()
{
EventLogger.Disable();
IsEnabled = false;
CoreSettingsSetter.SetEnableAnalytics(false);
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: fc2862cbf129461eaa91ca136d9d045d
timeCreated: 1658921992
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Analytics/AnalyticsEditorLogger.cs
uploadId: 704624

View File

@ -0,0 +1,74 @@
namespace ReadyPlayerMe.Core.Analytics
{
public static class Constants
{
public static class EventName
{
public const string OPEN_PROJECT = "open project";
public const string OPEN_DOCUMENTATION = "open documentation";
public const string OPEN_FAQ = "open faq";
public const string OPEN_DISCORD = "open discord";
public const string LOAD_AVATAR_FROM_DIALOG = "load avatar from dialog";
public const string UPDATED_PARTNER_URL = "updated partner url";
public const string ALLOW_ANALYTICS = "allow analytics";
public const string OPEN_DIALOG = "open dialog";
public const string BUILD_APPLICATION = "build application";
public const string CLOSE_PROJECT = "close project";
public const string METADATA_DOWNLOADED = "metadata downloaded";
public const string AVATAR_LOADED = "avatar loaded";
public const string SET_USER_PROPERTIES = "set user properties";
public const string CLEAR_LOCAL_CACHE = "clear local cache";
public const string SHOW_IN_EXPLORER = "show in explorer";
public const string SET_LOGGING_ENABLED = "set logging enabled";
public const string SET_CACHING_ENABLED = "set caching enabled";
public const string CHECK_FOR_UPDATES = "check for updates";
public const string PRIVACY_POLICY = "view privacy policy";
public const string FIND_OUT_MORE = "find out more";
public const string OPEN_SETUP_GUIDE = "open setup guide";
public const string OPEN_INTEGRATION_GUIDE = "open integration guide";
public const string LOAD_QUICK_START_SCENE = "load quick start scene";
public const string OPEN_AVATAR_DOCUMENTATION = "open avatar documentation";
public const string OPEN_ANIMATION_DOCUMENTATION = "open animation documentation";
public const string OPEN_AVATAR_CREATOR_DOCUMENTATION = "open avatar creator documentation";
public const string OPEN_OPTIMIZATION_DOCUMENTATION = "open optimization documentation";
public const string AVATAR_CREATOR_SAMPLE_IMPORTED = "Avatar creator sample imported";
public const string INSTALL_PACKAGE = "install unity package";
}
public static class Properties
{
public const string SDK_SOURCE_URL = "sdk source url";
public const string ENGINE_VERSION = "engine version";
public const string RENDER_PIPELINE = "render pipeline";
public const string SUBDOMAIN = "subdomain";
public const string APP_NAME = "app name";
public const string SDK_TARGET = "sdk target";
public const string TARGET = "target";
public const string EYE_ANIMATION = "eye animation";
public const string VOICE_HANDLER = "voice handler";
public const string PREVIOUS_SUBDOMAIN = "previous subdomain";
public const string NEW_SUBDOMAIN = "new subdomain";
public const string ALLOW = "allow";
public const string DIALOG = "dialog";
public const string PRODUCTION_BUILD = "production build";
public const string AVATAR_URL = "avatar url";
public const string APP_IDENTIFIER = "app identifier";
public const string ALLOW_ANALYTICS = "allow analytics";
public const string DURATION = "duration";
public const string LOGGING_ENABLED = "logging enabled";
public const string CACHING_ENABLED = "caching enabled";
public const string CONTEXT = "context";
}
public static class Links
{
public const string DOCS_PARTNERS_LINK = "https://docs.readyplayer.me/ready-player-me/what-is-ready-player-me#url";
public const string DOCS_DEFER_AGENT_LINK = "https://docs.readyplayer.me/ready-player-me/integration-guides/unity/optimize/defer-agents";
public const string DOCS_AVATAR_LOADER_WINDOW = "https://docs.readyplayer.me/ready-player-me/integration-guides/unity/avatar-loader-window";
public const string DOCS_AVATAR_CONFIG_LINK = "https://docs.readyplayer.me/ready-player-me/integration-guides/unity/optimize/avatar-configuration";
public const string DOCS_AVATAR_CACHING = "https://docs.readyplayer.me/ready-player-me/integration-guides/unity/optimize/avatar-caching";
public const string AVATARS = "https://docs.readyplayer.me/ready-player-me/api-reference/avatars";
public const string APP_ID = "https://docs.readyplayer.me/ready-player-me/integration-guides/unity/avatar-creator/custom-avatar-creator#prerequisites";
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e7e6b1c7b30a462e971d46dd09b38bdf
timeCreated: 1657013679
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Analytics/Constants.cs
uploadId: 704624

View File

@ -0,0 +1,12 @@
namespace ReadyPlayerMe.Core.Analytics
{
public enum HelpSubject
{
AvatarCaching,
Subdomain,
AvatarConfig,
GltfDeferAgent,
LoadingAvatars,
Avatars
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 38767189f66d5bc4d8dfe76b552103f5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Analytics/HelpSubject.cs
uploadId: 704624

View File

@ -0,0 +1,36 @@
namespace ReadyPlayerMe.Core.Analytics
{
public interface IAnalyticsEditorLogger
{
void Enable();
void Disable();
void IdentifyUser();
void LogOpenProject();
void LogCloseProject();
void LogOpenDocumentation(string target);
void LogOpenFaq(string target);
void LogOpenDiscord(string target);
void LogLoadAvatarFromDialog(string avatarUrl, bool eyeAnimation, bool voiceHandler);
void LogUpdatePartnerURL(string previousSubdomain, string newSubdomain);
void LogOpenDialog(string dialog);
void LogBuildApplication(string target, string appName, bool productionBuild);
void LogMetadataDownloaded(double duration);
void LogAvatarLoaded(double duration);
void LogCheckForUpdates();
void LogSetLoggingEnabled(bool isLoggingEnabled);
void LogSetCachingEnabled(bool isCachingEnabled);
void LogClearLocalCache();
void LogViewPrivacyPolicy();
void LogShowInExplorer();
void LogFindOutMore(HelpSubject subject);
void LogOpenSetupGuide();
void LogOpenIntegrationGuide();
void LogLoadQuickStartScene();
void LogOpenAvatarDocumentation();
void LogOpenAnimationDocumentation();
void LogOpenAvatarCreatorDocumentation();
void LogOpenOptimizationDocumentation();
void LogAvatarCreatorSampleImported();
void LogPackageInstalled(string id, string name);
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 2a73e3153ee348d199f878b693a5e1f7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Analytics/IAnalyticsEditorLogger.cs
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 56a89e876009bc043b3211c63f594371
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,16 @@
using System;
using System.Text.RegularExpressions;
namespace ReadyPlayerMe.Core.Editor
{
public static class StringExtensions
{
private const string SHORT_CODE_REGEX = "^[A-Z0-9]{6}$";
public static bool IsUrlShortcodeValid(this string urlString)
{
return !string.IsNullOrEmpty(urlString) &&
(Regex.Match(urlString, SHORT_CODE_REGEX).Length > 0 || Uri.IsWellFormedUriString(urlString, UriKind.Absolute) && urlString.EndsWith(".glb"));
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: d58d3d8f33d435f4aa8b5b0b6625bcbb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Extensions/StringExtensions.cs
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c882a7949df662b428444bc798c7ebb8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,48 @@
using System;
using ReadyPlayerMe.Core.Analytics;
using UnityEditor;
namespace ReadyPlayerMe.Core.Editor
{
/// <summary>
/// This class serves as a way of tracking when the Unity project (editor) is initially opened so that functions can be run at this point.
/// </summary>
[InitializeOnLoad]
public static class EntryPoint
{
private const string SESSION_STARTED_KEY = "SessionStarted";
/// Event for when package is imported or when project with package is opened.
public static Action Startup;
/// <summary>
/// This constructor is used to subscribe to the <see cref="EditorApplication.update"/> event.
/// </summary>
static EntryPoint()
{
if (!SessionState.GetBool(SESSION_STARTED_KEY, false))
{
SessionState.SetBool(SESSION_STARTED_KEY, true);
EditorApplication.update += Update;
}
}
/// <summary>
/// This function is called on every Editor <see cref="EditorApplication.update"/>.
/// It is used to trigger moduleUpdater to check for updates when the Unity Project launches.
/// </summary>
private static void Update()
{
EditorApplication.update -= Update;
AnalyticsEditorLogger.EventLogger.LogOpenProject();
AnalyticsEditorLogger.EventLogger.IdentifyUser();
Startup?.Invoke();
EditorApplication.quitting += OnQuit;
}
private static void OnQuit()
{
AnalyticsEditorLogger.EventLogger.LogCloseProject();
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 71bde74e39624415805f1552261fd75e
timeCreated: 1657016805
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/ModuleManagement/EntryPoint.cs
uploadId: 704624

View File

@ -0,0 +1,37 @@
using System;
namespace ReadyPlayerMe.Core.Editor
{
/// <summary>
/// Structure <c>ModuleInfo</c> describes a Ready Player Me Module or Unity package.
/// </summary>
[Serializable]
public struct ModuleInfo
{
public string name;
public string gitUrl;
public string branch;
public string version;
/// <summary>
/// Get the Unity package identifier.
/// </summary>
/// <returns>
/// A <c>string</c> representing the Unity packages Git Url including branch if specified. Returns module name if
/// gitUrl is not set.
/// </returns>
public string Identifier
{
get
{
if (gitUrl == string.Empty)
{
return name;
}
// if branch not set, default to the version in ModuleList
return gitUrl + (string.IsNullOrEmpty(branch) ? $"#v{version}" : $"#{branch}");
}
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: f14ac780c523d32408d7ea9c6f78e692
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/ModuleManagement/ModuleInfo.cs
uploadId: 704624

View File

@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using UnityEditor;
using UnityEditor.Compilation;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
using UnityEngine;
using PackageInfo = UnityEditor.PackageManager.PackageInfo;
namespace ReadyPlayerMe.Core.Editor
{
/// <summary>
/// Class <c>ModuleInstaller</c> is responsible for checking and installing all modules (Unity packages) required for
/// the Ready Player Me Unity SDK from their Git URL's.
/// </summary>
[InitializeOnLoad]
public static class ModuleInstaller
{
private const string TAG = nameof(ModuleInstaller);
private const int THREAD_SLEEP_TIME = 100;
private const float TIMEOUT_FOR_MODULE_INSTALLATION = 20f;
static ModuleInstaller()
{
Events.registeringPackages -= OnRegisteringPackages;
Events.registeringPackages += OnRegisteringPackages;
#if !READY_PLAYER_ME
EditorApplication.delayCall += DelayCreateCoreSettings;
DefineSymbolHelper.AddSymbols();
#endif
}
/// <summary>
/// Called when a package is about to be added, removed or changed.
/// </summary>
/// <param name="args">Describes the <c>PackageInfo</c> entries of packages currently registering.</param>
private static void OnRegisteringPackages(PackageRegistrationEventArgs args)
{
// Core module uninstalled
if (args.removed != null && args.removed.Any(p => p.name == ModuleList.Core.name))
{
DefineSymbolHelper.RemoveSymbols();
ProjectPrefs.SetBool(ProjectPrefs.FIRST_TIME_SETUP_DONE, false);
}
}
private static void DelayCreateCoreSettings()
{
EditorApplication.delayCall -= DelayCreateCoreSettings;
CoreSettingsLoader.EnsureSettingsExist();
}
/// <summary>
/// Request UPM to install the given module with the identifier.
/// </summary>
/// <param name="identifier">The Unity package identifier of the module to be installed.</param>
public static void AddModuleRequest(string identifier)
{
var startTime = Time.realtimeSinceStartup;
AddRequest addRequest = Client.Add(identifier);
while (!addRequest.IsCompleted && Time.realtimeSinceStartup - startTime < TIMEOUT_FOR_MODULE_INSTALLATION)
Thread.Sleep(THREAD_SLEEP_TIME);
if (Time.realtimeSinceStartup - startTime >= TIMEOUT_FOR_MODULE_INSTALLATION)
{
Debug.LogError($"Package installation timed out for {identifier}. Please try again.");
}
if (addRequest.Error != null)
{
Debug.LogError("Error: " + addRequest.Error.message);
}
}
/// <summary>
/// Check if the given module with the name is currently installed.
/// </summary>
/// <param name="name">Name of the module.</param>
/// <returns>A boolean <c>true</c> if the module is installed.</returns>
public static bool IsModuleInstalled(string name)
{
return GetPackageList().Any(info => info.name == name);
}
/// <summary>
/// Get the list of unity packages installed in the current project.
/// </summary>
/// <returns>An array of <c>PackageInfo</c>.</returns>
public static PackageInfo[] GetPackageList()
{
ListRequest listRequest = Client.List(true);
while (!listRequest.IsCompleted)
Thread.Sleep(THREAD_SLEEP_TIME);
if (listRequest.Error != null)
{
SDKLogger.Log(TAG, "Error: " + listRequest.Error.message);
return Array.Empty<PackageInfo>();
}
return listRequest.Result.ToArray();
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 5201abe9c7e36574d90cd052f0e8cda3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/ModuleManagement/ModuleInstaller.cs
uploadId: 704624

View File

@ -0,0 +1,72 @@
using System.Collections.Generic;
using System.Linq;
using UnityEditor.PackageManager;
namespace ReadyPlayerMe.Core.Editor
{
/// <summary>
/// Class <c>ModuleList</c> is a static class that can be referenced to get the latest module version.
/// </summary>
public static class ModuleList
{
public static ModuleInfo Core = new ModuleInfo
{
name = "com.readyplayerme.core",
gitUrl = "https://github.com/readyplayerme/rpm-unity-sdk-core.git",
branch = "",
version = "5.0.0"
};
/// <summary>
/// A static list of all the required modules represented in an array of <c>ModuleInfo</c>.
/// </summary>
public static readonly ModuleInfo[] Modules =
{
new ModuleInfo
{
name = "com.readyplayerme.webview",
gitUrl = "https://github.com/readyplayerme/rpm-unity-sdk-webview.git",
branch = "",
version = "2.1.3"
}
};
/// <summary>
/// Unity Module that adds support for gltf files that use DracoCompression.
/// </summary>
public static ModuleInfo DracoCompression = new ModuleInfo
{
name = "com.atteneder.draco",
gitUrl = "https://github.com/atteneder/DracoUnity.git",
branch = "",
version = "4.1.0"
};
/// <summary>
/// Get installed modules from Modules list.
/// </summary>
/// <returns>A <see cref="Dictionary"/> of installed Unity Module information in the format of <c>Dictionary&lt;string: name, string: version&gt;</c>. </returns>
public static Dictionary<string, string> GetInstalledModuleVersionDictionary()
{
PackageInfo[] packageList = ModuleInstaller.GetPackageList();
var installedModules = new Dictionary<string, string>();
installedModules.Add(Core.name, Core.version);
foreach (ModuleInfo module in Modules)
{
if (packageList.Any(x => x.name == module.name))
{
installedModules.Add(module.name, module.version);
}
}
if (packageList.Any(x => x.name == DracoCompression.name))
{
installedModules.Add(DracoCompression.name, DracoCompression.version);
}
return installedModules;
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 725bcc26dc146374c8f0d96d3928d7ca
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/ModuleManagement/ModuleList.cs
uploadId: 704624

View File

@ -0,0 +1,211 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using ReadyPlayerMe.Core.Analytics;
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
using UnityEngine;
using UnityEngine.Networking;
using PackageInfo = UnityEditor.PackageManager.PackageInfo;
namespace ReadyPlayerMe.Core.Editor
{
/// <summary>
/// It is responsible for checking and updating the Ready Player Me SDK modules.
/// </summary>
[InitializeOnLoad]
public class ModuleUpdater
{
private class Release
{
[JsonProperty("tag_name")]
public string Tag;
}
private const string PACKAGE_JSON = "package.json";
private const string PACKAGE_DOMAIN = "com.readyplayerme";
private const string GITHUB_WEBSITE = "https://github.com";
private const string GITHUB_API_URL = "https://api.github.com/repos";
private const int MILLISECONDS_TIMEOUT = 20;
private const string ASSET_FILTER = "package";
private const string DONT_ASK = "Dont Ask";
private const string UPDATE_PACKAGES_WINDOW_TITLE = "Update Packages";
private const string UPDATE_BUTTON_TEXT = "Update";
private const string CANCEL_BUTTON_TEXT = "Cancel";
private const string DONT_ASK_TEXT = "Don't ask";
private const string AVATAR_LOADER_PACKAGE = "com.readyplayerme.avatarloader";
static ModuleUpdater()
{
EntryPoint.Startup += () => Check(true);
}
/// <summary>
/// Check for Ready Player Me package updates.
/// </summary>
[MenuItem("Tools/Ready Player Me/Check For Updates", priority = 23)]
public static void CheckForUpdates()
{
AnalyticsEditorLogger.EventLogger.LogCheckForUpdates();
Check();
}
private static void Check(bool isStartup = false)
{
// Get PackageInfo array from RPM Module package.json files
PackageInfo[] packages = AssetDatabase.FindAssets(ASSET_FILTER)
.Select(AssetDatabase.GUIDToAssetPath)
.Where(x => x.Contains(PACKAGE_JSON) && x.Contains(PACKAGE_DOMAIN))
.Select(PackageInfo.FindForAssetPath)
.ToArray();
if (packages.Length == 0)
{
Debug.Log("No rpm package found");
}
// Turn package_name@repo_url#branch_name into https://api.github.com/repos/readyplayerme/repo_name/releases
foreach (PackageInfo package in packages)
{
var repoUrl = package.packageId.Split('@')[1];
var releasesUrl = repoUrl
.Split(new[] { ".git" }, StringSplitOptions.None)[0]
.Replace(GITHUB_WEBSITE, GITHUB_API_URL) + "/releases";
var packageUrl = repoUrl.Split('#')[0];
// Experimental or prerelease packages might look like 0.1.0-exp.1, remove after dash to parse with Version
var version = package.version.Split('-')[0];
if (isStartup && EditorPrefs.GetBool(DONT_ASK + "-" + package.name))
{
continue;
}
FetchReleases(package.name, packageUrl, releasesUrl, new Version(version));
}
}
/// <summary>
/// Fetch latest release for each module and prompt for update if available.
/// </summary>
/// <param name="packageName">The name of the Unity package.</param>
/// <param name="packageUrl">The Git URL of the Unity package.</param>
/// <param name="releasesUrl">The Git URL of the Unity package.</param>
/// <param name="currentVersion">The current version of the package.</param>
private static async void FetchReleases(string packageName, string packageUrl, string releasesUrl,
Version currentVersion)
{
UnityWebRequest request = UnityWebRequest.Get(releasesUrl);
UnityWebRequestAsyncOperation op = request.SendWebRequest();
while (!op.isDone) await Task.Yield();
if (request.result == UnityWebRequest.Result.Success)
{
var response = request.downloadHandler.text;
Release[] releases = JsonConvert.DeserializeObject<Release[]>(response);
Version[] versions = releases!.Select(r => new Version(r.Tag.Substring(1).Split('-')[0])).ToArray();
Version latestVersion = versions.Max();
if (latestVersion > currentVersion)
{
DisplayUpdateDialog(packageName, currentVersion, latestVersion, packageUrl);
}
}
else
{
Debug.Log($"Failed to fetch {packageName} releases. Error: {request.error} ");
}
}
/// <summary>
/// Display a Unity popup with notification about available package updates with buttons to update or skip.
/// </summary>
/// <param name="packageName">The name of the Unity package.</param>
/// <param name="currentVersion">The current version of the package.</param>
/// <param name="latestVersion">The new version of the package.</param>
/// <param name="packageUrl">The Git URL of the Unity package.</param>
private static void DisplayUpdateDialog(string packageName, Version currentVersion, Version latestVersion,
string packageUrl)
{
var shouldUpdate = EditorUtility.DisplayDialogComplex(UPDATE_PACKAGES_WINDOW_TITLE,
$"New update available for {packageName}\nCurrent version: {currentVersion}\nLatest version: {latestVersion}",
UPDATE_BUTTON_TEXT,
CANCEL_BUTTON_TEXT,
DONT_ASK_TEXT);
switch (shouldUpdate)
{
// Update
case 0:
CheckIfMajorRelease(packageName, currentVersion, latestVersion, packageUrl);
break;
// Cancel
case 1:
// Do nothing
break;
// Don't ask
case 2:
EditorPrefs.SetBool(DONT_ASK + "-" + packageName, true);
break;
}
}
private static void CheckIfMajorRelease(string packageName, Version currentVersion, Version latestVersion,
string packageUrl)
{
if (latestVersion.Major > currentVersion.Major)
{
BreakingChangeDialog.ShowDialog(() =>
{
UpdateModule(packageName, packageUrl, currentVersion, latestVersion);
});
}
else
{
UpdateModule(packageName, packageUrl, currentVersion, latestVersion);
}
}
/// <summary>
/// Update the specified module by removing the current version and then adding the specified version.
/// </summary>
/// <param name="name">The name of the Unity package.</param>
/// <param name="url">The Git URL of the Unity package.</param>
/// <param name="current">The current version of the package.</param>
/// <param name="latest">The new version of the package.</param>
private static void UpdateModule(string name, string url, Version current, Version latest)
{
url += "#v" + latest;
CleanRedundantAvatarLoader();
RemoveRequest removeRequest = Client.Remove(name);
while (!removeRequest.IsCompleted) Thread.Sleep(MILLISECONDS_TIMEOUT);
AddRequest addRequest = Client.Add(url);
while (!addRequest.IsCompleted) Thread.Sleep(MILLISECONDS_TIMEOUT);
Debug.Log($"Updated {name} from v{current} to v{latest}");
}
private static void CleanRedundantAvatarLoader()
{
if (!ModuleInstaller.IsModuleInstalled(AVATAR_LOADER_PACKAGE))
{
return;
}
RemoveRequest removeRequest = Client.Remove(AVATAR_LOADER_PACKAGE);
while (!removeRequest.IsCompleted) Thread.Sleep(MILLISECONDS_TIMEOUT);
}
}
}

View File

@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 40c5062ebf8390443a66ccca5f9d4507
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/ModuleManagement/ModuleUpdater.cs
uploadId: 704624

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2ac2b39cc7ef4a5988d6ac77077db307
timeCreated: 1699344120

View File

@ -0,0 +1,35 @@
using System;
using System.Linq;
using ReadyPlayerMe.Core.Analytics;
using UnityEditor;
using UnityEditor.PackageManager;
namespace ReadyPlayerMe.Core.Editor
{
public abstract class PackageManagerEventListener
{
public static event Action<string> OnPackageImported;
[InitializeOnLoadMethod]
static void Initialize()
{
Events.registeredPackages += OnPackagesInstalled;
}
~PackageManagerEventListener()
{
Events.registeredPackages -= OnPackagesInstalled;
}
static void OnPackagesInstalled(PackageRegistrationEventArgs packageRegistrationEventArgs)
{
packageRegistrationEventArgs.added
.ToList()
.ForEach(packageInfo =>
{
OnPackageImported?.Invoke(packageInfo.name);
AnalyticsEditorLogger.EventLogger.LogPackageInstalled(packageInfo.name, packageInfo.packageId);
});
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a08c3f9ac3c142dc9ea5d854a1bc3af1
timeCreated: 1699344135
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/PackageManager/PackageManagerEventListener.cs
uploadId: 704624

View File

@ -0,0 +1,68 @@
using System;
using System.Linq;
using System.Threading;
using UnityEditor.PackageManager;
using UnityEngine;
namespace ReadyPlayerMe.Core.Editor
{
public abstract class PackageManagerHelper
{
private const string TAG = nameof(PackageManagerHelper);
private const int THREAD_SLEEP_TIME = 100;
private const float TIMEOUT_FOR_PACKAGE_INSTALLATION = 20f;
private const string READY_PLAYER_ME_PACKAGE_PATH = "Packages/com.readyplayerme.core";
public static bool IsPackageInstalled(string name)
{
return GetPackageList().Any(info => info.name == name);
}
/// <summary>
/// Get the list of unity packages installed in the current project.
/// </summary>
/// <returns>An array of <c>PackageInfo</c>.</returns>
public static PackageInfo[] GetPackageList()
{
var listRequest = Client.List(true);
while (!listRequest.IsCompleted)
Thread.Sleep(THREAD_SLEEP_TIME);
if (listRequest.Error == null)
{
return listRequest.Result.ToArray();
}
SDKLogger.Log(TAG, "Error: " + listRequest.Error.message);
return Array.Empty<PackageInfo>();
}
public static string GetSdkPackageSourceUrl()
{
var sdkPackageInfo = PackageInfo.FindForAssetPath(READY_PLAYER_ME_PACKAGE_PATH);
return sdkPackageInfo?.packageId
.Split(new[] { '@' }, StringSplitOptions.RemoveEmptyEntries)
.LastOrDefault();
}
public static void AddPackage(string identifier)
{
var startTime = Time.realtimeSinceStartup;
var addRequest = Client.Add(identifier);
while (!addRequest.IsCompleted && Time.realtimeSinceStartup - startTime < TIMEOUT_FOR_PACKAGE_INSTALLATION)
Thread.Sleep(THREAD_SLEEP_TIME);
if (Time.realtimeSinceStartup - startTime >= TIMEOUT_FOR_PACKAGE_INSTALLATION)
{
Debug.LogError($"Package installation timed out for {identifier}. Please try again.");
}
if (addRequest.Error != null)
{
Debug.LogError("Error: " + addRequest.Error.message);
}
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 1c12b21e35214e19a1c3dfe7148a3fda
timeCreated: 1698851420
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/PackageManager/PackageManagerHelper.cs
uploadId: 704624

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dc95a31f3c977d74d95cba569605dbf1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,19 @@
using ReadyPlayerMe.Core.Analytics;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;
namespace ReadyPlayerMe.Core.Editor
{
public static class BuildPostProcessor
{
[PostProcessBuild(1)]
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
{
// create asset if it has been deleted
CoreSettingsLoader.EnsureSettingsExist();
AppData appData = ApplicationData.GetData();
AnalyticsEditorLogger.EventLogger.LogBuildApplication(appData.BuildTarget, PlayerSettings.productName, !Debug.isDebugBuild);
}
}
}

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9efa9adc0c4948579b226dac039a2e85
timeCreated: 1657013212
AssetOrigin:
serializedVersion: 1
productId: 259814
packageName: Ready Player Me Avatar and Character Creator
packageVersion: 7.3.1
assetPath: Assets/Ready Player Me/Core/Editor/Core/Scripts/Processors/BuildPostProcessor.cs
uploadId: 704624

Some files were not shown because too many files have changed in this diff Show More