20 Commits

Author SHA1 Message Date
raccoon
36a4cd76b1 Added Apply Modifiers 2025-01-29 01:35:07 +05:00
raccoon
01f42bcce5 Cleanup 2025-01-29 00:32:34 +05:00
raccoon
47a346551c Yoink 2025-01-29 00:30:00 +05:00
raccoon
0fcc132eac Deform only armature 2025-01-28 14:47:12 +05:00
raccoon
acc87b4b09 Cleanup 2025-01-28 08:50:42 +05:00
raccoon
89d3c504e6 Order 2025-01-28 08:49:48 +05:00
raccoon
fb5a718243 Even more future-proof implementation 2025-01-28 07:31:52 +05:00
raccoon
8f6a83b86f More stuff 2025-01-28 07:22:11 +05:00
raccoon
0f37a5a02c Added binary exporter 2025-01-28 06:37:44 +05:00
raccoon
27c93c3e29 Future-proof implementation 2.0 2025-01-23 20:04:04 +05:00
raccoon
6c7f9e5493 Revert "Future-proof implementation"
This reverts commit 5a270289f0.
2025-01-20 04:06:20 +05:00
raccoon
5a270289f0 Future-proof implementation 2025-01-20 03:16:06 +05:00
raccoon
a01ccf03ce Export animation, but not default one 2025-01-20 01:45:02 +05:00
raccoon
c2e20e8aa7 Added all scripts 2025-01-11 22:25:32 +05:00
raccoon
9bc6821b6d Added Triplanar setup script 2024-12-25 18:24:47 +05:00
raccoon
821a60251c AMEND ME!!! 2024-12-16 01:29:38 +05:00
raccoon
b1690c7a57 Much less cluttered version of the script 2024-12-16 01:29:38 +05:00
raccoon
3fd6371608 Brand new export script with filtering 2024-12-16 01:29:37 +05:00
raccoon
957768b38a Updated export script 2024-12-16 01:29:33 +05:00
raccoon
255858a478 Added VRC project structure example 2024-12-16 01:29:28 +05:00
62 changed files with 646 additions and 1486 deletions

5
.gitignore vendored
View File

@@ -28,10 +28,6 @@
# Visual Studio cache directory
.vs/
# Visual Studio Code trash
/.vscode/*
!/.vscode/settings.json
# Gradle cache directory
.gradle/
@@ -94,7 +90,6 @@ crashlytics-build.properties
/[Aa]ssets/UdonSharp/Scripts/Editor/
/[Aa]ssets/UdonSharp/Scripts/Editor.meta
/[Aa]ssets/SerializedUdonPrograms*
/ClientSimStorage/
# UdonSharp trash
/[Aa]ssets/UdonSharp

349
.vscode/settings.json vendored
View File

@@ -1,349 +0,0 @@
{
"files.associations": {
"*.anim": "yaml",
"*.asset": "yaml",
"*.controller": "yaml",
"*.cubemap": "yaml",
"*.flare": "yaml",
"*.lighting": "yaml",
"*.mask": "yaml",
"*.mat": "yaml",
"*.meta": "yaml",
"*.prefab": "yaml",
"*.renderTexture": "yaml",
"*.unity": "yaml",
"*.wlt": "yaml",
},
"yaml.customTags": [
"tag:unity3d.com,2011:0 mapping", // object
"tag:unity3d.com,2011:1 mapping", // GameObject
"tag:unity3d.com,2011:2 mapping", // Component
"tag:unity3d.com,2011:3 mapping", // LevelGameManager
"tag:unity3d.com,2011:4 mapping", // Transform
"tag:unity3d.com,2011:5 mapping", // TimeManager
"tag:unity3d.com,2011:6 mapping", // GlobalGameManager
"tag:unity3d.com,2011:8 mapping", // Behaviour
"tag:unity3d.com,2011:9 mapping", // GameManager
"tag:unity3d.com,2011:11 mapping", // AudioManager
"tag:unity3d.com,2011:13 mapping", // InputManager
"tag:unity3d.com,2011:18 mapping", // EditorExtension
"tag:unity3d.com,2011:19 mapping", // Physics2DSettings
"tag:unity3d.com,2011:20 mapping", // Camera
"tag:unity3d.com,2011:21 mapping", // Material
"tag:unity3d.com,2011:23 mapping", // MeshRenderer
"tag:unity3d.com,2011:25 mapping", // Renderer
"tag:unity3d.com,2011:27 mapping", // Texture
"tag:unity3d.com,2011:28 mapping", // Texture2D
"tag:unity3d.com,2011:29 mapping", // OcclusionCullingSettings
"tag:unity3d.com,2011:30 mapping", // GraphicsSettings
"tag:unity3d.com,2011:33 mapping", // MeshFilter
"tag:unity3d.com,2011:41 mapping", // OcclusionPortal
"tag:unity3d.com,2011:43 mapping", // Mesh
"tag:unity3d.com,2011:45 mapping", // Skybox
"tag:unity3d.com,2011:47 mapping", // QualitySettings
"tag:unity3d.com,2011:48 mapping", // Shader
"tag:unity3d.com,2011:49 mapping", // TextAsset
"tag:unity3d.com,2011:50 mapping", // Rigidbody2D
"tag:unity3d.com,2011:53 mapping", // Collider2D
"tag:unity3d.com,2011:54 mapping", // Rigidbody
"tag:unity3d.com,2011:55 mapping", // PhysicsManager
"tag:unity3d.com,2011:56 mapping", // Collider
"tag:unity3d.com,2011:57 mapping", // Joint
"tag:unity3d.com,2011:58 mapping", // CircleCollider2D
"tag:unity3d.com,2011:59 mapping", // HingeJoint
"tag:unity3d.com,2011:60 mapping", // PolygonCollider2D
"tag:unity3d.com,2011:61 mapping", // BoxCollider2D
"tag:unity3d.com,2011:62 mapping", // PhysicsMaterial2D
"tag:unity3d.com,2011:64 mapping", // MeshCollider
"tag:unity3d.com,2011:65 mapping", // BoxCollider
"tag:unity3d.com,2011:66 mapping", // CompositeCollider2D
"tag:unity3d.com,2011:68 mapping", // EdgeCollider2D
"tag:unity3d.com,2011:70 mapping", // CapsuleCollider2D
"tag:unity3d.com,2011:72 mapping", // ComputeShader
"tag:unity3d.com,2011:74 mapping", // AnimationClip
"tag:unity3d.com,2011:75 mapping", // ConstantForce
"tag:unity3d.com,2011:78 mapping", // TagManager
"tag:unity3d.com,2011:81 mapping", // AudioListener
"tag:unity3d.com,2011:82 mapping", // AudioSource
"tag:unity3d.com,2011:83 mapping", // AudioClip
"tag:unity3d.com,2011:84 mapping", // RenderTexture
"tag:unity3d.com,2011:86 mapping", // CustomRenderTexture
"tag:unity3d.com,2011:89 mapping", // Cubemap
"tag:unity3d.com,2011:90 mapping", // Avatar
"tag:unity3d.com,2011:91 mapping", // AnimatorController
"tag:unity3d.com,2011:93 mapping", // RuntimeAnimatorController
"tag:unity3d.com,2011:94 mapping", // ShaderNameRegistry
"tag:unity3d.com,2011:95 mapping", // Animator
"tag:unity3d.com,2011:96 mapping", // TrailRenderer
"tag:unity3d.com,2011:98 mapping", // DelayedCallManager
"tag:unity3d.com,2011:102 mapping", // TextMesh
"tag:unity3d.com,2011:104 mapping", // RenderSettings
"tag:unity3d.com,2011:108 mapping", // Light
"tag:unity3d.com,2011:109 mapping", // ShaderInclude
"tag:unity3d.com,2011:110 mapping", // BaseAnimationTrack
"tag:unity3d.com,2011:111 mapping", // Animation
"tag:unity3d.com,2011:114 mapping", // MonoBehaviour
"tag:unity3d.com,2011:115 mapping", // MonoScript
"tag:unity3d.com,2011:116 mapping", // MonoManager
"tag:unity3d.com,2011:117 mapping", // Texture3D
"tag:unity3d.com,2011:118 mapping", // NewAnimationTrack
"tag:unity3d.com,2011:119 mapping", // Projector
"tag:unity3d.com,2011:120 mapping", // LineRenderer
"tag:unity3d.com,2011:121 mapping", // Flare
"tag:unity3d.com,2011:122 mapping", // Halo
"tag:unity3d.com,2011:123 mapping", // LensFlare
"tag:unity3d.com,2011:124 mapping", // FlareLayer
"tag:unity3d.com,2011:126 mapping", // NavMeshProjectSettings
"tag:unity3d.com,2011:128 mapping", // Font
"tag:unity3d.com,2011:129 mapping", // PlayerSettings
"tag:unity3d.com,2011:130 mapping", // NamedObject
"tag:unity3d.com,2011:134 mapping", // PhysicMaterial
"tag:unity3d.com,2011:135 mapping", // SphereCollider
"tag:unity3d.com,2011:136 mapping", // CapsuleCollider
"tag:unity3d.com,2011:137 mapping", // SkinnedMeshRenderer
"tag:unity3d.com,2011:138 mapping", // FixedJoint
"tag:unity3d.com,2011:141 mapping", // BuildSettings
"tag:unity3d.com,2011:142 mapping", // AssetBundle
"tag:unity3d.com,2011:143 mapping", // CharacterController
"tag:unity3d.com,2011:144 mapping", // CharacterJoint
"tag:unity3d.com,2011:145 mapping", // SpringJoint
"tag:unity3d.com,2011:146 mapping", // WheelCollider
"tag:unity3d.com,2011:147 mapping", // ResourceManager
"tag:unity3d.com,2011:150 mapping", // PreloadData
"tag:unity3d.com,2011:152 mapping", // MovieTexture
"tag:unity3d.com,2011:153 mapping", // ConfigurableJoint
"tag:unity3d.com,2011:154 mapping", // TerrainCollider
"tag:unity3d.com,2011:156 mapping", // TerrainData
"tag:unity3d.com,2011:157 mapping", // LightmapSettings
"tag:unity3d.com,2011:158 mapping", // WebCamTexture
"tag:unity3d.com,2011:159 mapping", // EditorSettings
"tag:unity3d.com,2011:162 mapping", // EditorUserSettings
"tag:unity3d.com,2011:164 mapping", // AudioReverbFilter
"tag:unity3d.com,2011:165 mapping", // AudioHighPassFilter
"tag:unity3d.com,2011:166 mapping", // AudioChorusFilter
"tag:unity3d.com,2011:167 mapping", // AudioReverbZone
"tag:unity3d.com,2011:168 mapping", // AudioEchoFilter
"tag:unity3d.com,2011:169 mapping", // AudioLowPassFilter
"tag:unity3d.com,2011:170 mapping", // AudioDistortionFilter
"tag:unity3d.com,2011:171 mapping", // SparseTexture
"tag:unity3d.com,2011:180 mapping", // AudioBehaviour
"tag:unity3d.com,2011:181 mapping", // AudioFilter
"tag:unity3d.com,2011:182 mapping", // WindZone
"tag:unity3d.com,2011:183 mapping", // Cloth
"tag:unity3d.com,2011:184 mapping", // SubstanceArchive
"tag:unity3d.com,2011:185 mapping", // ProceduralMaterial
"tag:unity3d.com,2011:186 mapping", // ProceduralTexture
"tag:unity3d.com,2011:187 mapping", // Texture2DArray
"tag:unity3d.com,2011:188 mapping", // CubemapArray
"tag:unity3d.com,2011:191 mapping", // OffMeshLink
"tag:unity3d.com,2011:192 mapping", // OcclusionArea
"tag:unity3d.com,2011:193 mapping", // Tree
"tag:unity3d.com,2011:195 mapping", // NavMeshAgent
"tag:unity3d.com,2011:196 mapping", // NavMeshSettings
"tag:unity3d.com,2011:198 mapping", // ParticleSystem
"tag:unity3d.com,2011:199 mapping", // ParticleSystemRenderer
"tag:unity3d.com,2011:200 mapping", // ShaderVariantCollection
"tag:unity3d.com,2011:205 mapping", // LODGroup
"tag:unity3d.com,2011:206 mapping", // BlendTree
"tag:unity3d.com,2011:207 mapping", // Motion
"tag:unity3d.com,2011:208 mapping", // NavMeshObstacle
"tag:unity3d.com,2011:210 mapping", // SortingGroup
"tag:unity3d.com,2011:212 mapping", // SpriteRenderer
"tag:unity3d.com,2011:213 mapping", // Sprite
"tag:unity3d.com,2011:214 mapping", // CachedSpriteAtlas
"tag:unity3d.com,2011:215 mapping", // ReflectionProbe
"tag:unity3d.com,2011:218 mapping", // Terrain
"tag:unity3d.com,2011:220 mapping", // LightProbeGroup
"tag:unity3d.com,2011:221 mapping", // AnimatorOverrideController
"tag:unity3d.com,2011:222 mapping", // CanvasRenderer
"tag:unity3d.com,2011:223 mapping", // Canvas
"tag:unity3d.com,2011:224 mapping", // RectTransform
"tag:unity3d.com,2011:225 mapping", // CanvasGroup
"tag:unity3d.com,2011:226 mapping", // BillboardAsset
"tag:unity3d.com,2011:227 mapping", // BillboardRenderer
"tag:unity3d.com,2011:228 mapping", // SpeedTreeWindAsset
"tag:unity3d.com,2011:229 mapping", // AnchoredJoint2D
"tag:unity3d.com,2011:230 mapping", // Joint2D
"tag:unity3d.com,2011:231 mapping", // SpringJoint2D
"tag:unity3d.com,2011:232 mapping", // DistanceJoint2D
"tag:unity3d.com,2011:233 mapping", // HingeJoint2D
"tag:unity3d.com,2011:234 mapping", // SliderJoint2D
"tag:unity3d.com,2011:235 mapping", // WheelJoint2D
"tag:unity3d.com,2011:236 mapping", // ClusterInputManager
"tag:unity3d.com,2011:237 mapping", // BaseVideoTexture
"tag:unity3d.com,2011:238 mapping", // NavMeshData
"tag:unity3d.com,2011:240 mapping", // AudioMixer
"tag:unity3d.com,2011:241 mapping", // AudioMixerController
"tag:unity3d.com,2011:243 mapping", // AudioMixerGroupController
"tag:unity3d.com,2011:244 mapping", // AudioMixerEffectController
"tag:unity3d.com,2011:245 mapping", // AudioMixerSnapshotController
"tag:unity3d.com,2011:246 mapping", // PhysicsUpdateBehaviour2D
"tag:unity3d.com,2011:247 mapping", // ConstantForce2D
"tag:unity3d.com,2011:248 mapping", // Effector2D
"tag:unity3d.com,2011:249 mapping", // AreaEffector2D
"tag:unity3d.com,2011:250 mapping", // PointEffector2D
"tag:unity3d.com,2011:251 mapping", // PlatformEffector2D
"tag:unity3d.com,2011:252 mapping", // SurfaceEffector2D
"tag:unity3d.com,2011:253 mapping", // BuoyancyEffector2D
"tag:unity3d.com,2011:254 mapping", // RelativeJoint2D
"tag:unity3d.com,2011:255 mapping", // FixedJoint2D
"tag:unity3d.com,2011:256 mapping", // FrictionJoint2D
"tag:unity3d.com,2011:257 mapping", // TargetJoint2D
"tag:unity3d.com,2011:258 mapping", // LightProbes
"tag:unity3d.com,2011:259 mapping", // LightProbeProxyVolume
"tag:unity3d.com,2011:271 mapping", // SampleClip
"tag:unity3d.com,2011:272 mapping", // AudioMixerSnapshot
"tag:unity3d.com,2011:273 mapping", // AudioMixerGroup
"tag:unity3d.com,2011:290 mapping", // AssetBundleManifest
"tag:unity3d.com,2011:300 mapping", // RuntimeInitializeOnLoadManager
"tag:unity3d.com,2011:310 mapping", // UnityConnectSettings
"tag:unity3d.com,2011:319 mapping", // AvatarMask
"tag:unity3d.com,2011:320 mapping", // PlayableDirector
"tag:unity3d.com,2011:328 mapping", // VideoPlayer
"tag:unity3d.com,2011:329 mapping", // VideoClip
"tag:unity3d.com,2011:330 mapping", // ParticleSystemForceField
"tag:unity3d.com,2011:331 mapping", // SpriteMask
"tag:unity3d.com,2011:363 mapping", // OcclusionCullingData
"tag:unity3d.com,2011:1001 mapping", // PrefabInstance
"tag:unity3d.com,2011:1002 mapping", // EditorExtensionImpl
"tag:unity3d.com,2011:1003 mapping", // AssetImporter
"tag:unity3d.com,2011:1005 mapping", // Mesh3DSImporter
"tag:unity3d.com,2011:1006 mapping", // TextureImporter
"tag:unity3d.com,2011:1007 mapping", // ShaderImporter
"tag:unity3d.com,2011:1008 mapping", // ComputeShaderImporter
"tag:unity3d.com,2011:1020 mapping", // AudioImporter
"tag:unity3d.com,2011:1026 mapping", // HierarchyState
"tag:unity3d.com,2011:1028 mapping", // AssetMetaData
"tag:unity3d.com,2011:1029 mapping", // DefaultAsset
"tag:unity3d.com,2011:1030 mapping", // DefaultImporter
"tag:unity3d.com,2011:1031 mapping", // TextScriptImporter
"tag:unity3d.com,2011:1032 mapping", // SceneAsset
"tag:unity3d.com,2011:1034 mapping", // NativeFormatImporter
"tag:unity3d.com,2011:1035 mapping", // MonoImporter
"tag:unity3d.com,2011:1038 mapping", // LibraryAssetImporter
"tag:unity3d.com,2011:1040 mapping", // ModelImporter
"tag:unity3d.com,2011:1041 mapping", // FBXImporter
"tag:unity3d.com,2011:1042 mapping", // TrueTypeFontImporter
"tag:unity3d.com,2011:1045 mapping", // EditorBuildSettings
"tag:unity3d.com,2011:1048 mapping", // InspectorExpandedState
"tag:unity3d.com,2011:1049 mapping", // AnnotationManager
"tag:unity3d.com,2011:1050 mapping", // PluginImporter
"tag:unity3d.com,2011:1051 mapping", // EditorUserBuildSettings
"tag:unity3d.com,2011:1055 mapping", // IHVImageFormatImporter
"tag:unity3d.com,2011:1101 mapping", // AnimatorStateTransition
"tag:unity3d.com,2011:1102 mapping", // AnimatorState
"tag:unity3d.com,2011:1105 mapping", // HumanTemplate
"tag:unity3d.com,2011:1107 mapping", // AnimatorStateMachine
"tag:unity3d.com,2011:1108 mapping", // PreviewAnimationClip
"tag:unity3d.com,2011:1109 mapping", // AnimatorTransition
"tag:unity3d.com,2011:1110 mapping", // SpeedTreeImporter
"tag:unity3d.com,2011:1111 mapping", // AnimatorTransitionBase
"tag:unity3d.com,2011:1112 mapping", // SubstanceImporter
"tag:unity3d.com,2011:1113 mapping", // LightmapParameters
"tag:unity3d.com,2011:1120 mapping", // LightingDataAsset
"tag:unity3d.com,2011:1124 mapping", // SketchUpImporter
"tag:unity3d.com,2011:1125 mapping", // BuildReport
"tag:unity3d.com,2011:1126 mapping", // PackedAssets
"tag:unity3d.com,2011:1127 mapping", // VideoClipImporter
"tag:unity3d.com,2011:100000 mapping", // int
"tag:unity3d.com,2011:100001 mapping", // bool
"tag:unity3d.com,2011:100002 mapping", // float
"tag:unity3d.com,2011:100003 mapping", // MonoObject
"tag:unity3d.com,2011:100004 mapping", // Collision
"tag:unity3d.com,2011:100005 mapping", // Vector3f
"tag:unity3d.com,2011:100006 mapping", // RootMotionData
"tag:unity3d.com,2011:100007 mapping", // Collision2D
"tag:unity3d.com,2011:100008 mapping", // AudioMixerLiveUpdateFloat
"tag:unity3d.com,2011:100009 mapping", // AudioMixerLiveUpdateBool
"tag:unity3d.com,2011:100010 mapping", // Polygon2D
"tag:unity3d.com,2011:100011 mapping", // void
"tag:unity3d.com,2011:19719996 mapping", // TilemapCollider2D
"tag:unity3d.com,2011:41386430 mapping", // ImportLog
"tag:unity3d.com,2011:55640938 mapping", // GraphicsStateCollection
"tag:unity3d.com,2011:73398921 mapping", // VFXRenderer
"tag:unity3d.com,2011:156049354 mapping", // Grid
"tag:unity3d.com,2011:156483287 mapping", // ScenesUsingAssets
"tag:unity3d.com,2011:171741748 mapping", // ArticulationBody
"tag:unity3d.com,2011:181963792 mapping", // Preset
"tag:unity3d.com,2011:285090594 mapping", // IConstraint
"tag:unity3d.com,2011:294290339 mapping", // AssemblyDefinitionReferenceImporter
"tag:unity3d.com,2011:355983997 mapping", // AudioResource
"tag:unity3d.com,2011:369655926 mapping", // AssetImportInProgressProxy
"tag:unity3d.com,2011:382020655 mapping", // PluginBuildInfo
"tag:unity3d.com,2011:387306366 mapping", // MemorySettings
"tag:unity3d.com,2011:403037116 mapping", // BuildMetaDataImporter
"tag:unity3d.com,2011:403037117 mapping", // BuildInstructionImporter
"tag:unity3d.com,2011:426301858 mapping", // EditorProjectAccess
"tag:unity3d.com,2011:468431735 mapping", // PrefabImporter
"tag:unity3d.com,2011:483693784 mapping", // TilemapRenderer
"tag:unity3d.com,2011:612988286 mapping", // SpriteAtlasAsset
"tag:unity3d.com,2011:638013454 mapping", // SpriteAtlasDatabase
"tag:unity3d.com,2011:641289076 mapping", // AudioBuildInfo
"tag:unity3d.com,2011:644342135 mapping", // CachedSpriteAtlasRuntimeData
"tag:unity3d.com,2011:655991488 mapping", // MultiplayerManager
"tag:unity3d.com,2011:662584278 mapping", // AssemblyDefinitionReferenceAsset
"tag:unity3d.com,2011:668709126 mapping", // BuiltAssetBundleInfoSet
"tag:unity3d.com,2011:687078895 mapping", // SpriteAtlas
"tag:unity3d.com,2011:747330370 mapping", // RayTracingShaderImporter
"tag:unity3d.com,2011:780535461 mapping", // BuildArchiveImporter
"tag:unity3d.com,2011:815301076 mapping", // PreviewImporter
"tag:unity3d.com,2011:825902497 mapping", // RayTracingShader
"tag:unity3d.com,2011:850595691 mapping", // LightingSettings
"tag:unity3d.com,2011:877146078 mapping", // PlatformModuleSetup
"tag:unity3d.com,2011:890905787 mapping", // VersionControlSettings
"tag:unity3d.com,2011:893571522 mapping", // CustomCollider2D
"tag:unity3d.com,2011:895512359 mapping", // AimConstraint
"tag:unity3d.com,2011:937362698 mapping", // VFXManager
"tag:unity3d.com,2011:947337230 mapping", // RoslynAnalyzerConfigAsset
"tag:unity3d.com,2011:954905827 mapping", // RuleSetFileAsset
"tag:unity3d.com,2011:994735392 mapping", // VisualEffectSubgraph
"tag:unity3d.com,2011:994735403 mapping", // VisualEffectSubgraphOperator
"tag:unity3d.com,2011:994735404 mapping", // VisualEffectSubgraphBlock
"tag:unity3d.com,2011:1001480554 mapping", // Prefab
"tag:unity3d.com,2011:1027052791 mapping", // LocalizationImporter
"tag:unity3d.com,2011:1114811875 mapping", // ReferencesArtifactGenerator
"tag:unity3d.com,2011:1152215463 mapping", // AssemblyDefinitionAsset
"tag:unity3d.com,2011:1154873562 mapping", // SceneVisibilityState
"tag:unity3d.com,2011:1183024399 mapping", // LookAtConstraint
"tag:unity3d.com,2011:1210832254 mapping", // SpriteAtlasImporter
"tag:unity3d.com,2011:1233149941 mapping", // AudioContainerElement
"tag:unity3d.com,2011:1268269756 mapping", // GameObjectRecorder
"tag:unity3d.com,2011:1307931743 mapping", // AudioRandomContainer
"tag:unity3d.com,2011:1325145578 mapping", // LightingDataAssetParent
"tag:unity3d.com,2011:1386491679 mapping", // PresetManager
"tag:unity3d.com,2011:1403656975 mapping", // StreamingManager
"tag:unity3d.com,2011:1480428607 mapping", // LowerResBlitTexture
"tag:unity3d.com,2011:1521398425 mapping", // VideoBuildInfo
"tag:unity3d.com,2011:1541671625 mapping", // C4DImporter
"tag:unity3d.com,2011:1542919678 mapping", // StreamingController
"tag:unity3d.com,2011:1557264870 mapping", // ShaderContainer
"tag:unity3d.com,2011:1597193336 mapping", // RoslynAdditionalFileAsset
"tag:unity3d.com,2011:1642787288 mapping", // RoslynAdditionalFileImporter
"tag:unity3d.com,2011:1652712579 mapping", // MultiplayerRolesData
"tag:unity3d.com,2011:1660057539 mapping", // SceneRoots
"tag:unity3d.com,2011:1731078267 mapping", // BrokenPrefabAsset
"tag:unity3d.com,2011:1736697216 mapping", // AndroidAssetPackImporter
"tag:unity3d.com,2011:1742807556 mapping", // GridLayout
"tag:unity3d.com,2011:1766753193 mapping", // AssemblyDefinitionImporter
"tag:unity3d.com,2011:1773428102 mapping", // ParentConstraint
"tag:unity3d.com,2011:1777034230 mapping", // RuleSetFileImporter
"tag:unity3d.com,2011:1818360608 mapping", // PositionConstraint
"tag:unity3d.com,2011:1818360609 mapping", // RotationConstraint
"tag:unity3d.com,2011:1818360610 mapping", // ScaleConstraint
"tag:unity3d.com,2011:1839735485 mapping", // Tilemap
"tag:unity3d.com,2011:1896753125 mapping", // PackageManifest
"tag:unity3d.com,2011:1896753126 mapping", // PackageManifestImporter
"tag:unity3d.com,2011:1903396204 mapping", // RoslynAnalyzerConfigImporter
"tag:unity3d.com,2011:1931382933 mapping", // UIRenderer
"tag:unity3d.com,2011:1953259897 mapping", // TerrainLayer
"tag:unity3d.com,2011:1971053207 mapping", // SpriteShapeRenderer
"tag:unity3d.com,2011:2058629509 mapping", // VisualEffectAsset
"tag:unity3d.com,2011:2058629510 mapping", // VisualEffectImporter
"tag:unity3d.com,2011:2058629511 mapping", // VisualEffectResource
"tag:unity3d.com,2011:2059678085 mapping", // VisualEffectObject
"tag:unity3d.com,2011:2083052967 mapping", // VisualEffect
"tag:unity3d.com,2011:2083778819 mapping", // LocalizationAsset
"tag:unity3d.com,2011:2089858483 mapping", // ScriptedImporter
"tag:unity3d.com,2011:2103361453 mapping", // ShaderIncludeImporter
]
}

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,72 @@
from math import pi
import bpy
from bpy.types import Context, Operator
def create_triplanar_setup(context: Context) -> None:
"""
Creates triplanar setup - a mesh cube with UVProject modifier and 6 UV projectors
:param context: Current context
:type context: bpy.types.Context
"""
bpy.ops.object.empty_add(type='CUBE', radius=1.6, location=(1.6, 1.6, 1.6), rotation=(0, 0, 0))
anchor_empty = context.active_object
anchor_empty.name = "UV_anchor"
bpy.ops.mesh.primitive_cube_add(radius=1, calc_uvs=True)
cube_obj = context.active_object
bpy.ops.object.modifier_add(type='UV_PROJECT')
uv_mod = cube_obj.modifiers["UVProject"]
rotations_list = [
("top", (0, 0, 0)),
("front", (pi/2, 0, 0)),
("back", (pi/2, 0, pi)),
("left", (pi/2, 0, pi/2)),
("right", (pi/2, 0, -pi/2)),
("bottom", (pi, 0, 0)),
]
uv_mod.projector_count = len(rotations_list)
for i, (name, rotation) in enumerate(rotations_list):
bpy.ops.object.empty_add(type='SINGLE_ARROW', radius=1.6, location=(0, 0, 0), rotation=rotation)
uv_projector = context.active_object
uv_projector.name = "UV_%s" % name
uv_projector.parent = anchor_empty
uv_mod.projectors[i].object = uv_projector
class MESH_OT_AddTriplanarSetup(Operator):
bl_idname = "mesh.setup_triplanar_add"
bl_label = "Triplanar UV Setup"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context: Context):
try:
create_triplanar_setup(context)
except Exception as e:
self.report({'ERROR'}, str(e))
return {'CANCELLED'}
return {'FINISHED'}
def draw_triplanar_setup(self, context):
self.layout.operator(MESH_OT_AddTriplanarSetup.bl_idname, icon='MOD_UVPROJECT')
def register():
bpy.utils.register_class(MESH_OT_AddTriplanarSetup)
if draw_triplanar_setup.__name__ not in [f.__name__ for f in bpy.types.INFO_MT_mesh_add._dyn_ui_initialize()]:
bpy.types.INFO_MT_mesh_add.append(draw_triplanar_setup)
def unregister():
bpy.types.INFO_MT_mesh_add.remove(draw_triplanar_setup)
bpy.utils.unregister_class(MESH_OT_AddTriplanarSetup)
register()

View File

@@ -0,0 +1,288 @@
import os
from datetime import datetime
import bpy
_FUTURE = bpy.app.version >= (2, 80, 0)
from bpy.props import BoolProperty, EnumProperty, IntProperty, StringProperty
from bpy.types import Context, Operator, Panel, Scene, UIList
if _FUTURE:
from bpy.types import Collection as Group
else:
from bpy.types import Group as Group
def message_box(message: str, title: str = "Message", icon: str = 'INFO') -> None:
"""Shows modal window with a message
:param message: Message text
:param title: Window title
:param icon: Window icon
"""
def draw(self, context):
col = self.layout.column(align=True)
for line in message.strip().split("\n"):
col.label(text=line)
bpy.context.window_manager.popup_menu(draw, title=title, icon=icon)
def name_as_path(name: str) -> str:
"""Converts and sanitizes an arbitrary string to a canonical path with OS-specific separator
:param name: Some name
:returns: Canonical path
"""
return os.path.join(*[bpy.path.clean_name(n) for n in name.replace("\\", "/").split("/") if n]) + ".fbx"
def fbx_export(context: Context) -> None:
"""
Export all objects Groups to ASCII FBX
"""
print("[%s] Batch FBX export begin" % datetime.now())
settings_ascii = dict(
# Common
version='ASCII6100',
axis_forward='-Z',
axis_up='Y',
global_scale=1.0,
object_types=context.scene.fbx_object_types,
use_selection=True,
# Mesh
mesh_smooth_type='FACE',
use_mesh_edges=False,
use_mesh_modifiers=context.scene.fbx_use_modifiers,
use_tspace=False,
# Armature
add_leaf_bones=False,
armature_nodetype='NULL',
primary_bone_axis='Y',
secondary_bone_axis='X',
use_armature_deform_only=True,
# Animation
use_anim=context.scene.fbx_use_anim,
use_default_take=False,
# File
batch_mode='OFF',
path_mode='RELATIVE',
)
settings_binary = dict(
# Common
version='BIN7400',
axis_forward='-Z',
axis_up='Y',
apply_scale_options='FBX_SCALE_ALL',
apply_unit_scale=True,
bake_space_transform=True,
global_scale=1.0,
object_types=context.scene.fbx_object_types,
use_custom_props=True,
use_selection=True,
# Mesh
mesh_smooth_type='FACE',
use_mesh_edges=False,
use_mesh_modifiers=context.scene.fbx_use_modifiers,
use_mesh_modifiers_render=True,
use_tspace=False,
# Armature
add_leaf_bones=False,
armature_nodetype='NULL',
primary_bone_axis='Y',
secondary_bone_axis='X',
use_armature_deform_only=True,
# Animation
bake_anim=context.scene.fbx_use_anim,
bake_anim_force_startend_keying=True,
bake_anim_simplify_factor=1.0,
bake_anim_step=1.0,
bake_anim_use_all_actions=True,
bake_anim_use_all_bones=True,
bake_anim_use_nla_strips=True,
# File
batch_mode='OFF',
embed_textures=False,
path_mode='RELATIVE',
)
settings = settings_binary if _FUTURE or context.scene.fbx_force_binary else settings_ascii
if _FUTURE:
settings.pop('version')
rootpath = os.path.normpath(bpy.path.abspath(context.scene.fbx_export_dir))
groups = bpy.data.collections if _FUTURE else bpy.data.groups
override = context.copy()
for group in [g for g in groups if g.fbx_exportable]:
filepath = os.path.join(rootpath, name_as_path(group.name))
basepath = os.path.dirname(filepath)
if not os.path.exists(basepath):
os.makedirs(basepath)
override.update(
{
"selected_objects": group.objects
}
)
settings.update(
{
"filepath": filepath
}
)
if bpy.app.version >= (4, 0, 0):
with context.temp_override(**override):
bpy.ops.export_scene.fbx(**settings)
else:
bpy.ops.export_scene.fbx(override, **settings)
print("\n[%s] Batch FBX export end." % datetime.now())
class FBX_OT_ManualExport(Operator):
bl_idname = "fbx.manual_export"
bl_label = "Manual Export"
bl_description = "Export FBX manualy"
def execute(self, context):
try:
fbx_export(context)
except Exception as e:
self.report({'ERROR'}, str(e))
return {'CANCELLED'}
return {'FINISHED'}
class FBX_UL_ExportItems(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
row = layout.row(align=True)
row.prop(item, "fbx_exportable", icon='CHECKBOX_HLT' if item.fbx_exportable else 'CHECKBOX_DEHLT', text="", emboss=False)
row.prop(item, "name", text="", emboss=False, icon='GROUP')
class SCENE_PT_fbx_autoexport(Panel):
"""Creates a Panel in the scene context of the properties editor"""
bl_label = "FBX Auto-Export"
bl_idname = "SCENE_PT_fbx_autoexport"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "scene"
def draw(self, context):
layout = self.layout
scene = context.scene
col = layout.column()
split = col.split()
sub = split.column()
sub.label(text="Filter groups:")
sub.template_list("FBX_UL_ExportItems", "", bpy.data, "collections" if _FUTURE else "groups", scene, "fbx_group_index", rows=5)
sub = split.column()
sub.label(text="Filter object types:")
sub.prop(scene, "fbx_object_types")
col.separator()
if _FUTURE:
col.use_property_split = True
col.use_property_decorate = False
col.prop(scene, "fbx_on_save")
col.prop(scene, "fbx_use_anim")
col.prop(scene, "fbx_use_modifiers")
if not _FUTURE:
col.prop(scene, "fbx_force_binary")
col.separator()
col.prop(scene, "fbx_export_dir")
col.operator(FBX_OT_ManualExport.bl_idname)
def on_save(*args, **kwargs) -> None:
"""
Runs when Blender file is being saved
"""
if not bpy.context.scene.fbx_on_save:
return
try:
fbx_export(bpy.context)
except Exception as e:
message_box(str(e), "Export error", 'ERROR')
classes = [
FBX_OT_ManualExport,
FBX_UL_ExportItems,
SCENE_PT_fbx_autoexport,
]
def register() -> None:
for cls in classes:
bpy.utils.register_class(cls)
Scene.fbx_export_dir = StringProperty(
name="FBX Export Dir",
description="FBX Export Directory",
subtype="DIR_PATH",
default="//../fbx/",
)
Scene.fbx_on_save = BoolProperty(
name="Export on save",
description="Export FBX on Blender file save",
default=False
)
Scene.fbx_object_types = EnumProperty(
name="Object Types",
options={'ENUM_FLAG'},
items=(
('EMPTY', "Empty", ""),
('CAMERA', "Camera", ""),
('LAMP', "Lamp", ""),
('ARMATURE', "Armature", "WARNING: not supported in dupli/group instances"),
('MESH', "Mesh", ""),
('OTHER', "Other", "Other geometry types, like curve, metaball, etc. (converted to meshes)"),
),
description="Which kind of object to export",
default={'ARMATURE', 'EMPTY', 'MESH', 'OTHER'},
)
Scene.fbx_group_index = IntProperty(default=0)
Scene.fbx_force_binary = BoolProperty(
name="Binary Format",
description="Force export FBX file as binary",
default=False
)
Scene.fbx_use_anim = BoolProperty(
name="Include Animation",
description="Export baked keyframe animation",
default=False
)
Scene.fbx_use_modifiers = BoolProperty(
name="Apply Modifiers",
description="Apply modifiers to mesh objects.\n** WARNING: Breaks exporting shape keys",
default=False,
)
Group.fbx_exportable = BoolProperty(
name="Export Group",
description="Mark group as FBX exportable",
default=False
)
bpy.app.handlers.save_pre.append(on_save)
def unregister() -> None:
bpy.app.handlers.save_pre.remove(on_save)
del Group.fbx_exportable
del Scene.fbx_use_modifiers
del Scene.fbx_use_anim
del Scene.fbx_force_binary
del Scene.fbx_group_index
del Scene.fbx_object_types
del Scene.fbx_on_save
del Scene.fbx_export_dir
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
register()

View File

@@ -0,0 +1,91 @@
import bpy
from bpy.props import FloatProperty
from bpy.types import Context, Operator, Panel
class ArmEditOperator:
@classmethod
def poll(cls, context: Context):
return (
context.active_object
and context.active_object.type == 'ARMATURE'
and context.active_bone
and context.mode == 'EDIT_ARMATURE'
)
class ARMATURE_OT_ReadBoneLength(ArmEditOperator, Operator):
"""Make length property equal to actual bone length"""
bl_idname = "armature.read_bone_length"
bl_label = "Read Bone Length"
bl_options = {'UNDO'}
def execute(self, context):
context.active_bone.bbone_y = context.active_bone.length
return {'FINISHED'}
class ARMATURE_OT_MakeBoneSquare(ArmEditOperator, Operator):
"""Make bone's width and depth equal to it's length"""
bl_idname = "armature.make_bone_square"
bl_label = "Make Bone Square"
bl_options = {'UNDO'}
def execute(self, context):
context.active_bone.bbone_x = context.active_bone.bbone_z = context.active_bone.length * 0.5
return {'FINISHED'}
class VIEW3D_PT_bone_size(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_label = "Bone Size"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context: Context):
scene = context.space_data
ob = context.active_object
return scene and ob and ob.type == 'ARMATURE' and ob.mode == 'EDIT'
def draw(self, context: Context):
layout = self.layout
col = layout.column()
col.prop(context.active_bone, "bbone_x", text="Bone Width")
col.prop(context.active_bone, "bbone_z", text="Bone Depth")
sub = col.row(align=True)
sub.operator(ARMATURE_OT_ReadBoneLength.bl_idname, icon="COPYDOWN", text="")
sub.prop(context.active_bone, "bbone_y", text="Bone Length")
col.operator(ARMATURE_OT_MakeBoneSquare.bl_idname, icon="MESH_PLANE")
def update_length(self, context) -> None:
context.active_bone.length = self.bbone_y
def register():
bpy.types.EditBone.bbone_y = FloatProperty(
name="B-Bone Display Y Length",
description="B-Bone Y size",
default=1.0,
min=0.0,
soft_min=0.001,
step=10,
precision=3,
options={'HIDDEN'},
update=update_length,
)
bpy.utils.register_class(ARMATURE_OT_ReadBoneLength)
bpy.utils.register_class(ARMATURE_OT_MakeBoneSquare)
bpy.utils.register_class(VIEW3D_PT_bone_size)
def unregister():
bpy.utils.unregister_class(VIEW3D_PT_bone_size)
bpy.utils.unregister_class(ARMATURE_OT_MakeBoneSquare)
bpy.utils.unregister_class(ARMATURE_OT_ReadBoneLength)
del bpy.types.EditBone.bbone_y
register()

View File

@@ -0,0 +1,113 @@
import math
import bpy
from bpy.props import EnumProperty, IntProperty
HU_TO_METERS_RATIO = 0.025 # 1hu = 2.5cm
GRID_SUBDIVISIONS = 8
class VIEW3D_OT_ResetGrid(bpy.types.Operator):
"""Reset grid settings to defaults"""
bl_idname = "screen.reset_grid"
bl_label = "Reset Grid"
bl_options = {'UNDO'}
def execute(self, context):
context.space_data.grid_lines = 16
context.space_data.grid_scale = 1.0
context.space_data.grid_subdivisions = 10
return {'FINISHED'}
class VIEW3D_PT_grid_level(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_label = "Grid Level"
def draw(self, context):
layout = self.layout
row = layout.row()
row.prop(context.scene, "grid_type", expand=True)
col = layout.column()
if context.scene.grid_type == 'HAMMER':
col.prop(context.scene, "grid_hu")
grid_size = pow(2, context.scene.grid_hu)
split = col.split(align=True)
col_l = split.column()
col_l.alignment = 'RIGHT'
col_l.label("Hammer Units:")
col_l.label("Meters:")
col_r = split.column()
col_r.label("%i hu" % grid_size)
col_r.label("%.3f m" % (grid_size * HU_TO_METERS_RATIO))
elif context.scene.grid_type == 'POWEROF2':
col.prop(context.scene, "grid_po2")
layout.operator(VIEW3D_OT_ResetGrid.bl_idname)
def update_grid_hu(self, context) -> None:
grid_size = pow(2, self.grid_hu)
context.space_data.grid_lines = max(3, math.ceil(1024 / grid_size))
context.space_data.grid_scale = grid_size * HU_TO_METERS_RATIO
context.space_data.grid_subdivisions = GRID_SUBDIVISIONS
def update_grid_po2(self, context) -> None:
context.space_data.grid_lines = max(3, pow(2, self.grid_po2 + 5))
context.space_data.grid_scale = 1 / pow(2, self.grid_po2)
context.space_data.grid_subdivisions = GRID_SUBDIVISIONS
def update_type(self, context) -> None:
if self.grid_type == 'HAMMER':
update_grid_hu(self, context)
elif self.grid_type == 'POWEROF2':
update_grid_po2(self, context)
def register():
bpy.types.Scene.grid_type = EnumProperty(
items=(
('HAMMER', "Hammer Units", "Main basic settings"),
('POWEROF2', "Power Of 2", "Armature-related settings"),
),
name="Grid type",
description="",
update=update_type,
)
bpy.types.Scene.grid_hu = IntProperty(
name="Grid level",
description="Hammer Units grid level",
min=0,
max=9,
default=6,
update=update_grid_hu,
)
bpy.types.Scene.grid_po2 = IntProperty(
name="Grid divisions",
description="Grid divisions in power of 2",
min=-4,
max=4,
default=0,
update=update_grid_po2,
)
bpy.utils.register_class(VIEW3D_OT_ResetGrid)
bpy.utils.register_class(VIEW3D_PT_grid_level)
def unregister():
bpy.utils.unregister_class(VIEW3D_PT_grid_level)
bpy.utils.register_class(VIEW3D_OT_ResetGrid)
del bpy.types.Scene.grid_po2
del bpy.types.Scene.grid_hu
del bpy.types.Scene.grid_type
register()

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,8 +1,5 @@
{
"dependencies": {
"com.vrchat.worlds": {
"version": "3.x"
},
"com.vrchat.core.vpm-resolver": {
"version": "0.1.x"
}

View File

@@ -13,8 +13,8 @@ AudioManager:
m_VirtualVoiceCount: 64
m_RealVoiceCount: 32
m_EnableOutputSuspension: 1
m_SpatializerPlugin: OculusSpatializer
m_AmbisonicDecoderPlugin: OculusSpatializer
m_SpatializerPlugin:
m_AmbisonicDecoderPlugin:
m_DisableAudio: 0
m_VirtualizeEffects: 1
m_RequestedDSPBufferSize: 0

File diff suppressed because it is too large Load Diff

View File

@@ -618,20 +618,7 @@ PlayerSettings:
webGLLinkerTarget: 1
webGLThreadsSupport: 0
webGLWasmStreaming: 0
scriptingDefineSymbols:
1: UNITY_POST_PROCESSING_STACK_V2;UDON;VRC_SDK_VRCSDK3;UDONSHARP
7: UNITY_POST_PROCESSING_STACK_V2
13: UNITY_POST_PROCESSING_STACK_V2
14: UNITY_POST_PROCESSING_STACK_V2
19: UNITY_POST_PROCESSING_STACK_V2
21: UNITY_POST_PROCESSING_STACK_V2
25: UNITY_POST_PROCESSING_STACK_V2
27: UNITY_POST_PROCESSING_STACK_V2
28: UNITY_POST_PROCESSING_STACK_V2
29: UNITY_POST_PROCESSING_STACK_V2
30: UNITY_POST_PROCESSING_STACK_V2
32: UNITY_POST_PROCESSING_STACK_V2
33: UNITY_POST_PROCESSING_STACK_V2
scriptingDefineSymbols: {}
platformArchitecture: {}
scriptingBackend: {}
il2cppCompilerConfiguration: {}

View File

@@ -1,11 +1,8 @@
# VRChat Unity project template
Omni-template for making VRChat content
## Synopsis
The template have:
- Unity Editor settings for work with Git
- Git settings for work with Unity Editor
- Git LFS attributes
@@ -17,8 +14,7 @@ The template have:
The repository have separate branches for separate content types, the only difference between them is default packages in `Packages/vpm-manifest.json`
> Branches structure
>
> ```text
> ```
> -master-+---------------------->
> |\
> | \-world-------------->
@@ -26,8 +22,7 @@ The repository have separate branches for separate content types, the only diffe
> \-avatar------------->
> ```
## How to use for a new project
## How to use
1. `git init` a new repo from the branch you want
2. Init Git LFS with `git lfs install`
3. Open the project in Unity
@@ -36,21 +31,10 @@ The repository have separate branches for separate content types, the only diffe
> After opening the project in Unity Editor you might want to add **all** new files to Git.
## How to work with existing project
1. Check that you have git-lfs installed `git lfs status`
2. Pull existing repo `git pull https://gitlab.com/ProcyonLotor/vrchat-template.git` and optionally pull all LFS objects `git lfs fetch --all`
(repo will take much more disk space, but will have complete project history)
3. (Optional) Some VPM packages might come from Community Repositories,
add them from project's [vpm-repositories.txt](./vpm-repositories.txt) file to CreatorCompanion,
or run this command in project's folder `FOR /F %L IN (.\vpm-repositories.txt) DO vpm add repo %L`
(command requires `vpm` tool installed, see [vpm cli](https://vcc.docs.vrchat.com/vpm/cli/))
> **IMPORTANT**: When opening a previously worked on project on a new machine, Unity may warn you about script errors and suggest you enter Safe Mode,
> this is because VPM has not loaded yet and didn't resolved the required packages, ignore the errors and continue loading.
> Sometimes you may need to reopen the project couple times for all packages to resolve and scripts to recompile.
## License
For project's license see [LICENSE](./LICENSE) file.
Project contains `com.vrchat.core.bootstrap` package, for license see [Packages/com.vrchat.core.bootstrap/License.md](./Packages/com.vrchat.core.bootstrap/License.md) file.

View File

@@ -1,6 +0,0 @@
https://adjerry91.github.io/VRCFaceTracking-Templates/index.json
https://poiyomi.github.io/vpm/index.json
https://redsim.github.io/vpmlisting/index.json
https://spokeek.github.io/goloco/index.json
https://vcc.vrcfury.com/
https://wholesomevr.github.io/SPS-Configurator/index.json