Add VRChat and GitHub packages to Unity project
This commit is contained in:
1 parent
0334a52b21
commit
85538aaccc
3297 files changed
+847877
No files matched your search
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 215743739eb47bc49aa96d2d2b0a973c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 820ee6e459999be418b410c7af108bc3
|
||||
timeCreated: 1480638870
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 1
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
platformData:
|
||||
Any:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
Editor:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
WindowsStoreApps:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aecaffc7454b52e448fc0ea1aef2dd1d
|
||||
timeCreated: 1480638874
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 1
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
platformData:
|
||||
Any:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
Editor:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
WindowsStoreApps:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4055bfc0cd67d642a7eceaf547c4901
|
||||
timeCreated: 1480638876
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 1
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
platformData:
|
||||
Any:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
Editor:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
WindowsStoreApps:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 625a50dd0dd525a49a41cb3e3117fa15
|
||||
timeCreated: 1480638869
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 1
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
platformData:
|
||||
Any:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
Editor:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
WindowsStoreApps:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e24a67bafd41754a9cbd31b4c453a42
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,133 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 34b0990e1522a284b9666d6821cd601c
|
||||
timeCreated: 1499845244
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
'': Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux: 0
|
||||
Exclude Linux64: 0
|
||||
Exclude LinuxUniversal: 0
|
||||
Exclude OSXIntel: 0
|
||||
Exclude OSXIntel64: 0
|
||||
Exclude OSXUniversal: 0
|
||||
Exclude Win: 0
|
||||
Exclude Win64: 0
|
||||
data:
|
||||
first:
|
||||
'': Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
OS: AnyOS
|
||||
data:
|
||||
first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: ARMv7
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
Facebook: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Facebook: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
data:
|
||||
first:
|
||||
Standalone: LinuxUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f6f883e58fe93864da54199db225b49c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94f62312431755e49a722968ff64fbbc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,114 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b609c54f9d3581e4fa22b3e389fd8d33
|
||||
timeCreated: 1499820240
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
'': Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux: 0
|
||||
Exclude Linux64: 0
|
||||
Exclude LinuxUniversal: 0
|
||||
Exclude OSXIntel: 0
|
||||
Exclude OSXIntel64: 0
|
||||
Exclude OSXUniversal: 0
|
||||
Exclude Win: 0
|
||||
Exclude Win64: 0
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
Facebook: Win
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Facebook: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: LinuxUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86
|
||||
data:
|
||||
first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 12b2d30e2a2124147960fa246a010d63
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,114 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 54f59547b5261e64f8256d6daaa01b17
|
||||
timeCreated: 1499820211
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
'': Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 0
|
||||
Exclude Linux: 0
|
||||
Exclude Linux64: 0
|
||||
Exclude LinuxUniversal: 0
|
||||
Exclude OSXIntel: 0
|
||||
Exclude OSXIntel64: 0
|
||||
Exclude OSXUniversal: 0
|
||||
Exclude Win: 0
|
||||
Exclude Win64: 0
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
Facebook: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Facebook: Win64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
data:
|
||||
first:
|
||||
Standalone: LinuxUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXIntel64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
data:
|
||||
first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: x86_64
|
||||
data:
|
||||
first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: None
|
||||
data:
|
||||
first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8de995c245cee44e828a5bc98a3cb72
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db74213609a3d444c8bc111a3e373878
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9787e75870c1dc347a0943055c585c64
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c30a499f804ba2e4281452f42b3ce52d
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9b6143470b1a740428cde7079e2c7555
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b3b4a8bdfbaf344686d420abd25de73
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 510e56bcc26707a49a3d68705c2e68c2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 25fa1742a0cbd8141b952c76ad5431e6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd6f01d423eff8a4a8f9de71e21f0b4a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,101 @@
|
||||
/************************************************************************************
|
||||
Filename : ONSPAudioSourceEditor.cs
|
||||
Content : This script adds editor functionality to OculusSpatializerUserParams script.
|
||||
Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
|
||||
|
||||
Licensed under the Oculus SDK Version 3.5 (the "License");
|
||||
you may not use the Oculus SDK except in compliance with the License,
|
||||
which is provided at the time of installation or download, or which
|
||||
otherwise accompanies this software in either electronic or hard copy form.
|
||||
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://developer.oculus.com/licenses/sdk-3.5/
|
||||
|
||||
Unless required by applicable law or agreed to in writing, the Oculus SDK
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
************************************************************************************/
|
||||
#define CUSTOM_LAYOUT
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
[CustomEditor(typeof(ONSPAudioSource))]
|
||||
|
||||
public class OculusSpatializerUserParamsEditor : Editor
|
||||
{
|
||||
// target component
|
||||
private ONSPAudioSource m_Component;
|
||||
|
||||
// OnEnable
|
||||
void OnEnable()
|
||||
{
|
||||
m_Component = (ONSPAudioSource)target;
|
||||
}
|
||||
|
||||
// OnInspectorGUI
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
GUI.color = Color.white;
|
||||
Undo.RecordObject(m_Component, "OculusSpatializerUserParams");
|
||||
|
||||
{
|
||||
EditorGUILayout.HelpBox("Please use a VRC_SpatialAudioSource in the future.", MessageType.Error);
|
||||
#if CUSTOM_LAYOUT
|
||||
m_Component.EnableSpatialization = EditorGUILayout.Toggle("Spatialization Enabled", m_Component.EnableSpatialization);
|
||||
m_Component.EnableRfl = EditorGUILayout.Toggle("Reflections Enabled", m_Component.EnableRfl);
|
||||
m_Component.Gain = EditorGUILayout.FloatField("Gain", m_Component.Gain);
|
||||
|
||||
Separator();
|
||||
|
||||
Label ("OCULUS ATTENUATION");
|
||||
m_Component.UseInvSqr = EditorGUILayout.Toggle("Enabled", m_Component.UseInvSqr);
|
||||
Label ("");
|
||||
Label("RANGE (0.0 - 1000000.0 meters)");
|
||||
m_Component.Near = EditorGUILayout.FloatField("Minimum", m_Component.Near);
|
||||
m_Component.Far = EditorGUILayout.FloatField("Maximum", m_Component.Far);
|
||||
|
||||
Label("");
|
||||
Label("VOLUMETRIC RADIUS (0.0 - 1000.0 meters)");
|
||||
m_Component.VolumetricRadius = EditorGUILayout.FloatField("Radius", m_Component.VolumetricRadius);
|
||||
|
||||
Separator();
|
||||
|
||||
Label("REVERB SEND LEVEL (-60.0 - 20.0 decibels)");
|
||||
m_Component.ReverbSend = EditorGUILayout.FloatField(" ", m_Component.ReverbSend);
|
||||
|
||||
Separator();
|
||||
|
||||
#else
|
||||
DrawDefaultInspector ();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
EditorUtility.SetDirty(m_Component);
|
||||
}
|
||||
}
|
||||
|
||||
// Utilities, move out of here (or copy over to other editor script)
|
||||
|
||||
// Separator
|
||||
void Separator()
|
||||
{
|
||||
GUI.color = new Color(1, 1, 1, 0.25f);
|
||||
GUILayout.Box("", "HorizontalSlider", GUILayout.Height(16));
|
||||
GUI.color = Color.white;
|
||||
}
|
||||
|
||||
// Label
|
||||
void Label(string label)
|
||||
{
|
||||
EditorGUILayout.LabelField (label);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb850b86de9091d4db4595959c56f954
|
||||
timeCreated: 1442269815
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 344ab2b0b5177bc439a0e069b42277a7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,406 @@
|
||||
/************************************************************************************
|
||||
Filename : ONSPAudioSource.cs
|
||||
Content : Interface into the Oculus Native Spatializer Plugin
|
||||
Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
|
||||
|
||||
Licensed under the Oculus SDK Version 3.5 (the "License");
|
||||
you may not use the Oculus SDK except in compliance with the License,
|
||||
which is provided at the time of installation or download, or which
|
||||
otherwise accompanies this software in either electronic or hard copy form.
|
||||
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://developer.oculus.com/licenses/sdk-3.5/
|
||||
|
||||
Unless required by applicable law or agreed to in writing, the Oculus SDK
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
************************************************************************************/
|
||||
|
||||
// Uncomment below to test access of read-only spatializer parameters
|
||||
//#define TEST_READONLY_PARAMETERS
|
||||
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public class ONSPAudioSource : MonoBehaviour
|
||||
{
|
||||
#if TEST_READONLY_PARAMETERS
|
||||
// Spatializer read-only system parameters (global)
|
||||
static int readOnly_GlobalRelectionOn = 8;
|
||||
static int readOnly_NumberOfUsedSpatializedVoices = 9;
|
||||
#endif
|
||||
|
||||
#if VRC_CLIENT
|
||||
// don't include in SDK, not compatible with Unity's version of spatializer
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
|
||||
static void OnBeforeSceneLoadRuntimeMethod()
|
||||
{
|
||||
OSP_SetGlobalVoiceLimit(ONSPSettings.Instance.voiceLimit);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Import functions
|
||||
public const string strONSPS = "AudioPluginOculusSpatializer";
|
||||
|
||||
[DllImport(strONSPS)]
|
||||
private static extern void ONSP_GetGlobalRoomReflectionValues(ref bool reflOn, ref bool reverbOn,
|
||||
ref float width, ref float height, ref float length);
|
||||
|
||||
// Public
|
||||
|
||||
[SerializeField]
|
||||
private bool enableSpatialization = true;
|
||||
public bool EnableSpatialization
|
||||
{
|
||||
get
|
||||
{
|
||||
return enableSpatialization;
|
||||
}
|
||||
set
|
||||
{
|
||||
enableSpatialization = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private float gain = 0.0f;
|
||||
public float Gain
|
||||
{
|
||||
get
|
||||
{
|
||||
return gain;
|
||||
}
|
||||
set
|
||||
{
|
||||
gain = Mathf.Clamp(value, 0.0f, 24.0f);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private bool useInvSqr = false;
|
||||
public bool UseInvSqr
|
||||
{
|
||||
get
|
||||
{
|
||||
return useInvSqr;
|
||||
}
|
||||
set
|
||||
{
|
||||
useInvSqr = value;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private float near = 0.25f;
|
||||
public float Near
|
||||
{
|
||||
get
|
||||
{
|
||||
return near;
|
||||
}
|
||||
set
|
||||
{
|
||||
near = Mathf.Clamp(value, 0.0f, 1000000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private float far = 250.0f;
|
||||
public float Far
|
||||
{
|
||||
get
|
||||
{
|
||||
return far;
|
||||
}
|
||||
set
|
||||
{
|
||||
far = Mathf.Clamp(value, 0.0f, 1000000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private float volumetricRadius = 0.0f;
|
||||
public float VolumetricRadius
|
||||
{
|
||||
get
|
||||
{
|
||||
return volumetricRadius;
|
||||
}
|
||||
set
|
||||
{
|
||||
volumetricRadius = Mathf.Clamp(value, 0.0f, 1000.0f);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private float reverbSend = 0.0f;
|
||||
public float ReverbSend
|
||||
{
|
||||
get
|
||||
{
|
||||
return reverbSend;
|
||||
}
|
||||
set
|
||||
{
|
||||
reverbSend = Mathf.Clamp(value, -60.0f, 20.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[SerializeField]
|
||||
private bool enableRfl = false;
|
||||
public bool EnableRfl
|
||||
{
|
||||
get
|
||||
{
|
||||
return enableRfl;
|
||||
}
|
||||
set
|
||||
{
|
||||
enableRfl = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// VRCHAT: We need to reset the params after avatar loading and viseme setup
|
||||
public void Reset()
|
||||
{
|
||||
var source = GetComponent<AudioSource>();
|
||||
|
||||
if(source == null)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
SetParameters(ref source);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Awake this instance.
|
||||
/// </summary>
|
||||
void Awake()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start this instance.
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
#if VRC_CLIENT
|
||||
var source = GetComponent<AudioSource>();
|
||||
|
||||
if(source != null && source.outputAudioMixerGroup != VRCAudioManager.GetAvatarGroup())
|
||||
VRCAudioManager.ApplyGameAudioMixerSettings(source);
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update this instance.
|
||||
/// </summary>
|
||||
void LateUpdate()
|
||||
{
|
||||
// We might iterate through multiple sources / game object
|
||||
var source = GetComponent<AudioSource>();
|
||||
|
||||
if(source == null)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// READ-ONLY PARAMETER TEST
|
||||
#if TEST_READONLY_PARAMETERS
|
||||
float rfl_enabled = 0.0f;
|
||||
source.GetSpatializerFloat(readOnly_GlobalRelectionOn, out rfl_enabled);
|
||||
float num_voices = 0.0f;
|
||||
source.GetSpatializerFloat(readOnly_NumberOfUsedSpatializedVoices, out num_voices);
|
||||
|
||||
String readOnly = System.String.Format
|
||||
("Read only values: refl enabled: {0:F0} num voices: {1:F0}", rfl_enabled, num_voices);
|
||||
Debug.Log(readOnly);
|
||||
#endif
|
||||
|
||||
// Check to see if we should disable spatializion
|
||||
if ((Application.isPlaying == false) ||
|
||||
(AudioListener.pause == true) ||
|
||||
(source.isPlaying == false) ||
|
||||
(source.isActiveAndEnabled == false)
|
||||
)
|
||||
{
|
||||
source.spatialize = false;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetParameters(ref source);
|
||||
}
|
||||
}
|
||||
|
||||
enum Parameters : int
|
||||
{
|
||||
P_GAIN = 0,
|
||||
P_USEINVSQR,
|
||||
P_NEAR,
|
||||
P_FAR,
|
||||
P_RADIUS,
|
||||
P_DISABLE_RFL,
|
||||
P_VSPEAKERMODE,
|
||||
P_AMBISTAT,
|
||||
P_READONLY_GLOBAL_RFL_ENABLED, // READ-ONLY
|
||||
P_READONLY_NUM_VOICES, // READ-ONLY
|
||||
P_SENDLEVEL,
|
||||
P_NUM
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Sets the parameters.
|
||||
/// </summary>
|
||||
/// <param name="source">Source.</param>
|
||||
public void SetParameters(ref AudioSource source)
|
||||
{
|
||||
// VRCHAT: indentation is weird intentionally, for easier diff
|
||||
// VRC jnuccio: added try here to catch unknown exception reported in analytics
|
||||
try
|
||||
{
|
||||
if (source == null)
|
||||
return;
|
||||
|
||||
// See if we should enable spatialization
|
||||
source.spatialize = enableSpatialization;
|
||||
|
||||
source.SetSpatializerFloat((int)Parameters.P_GAIN, gain);
|
||||
// All inputs are floats; convert bool to 0.0 and 1.0
|
||||
if(useInvSqr == true)
|
||||
source.SetSpatializerFloat((int)Parameters.P_USEINVSQR, 1.0f);
|
||||
else
|
||||
source.SetSpatializerFloat((int)Parameters.P_USEINVSQR, 0.0f);
|
||||
|
||||
source.SetSpatializerFloat((int)Parameters.P_NEAR, near);
|
||||
source.SetSpatializerFloat((int)Parameters.P_FAR, far);
|
||||
|
||||
source.SetSpatializerFloat((int)Parameters.P_RADIUS, volumetricRadius);
|
||||
|
||||
if(enableRfl == true)
|
||||
source.SetSpatializerFloat((int)Parameters.P_DISABLE_RFL, 0.0f);
|
||||
else
|
||||
source.SetSpatializerFloat((int)Parameters.P_DISABLE_RFL, 1.0f);
|
||||
|
||||
source.SetSpatializerFloat((int)Parameters.P_SENDLEVEL, reverbSend);
|
||||
|
||||
// VRCHAT: indentation is weird intentionally, for easier diff
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// not sure why this throws sometimes
|
||||
}
|
||||
}
|
||||
|
||||
private static ONSPAudioSource RoomReflectionGizmoAS = null;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
void OnDrawGizmos()
|
||||
{
|
||||
// Are we the first one created? make sure to set our static ONSPAudioSource
|
||||
// for drawing out room parameters once
|
||||
if(RoomReflectionGizmoAS == null)
|
||||
{
|
||||
RoomReflectionGizmoAS = this;
|
||||
}
|
||||
|
||||
Color c;
|
||||
const float colorSolidAlpha = 0.1f;
|
||||
|
||||
// Draw the near/far spheres
|
||||
|
||||
// Near (orange)
|
||||
c.r = 1.0f;
|
||||
c.g = 0.5f;
|
||||
c.b = 0.0f;
|
||||
c.a = 1.0f;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawWireSphere(transform.position, Near);
|
||||
c.a = colorSolidAlpha;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawSphere(transform.position, Near);
|
||||
|
||||
// Far (red)
|
||||
c.r = 1.0f;
|
||||
c.g = 0.0f;
|
||||
c.b = 0.0f;
|
||||
c.a = 1.0f;
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawWireSphere(transform.position, Far);
|
||||
c.a = colorSolidAlpha;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawSphere(transform.position, Far);
|
||||
|
||||
// VolumetricRadius (purple)
|
||||
c.r = 1.0f;
|
||||
c.g = 0.0f;
|
||||
c.b = 1.0f;
|
||||
c.a = 1.0f;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawWireSphere(transform.position, VolumetricRadius);
|
||||
c.a = colorSolidAlpha;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawSphere(transform.position, VolumetricRadius);
|
||||
|
||||
// Draw room parameters ONCE only, provided reflection engine is on
|
||||
if (RoomReflectionGizmoAS == this)
|
||||
{
|
||||
// Get global room parameters (write new C api to get reflection values)
|
||||
bool reflOn = false;
|
||||
bool reverbOn = false;
|
||||
float width = 1.0f;
|
||||
float height = 1.0f;
|
||||
float length = 1.0f;
|
||||
|
||||
ONSP_GetGlobalRoomReflectionValues(ref reflOn, ref reverbOn, ref width, ref height, ref length);
|
||||
|
||||
// TO DO: Get the room reflection values and render those out as well (like we do in the VST)
|
||||
|
||||
if((Camera.main != null) && (reflOn == true))
|
||||
{
|
||||
// Set color of cube (cyan is early reflections only, white is with reverb on)
|
||||
if(reverbOn == true)
|
||||
c = Color.white;
|
||||
else
|
||||
c = Color.cyan;
|
||||
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawWireCube(Camera.main.transform.position, new Vector3(width, height, length));
|
||||
c.a = colorSolidAlpha;
|
||||
Gizmos.color = c;
|
||||
Gizmos.DrawCube(Camera.main.transform.position, new Vector3(width, height, length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
void OnDestroy()
|
||||
{
|
||||
// We will null out single pointer instance
|
||||
// of the room reflection gizmo since we are being destroyed.
|
||||
// Any ONSPAS that is alive or born will re-set this pointer
|
||||
// so that we only draw it once
|
||||
if(RoomReflectionGizmoAS == this)
|
||||
{
|
||||
RoomReflectionGizmoAS = null;
|
||||
}
|
||||
}
|
||||
|
||||
[System.Runtime.InteropServices.DllImport("AudioPluginOculusSpatializer")]
|
||||
private static extern int OSP_SetGlobalVoiceLimit(int VoiceLimit);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e503ea6418d27594caa33b93cac1b06a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 1
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,55 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[UnityEditor.InitializeOnLoad]
|
||||
#endif
|
||||
public sealed class ONSPSettings : ScriptableObject
|
||||
{
|
||||
[SerializeField]
|
||||
public int voiceLimit = 16; // very conservative fallback
|
||||
|
||||
private static ONSPSettings instance;
|
||||
public static ONSPSettings Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
instance = Resources.Load<ONSPSettings>("ONSPSettings-Android");
|
||||
#else
|
||||
instance = Resources.Load<ONSPSettings>("ONSPSettings");
|
||||
#endif
|
||||
|
||||
// This can happen if the developer never input their App Id into the Unity Editor
|
||||
// and therefore never created the OculusPlatformSettings.asset file
|
||||
// Use a dummy object with defaults for the getters so we don't have a null pointer exception
|
||||
if (instance == null)
|
||||
{
|
||||
instance = ScriptableObject.CreateInstance<ONSPSettings>();
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// Only in the editor should we save it to disk
|
||||
string properPath = System.IO.Path.Combine(UnityEngine.Application.dataPath, "Resources");
|
||||
if (!System.IO.Directory.Exists(properPath))
|
||||
{
|
||||
UnityEditor.AssetDatabase.CreateFolder("Assets", "Resources");
|
||||
}
|
||||
|
||||
string fullPath = System.IO.Path.Combine(
|
||||
System.IO.Path.Combine("Assets", "Resources"),
|
||||
#if UNITY_ANDROID
|
||||
"ONSPSettings-Android.asset");
|
||||
#else
|
||||
"ONSPSettings.asset");
|
||||
#endif
|
||||
UnityEditor.AssetDatabase.CreateAsset(instance, fullPath);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ad074644ff568a14187a3690cfbd7534
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6c2d16ee71d54d4bbc874324e040871
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a8cc42eaba7a2a41b6ca3be3c40b315
|
||||
timeCreated: 1500596155
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f279d1f8e322b8341bc7ae981fc9596b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 30c2a98e4c5e4f2428f8abfa92e718e9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 02cde43b860294140a44ee8e3f228987
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,127 @@
|
||||
//
|
||||
// Copyright 2014-2015 Amazon.com,
|
||||
// Inc. or its affiliates. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the AWS Mobile SDK For Unity
|
||||
// Sample Application License Agreement (the "License").
|
||||
// You may not use this file except in compliance with the
|
||||
// License. A copy of the License is located
|
||||
// in the "license" file accompanying this file. This file is
|
||||
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
// CONDITIONS OF ANY KIND, express or implied. See the License
|
||||
// for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using UnityEngine.UI;
|
||||
using Amazon.S3;
|
||||
using Amazon.S3.Model;
|
||||
using Amazon.Runtime;
|
||||
using System.IO;
|
||||
using System;
|
||||
using Amazon.S3.Util;
|
||||
using System.Collections.Generic;
|
||||
using Amazon.CognitoIdentity;
|
||||
using Amazon;
|
||||
|
||||
public class S3Manager : MonoBehaviour
|
||||
{
|
||||
public string IdentityPoolId = "us-east-1:066cd25b-b249-4394-a267-7a49247aa8f9"; // vrchat identity pool id
|
||||
public string CognitoIdentityRegion = RegionEndpoint.USEast1.SystemName;
|
||||
private RegionEndpoint _CognitoIdentityRegion
|
||||
{
|
||||
get { return RegionEndpoint.GetBySystemName(CognitoIdentityRegion); }
|
||||
}
|
||||
public string S3Region = RegionEndpoint.USEast1.SystemName;
|
||||
private RegionEndpoint _S3Region
|
||||
{
|
||||
get { return RegionEndpoint.GetBySystemName(S3Region); }
|
||||
}
|
||||
public string S3BucketName = "vrc-uploads"; // vrchat
|
||||
|
||||
|
||||
private IAmazonS3 _s3Client;
|
||||
private AWSCredentials _credentials;
|
||||
|
||||
private AWSCredentials Credentials
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_credentials == null)
|
||||
_credentials = new CognitoAWSCredentials(IdentityPoolId, _CognitoIdentityRegion);
|
||||
return _credentials;
|
||||
}
|
||||
}
|
||||
|
||||
private IAmazonS3 Client
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_s3Client == null)
|
||||
{
|
||||
_s3Client = new AmazonS3Client(Credentials, _S3Region);
|
||||
}
|
||||
//test comment
|
||||
return _s3Client;
|
||||
}
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
UnityInitializer.AttachToGameObject(this.gameObject);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Post Object to S3 Bucket.
|
||||
/// </summary>
|
||||
public PostObjectRequest PostObject(string filePath, string s3FolderName, Action<string> onSuccess = null)
|
||||
{
|
||||
string fileName = s3FolderName + "/" + System.IO.Path.GetFileName(filePath);
|
||||
VRC.Core.Logger.Log ("uploading " + fileName, VRC.Core.DebugLevel.All);
|
||||
|
||||
AWSConfigs.LoggingConfig.LogTo = LoggingOptions.None;
|
||||
|
||||
var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
|
||||
VRC.Core.Logger.Log ("Creating request object", VRC.Core.DebugLevel.All);
|
||||
|
||||
var request = new PostObjectRequest()
|
||||
{
|
||||
Bucket = S3BucketName,
|
||||
Key = fileName,
|
||||
InputStream = stream,
|
||||
CannedACL = S3CannedACL.Private
|
||||
};
|
||||
|
||||
VRC.Core.Logger.Log ("Making HTTP post call", VRC.Core.DebugLevel.All);
|
||||
|
||||
StartCoroutine(PostObjectRoutine(request, onSuccess));
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
IEnumerator PostObjectRoutine(PostObjectRequest request, Action<string> onSuccess)
|
||||
{
|
||||
// make sure UnityInitializer call has time to initialize
|
||||
yield return null;
|
||||
yield return null;
|
||||
|
||||
Client.PostObjectAsync(request, (responseObj) =>
|
||||
{
|
||||
if (responseObj.Exception == null)
|
||||
{
|
||||
VRC.Core.Logger.Log("object " + responseObj.Request.Key + " posted to bucket " + responseObj.Request.Bucket, VRC.Core.DebugLevel.All);
|
||||
string s3Url = string.Format("https://s3-us-west-2.amazonaws.com/{0}/{1}", responseObj.Request.Bucket, responseObj.Request.Key);
|
||||
if(onSuccess != null)
|
||||
onSuccess(s3Url);
|
||||
}
|
||||
else
|
||||
{
|
||||
VRC.Core.Logger.Log ("Exception while posting the result object");
|
||||
VRC.Core.Logger.Log("receieved error " + responseObj.Response.HttpStatusCode.ToString());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d6a1d7b0624f414ba6fb922687a06da
|
||||
timeCreated: 1480975716
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 059f8224659cefb4fa29c1c01d87a653
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: daf80f83bd8638d4886542fc3230e9f6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
#if VRC_SDK_PIPELINE_SAMPLES
|
||||
|
||||
using UnityEditor;
|
||||
|
||||
namespace VRC.SDKBase.Editor.BuildPipeline.Samples
|
||||
{
|
||||
public class VRCSDKBuildRequestedCallbackSample : IVRCSDKBuildRequestedCallback
|
||||
{
|
||||
public int callbackOrder => 0;
|
||||
|
||||
public bool OnBuildRequested(VRCSDKRequestedBuildType requestedBuildType)
|
||||
{
|
||||
return EditorUtility.DisplayDialog("Build Confirmation", "Are you sure you want to build?", "Yes", "Not Yes");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a1d20f4241085e46bdddc71b691465b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "VRC.SDKBase.Editor.BuildPipeline",
|
||||
"references": [],
|
||||
"optionalUnityReferences": [],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": []
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21332e1f0d937794d916d2402ba1943a
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 095dab1d766b9f74ea16555fc915be80
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,19 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using VRC.Core;
|
||||
|
||||
[CustomEditor(typeof(ApiCache))]
|
||||
public class ApiCacheEditor : Editor {
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
foreach (System.Type type in ApiCache.cache.Keys)
|
||||
{
|
||||
Dictionary<string, ApiCache.CacheEntry> typeCache = ApiCache.cache[type];
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.PrefixLabel(type.Name);
|
||||
EditorGUILayout.LabelField(typeCache.Count.ToString());
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39cdf3092ab81be4b9e623cb5a8819d8
|
||||
timeCreated: 1509575680
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,218 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using UnityEditor;
|
||||
using VRC.SDKBase;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public class AutoAddSpatialAudioComponents
|
||||
{
|
||||
|
||||
public static bool Enabled = true;
|
||||
|
||||
static AutoAddSpatialAudioComponents()
|
||||
{
|
||||
EditorApplication.hierarchyChanged += OnHierarchyWindowChanged;
|
||||
EditorApplication.projectChanged += OnProjectWindowChanged;
|
||||
RegisterCallbacks();
|
||||
}
|
||||
|
||||
static void OnHierarchyWindowChanged()
|
||||
{
|
||||
if (!Enabled)
|
||||
{
|
||||
EditorApplication.hierarchyChanged -= OnHierarchyWindowChanged;
|
||||
return;
|
||||
}
|
||||
|
||||
// check for proper use of VRCSP, and warn
|
||||
//TryToAddSpatializationToAllAudioSources(true, false);
|
||||
}
|
||||
|
||||
static void OnProjectWindowChanged()
|
||||
{
|
||||
RegisterCallbacks();
|
||||
}
|
||||
|
||||
static void RegisterCallbacks()
|
||||
{
|
||||
VRCSdkControlPanel._EnableSpatialization = VRCSDKControlPanel_EnableSpatialization;
|
||||
}
|
||||
|
||||
// callback from VrcSdkControlPanel in dll
|
||||
public static void VRCSDKControlPanel_EnableSpatialization()
|
||||
{
|
||||
Debug.Log("Enabling spatialization on 3D AudioSources...");
|
||||
TryToAddSpatializationToAllAudioSources(false, true);
|
||||
}
|
||||
|
||||
static bool ApplyDefaultSpatializationToAudioSource(AudioSource audioSrc, bool force = false)
|
||||
{
|
||||
if (audioSrc == null)
|
||||
return false;
|
||||
|
||||
var vrcsp = audioSrc.gameObject.GetComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
|
||||
// don't make changes if we already have a vrcsp and we aren't forcing
|
||||
if (vrcsp != null && !force)
|
||||
return false;
|
||||
|
||||
if (force)
|
||||
audioSrc.spatialBlend = 1;
|
||||
|
||||
bool initValues = force;
|
||||
|
||||
// is audio source set to be 2D?
|
||||
bool is2D = audioSrc.spatialBlend == 0;
|
||||
|
||||
if (vrcsp == null)
|
||||
{
|
||||
// no onsp and no vrcsp, so add
|
||||
vrcsp = audioSrc.gameObject.AddComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
if (is2D)
|
||||
{
|
||||
// this audio source was marked as 2D, leave the vrcsp disabled
|
||||
vrcsp.EnableSpatialization = false;
|
||||
}
|
||||
initValues = true;
|
||||
}
|
||||
|
||||
audioSrc.spatialize = vrcsp.EnableSpatialization;
|
||||
vrcsp.enabled = true;
|
||||
|
||||
if (initValues)
|
||||
{
|
||||
bool isAvatar = audioSrc.GetComponentInParent<VRC.SDKBase.VRC_AvatarDescriptor>();
|
||||
|
||||
vrcsp.Gain = isAvatar ? VRCSDK2.AudioManagerSettings.AvatarAudioMaxGain : VRCSDK2.AudioManagerSettings.RoomAudioGain;
|
||||
vrcsp.Near = 0;
|
||||
vrcsp.Far = isAvatar ? VRCSDK2.AudioManagerSettings.AvatarAudioMaxRange : VRCSDK2.AudioManagerSettings.RoomAudioMaxRange;
|
||||
vrcsp.UseAudioSourceVolumeCurve = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void TryToAddSpatializationToAllAudioSources(bool newAudioSourcesOnly, bool includeInactive)
|
||||
{
|
||||
AudioSource[] allAudioSources = includeInactive ? Resources.FindObjectsOfTypeAll<AudioSource>() : Object.FindObjectsOfType<AudioSource>();
|
||||
foreach (AudioSource src in allAudioSources)
|
||||
{
|
||||
if (src == null || src.gameObject == null || src.gameObject.scene != UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (newAudioSourcesOnly)
|
||||
{
|
||||
if (!IsNewAudioSource(src))
|
||||
continue;
|
||||
|
||||
UnityEngine.Audio.AudioMixerGroup mixer = AssetDatabase.LoadAssetAtPath<UnityEngine.Audio.AudioMixerGroup>("Assets/VRCSDK/Dependencies/OSPNative/scenes/mixers/SpatializerMixer.mixer");
|
||||
if (mixer != null)
|
||||
{
|
||||
src.outputAudioMixerGroup = mixer;
|
||||
}
|
||||
}
|
||||
|
||||
if (ApplyDefaultSpatializationToAudioSource(src, false))
|
||||
{
|
||||
Debug.Log("Automatically added VRC_SpatialAudioSource component to " + GetGameObjectPath(src.gameObject) + "!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsNewAudioSource(AudioSource src)
|
||||
{
|
||||
var vrcsp = src.GetComponent<VRC_SpatialAudioSource>();
|
||||
if (vrcsp != null)
|
||||
return false;
|
||||
|
||||
if (src.clip != null)
|
||||
return false;
|
||||
if (src.outputAudioMixerGroup != null)
|
||||
return false;
|
||||
|
||||
if (src.mute || src.bypassEffects || src.bypassReverbZones || !src.playOnAwake || src.loop)
|
||||
return false;
|
||||
|
||||
if (src.priority != 128 ||
|
||||
!Mathf.Approximately(src.volume, 1.0f) ||
|
||||
!Mathf.Approximately(src.pitch, 1.0f) ||
|
||||
!Mathf.Approximately(src.panStereo, 0.0f) ||
|
||||
!Mathf.Approximately(src.spatialBlend, 0.0f) ||
|
||||
!Mathf.Approximately(src.reverbZoneMix, 1.0f))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Mathf.Approximately(src.dopplerLevel, 1.0f) ||
|
||||
!Mathf.Approximately(src.spread, 0.0f) ||
|
||||
src.rolloffMode != AudioRolloffMode.Logarithmic ||
|
||||
!Mathf.Approximately(src.minDistance, 1.0f) ||
|
||||
!Mathf.Approximately(src.maxDistance, 500.0f))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static string GetGameObjectPath(GameObject obj)
|
||||
{
|
||||
string path = "/" + obj.name;
|
||||
while (obj.transform.parent != null)
|
||||
{
|
||||
obj = obj.transform.parent.gameObject;
|
||||
path = "/" + obj.name + path;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
public static void ConvertONSPAudioSource(AudioSource src)
|
||||
{
|
||||
if (src == null) return;
|
||||
|
||||
var onsp = src.GetComponent<ONSPAudioSource>();
|
||||
if (onsp != null)
|
||||
{
|
||||
var vrcsp = src.gameObject.GetComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
if (vrcsp == null)
|
||||
{
|
||||
// copy the values from deprecated component
|
||||
vrcsp = src.gameObject.AddComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
vrcsp.Gain = onsp.Gain;
|
||||
vrcsp.Near = onsp.Near;
|
||||
vrcsp.Far = onsp.Far;
|
||||
vrcsp.UseAudioSourceVolumeCurve = !onsp.UseInvSqr;
|
||||
vrcsp.EnableSpatialization = onsp.EnableSpatialization;
|
||||
}
|
||||
// remove deprecated component
|
||||
Component.DestroyImmediate(onsp);
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddVRCSpatialToBareAudioSource(AudioSource src)
|
||||
{
|
||||
if (src == null) return;
|
||||
|
||||
var vrcsp = src.gameObject.GetComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
if (vrcsp != null) return;
|
||||
|
||||
vrcsp = src.gameObject.AddComponent<VRC.SDKBase.VRC_SpatialAudioSource>();
|
||||
|
||||
// add default values
|
||||
bool isAvatar = src.gameObject.GetComponentInParent<VRC.SDKBase.VRC_AvatarDescriptor>();
|
||||
|
||||
vrcsp.Gain = isAvatar ? VRCSDK2.AudioManagerSettings.AvatarAudioMaxGain : VRCSDK2.AudioManagerSettings.RoomAudioGain;
|
||||
vrcsp.Near = 0;
|
||||
vrcsp.Far = isAvatar ? VRCSDK2.AudioManagerSettings.AvatarAudioMaxRange : VRCSDK2.AudioManagerSettings.RoomAudioMaxRange;
|
||||
vrcsp.UseAudioSourceVolumeCurve = false;
|
||||
|
||||
// enable spatialization if src is not 2D
|
||||
AnimationCurve curve = src.GetCustomCurve(AudioSourceCurveType.SpatialBlend);
|
||||
if (src.spatialBlend == 0 || (curve == null || curve.keys.Length <= 1))
|
||||
vrcsp.EnableSpatialization = false;
|
||||
else
|
||||
vrcsp.EnableSpatialization = true;
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a364ece829b6234888c59987a305a00
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
public class EditorCoroutine
|
||||
{
|
||||
public static EditorCoroutine Start( IEnumerator _routine )
|
||||
{
|
||||
EditorCoroutine coroutine = new EditorCoroutine(_routine);
|
||||
coroutine.start();
|
||||
return coroutine;
|
||||
}
|
||||
|
||||
|
||||
public static EditorCoroutine Start(System.Action _action)
|
||||
{
|
||||
EditorCoroutine coroutine = new EditorCoroutine(_action);
|
||||
coroutine.start();
|
||||
return coroutine;
|
||||
}
|
||||
|
||||
readonly IEnumerator routine;
|
||||
EditorCoroutine( IEnumerator _routine )
|
||||
{
|
||||
routine = _routine;
|
||||
}
|
||||
|
||||
readonly System.Action action;
|
||||
EditorCoroutine(System.Action _action)
|
||||
{
|
||||
action = _action;
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
EditorApplication.update += update;
|
||||
}
|
||||
public void stop()
|
||||
{
|
||||
EditorApplication.update -= update;
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
if (routine != null)
|
||||
{
|
||||
if (!routine.MoveNext())
|
||||
stop();
|
||||
}
|
||||
else if (action != null)
|
||||
{
|
||||
action();
|
||||
stop();
|
||||
}
|
||||
else
|
||||
stop();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89005ebc9543e0a4284893c09ca19b1d
|
||||
timeCreated: 1473271738
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public static class EditorHandling
|
||||
{
|
||||
static EditorHandling()
|
||||
{
|
||||
UnityEditor.SceneManagement.EditorSceneManager.sceneOpened += SceneOpenedCallback;
|
||||
}
|
||||
|
||||
static void SceneOpenedCallback( Scene scene, UnityEditor.SceneManagement.OpenSceneMode mode)
|
||||
{
|
||||
// refresh window when scene is opened to display content images correctly
|
||||
if (null != VRCSdkControlPanel.window) VRCSdkControlPanel.window.Reset();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d6c2e367eaa9564ebf6267ec163cfbd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,357 @@
|
||||
#if UNITY_EDITOR
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
#if VRC_SDK_VRCSDK2
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_EventHandler))]
|
||||
public class EventHandlerEditor : Editor
|
||||
{
|
||||
bool showDeferredEvents = false;
|
||||
|
||||
static VRCSDK2.VRC_EventHandler.VrcEventType lastAddedEventType = VRCSDK2.VRC_EventHandler.VrcEventType.SendMessage;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
VRCSDK2.VRC_EventHandler myTarget = (VRCSDK2.VRC_EventHandler)target;
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("ID:");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if (myTarget.GetComponent<VRCSDK2.VRC_Trigger>() != null)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Add Events via the VRC_Trigger on this object.");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
RenderOldEditor(myTarget);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
|
||||
}
|
||||
|
||||
if (myTarget.deferredEvents.Count > 0)
|
||||
{
|
||||
showDeferredEvents = EditorGUILayout.Foldout(showDeferredEvents, "Deferred Events");
|
||||
if (showDeferredEvents)
|
||||
RenderEvents(myTarget.deferredEvents);
|
||||
}
|
||||
}
|
||||
|
||||
int[] sendMessageMethodIndicies;
|
||||
private void RenderOldEditor(VRCSDK2.VRC_EventHandler myTarget)
|
||||
{
|
||||
EditorGUILayout.HelpBox("Please use a VRC_Trigger in the future.", MessageType.Error);
|
||||
|
||||
if (GUILayout.Button("Add Event Handler"))
|
||||
myTarget.Events.Add(new VRCSDK2.VRC_EventHandler.VrcEvent());
|
||||
|
||||
bool first = true;
|
||||
int deleteEventIndex = -1;
|
||||
if (sendMessageMethodIndicies == null || sendMessageMethodIndicies.Length != myTarget.Events.Count)
|
||||
sendMessageMethodIndicies = new int[myTarget.Events.Count + 1];
|
||||
|
||||
for (int i = 0; i < myTarget.Events.Count; ++i)
|
||||
{
|
||||
if (!first)
|
||||
EditorGUILayout.Separator();
|
||||
first = false;
|
||||
|
||||
EditorGUILayout.LabelField("Event " + (i + 1).ToString());
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Event Name");
|
||||
myTarget.Events[i].Name = EditorGUILayout.TextField(myTarget.Events[i].Name);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Event Type");
|
||||
myTarget.Events[i].EventType = (VRCSDK2.VRC_EventHandler.VrcEventType)EditorGUILayout.EnumPopup(myTarget.Events[i].EventType);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
switch (myTarget.Events[i].EventType)
|
||||
{
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.AnimationBool:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Variable");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Operation");
|
||||
myTarget.Events[i].ParameterBoolOp = (VRCSDK2.VRC_EventHandler.VrcBooleanOp)EditorGUILayout.EnumPopup(myTarget.Events[i].ParameterBoolOp);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.AnimationFloat:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Variable");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Value");
|
||||
myTarget.Events[i].ParameterFloat = EditorGUILayout.FloatField(myTarget.Events[i].ParameterFloat);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.AnimationTrigger:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Trigger");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.AudioTrigger:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("AudioSource");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.MeshVisibility:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Mesh");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Operation");
|
||||
myTarget.Events[i].ParameterBoolOp = (VRCSDK2.VRC_EventHandler.VrcBooleanOp)EditorGUILayout.EnumPopup(myTarget.Events[i].ParameterBoolOp);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.PlayAnimation:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Target");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Animation");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.RunConsoleCommand:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Command");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.SendMessage:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Receiver");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Message");
|
||||
|
||||
// sorry for this shit show. Below allows us to show a list of public methods, but also allow custom messages
|
||||
var methods = VRC_EditorTools.GetAccessibleMethodsOnGameObject(myTarget.Events[i].ParameterObject);
|
||||
List<string> methodList = methods.Values.Aggregate(new List<string>(), (acc, lst) => { acc.AddRange(lst.Select(mi => mi.Name)); return acc; });
|
||||
methodList.Add("Custom Message");
|
||||
|
||||
string[] _choices = methodList.ToArray();
|
||||
|
||||
int currentIndex = methodList.Count - 1;
|
||||
|
||||
if (methodList.Contains(myTarget.Events[i].ParameterString))
|
||||
currentIndex = methodList.IndexOf(myTarget.Events[i].ParameterString);
|
||||
|
||||
sendMessageMethodIndicies[i] = EditorGUILayout.Popup(currentIndex, _choices);
|
||||
|
||||
if (sendMessageMethodIndicies[i] != methodList.Count - 1)
|
||||
{
|
||||
myTarget.Events[i].ParameterString = _choices[sendMessageMethodIndicies[i]];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (methodList.Contains(myTarget.Events[i].ParameterString))
|
||||
myTarget.Events[i].ParameterString = "";
|
||||
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
}
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.SetGameObjectActive:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("GameObject");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Operation");
|
||||
myTarget.Events[i].ParameterBoolOp = (VRCSDK2.VRC_EventHandler.VrcBooleanOp)EditorGUILayout.EnumPopup(myTarget.Events[i].ParameterBoolOp);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.SetParticlePlaying:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Target");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Operation");
|
||||
myTarget.Events[i].ParameterBoolOp = (VRCSDK2.VRC_EventHandler.VrcBooleanOp)EditorGUILayout.EnumPopup(myTarget.Events[i].ParameterBoolOp);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.TeleportPlayer:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Location");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Align Room To Destination");
|
||||
myTarget.Events[i].ParameterBoolOp = (VRCSDK2.VRC_EventHandler.VrcBooleanOp)EditorGUILayout.EnumPopup(myTarget.Events[i].ParameterBoolOp);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.SetWebPanelURI:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("URI");
|
||||
myTarget.Events[i].ParameterString = EditorGUILayout.TextField(myTarget.Events[i].ParameterString);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Panel");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
case VRCSDK2.VRC_EventHandler.VrcEventType.SetWebPanelVolume:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Volume");
|
||||
myTarget.Events[i].ParameterFloat = EditorGUILayout.FloatField(myTarget.Events[i].ParameterFloat);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Panel");
|
||||
myTarget.Events[i].ParameterObject = (GameObject)EditorGUILayout.ObjectField(myTarget.Events[i].ParameterObject, typeof(GameObject), true);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
default:
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUIStyle redText = new GUIStyle();
|
||||
redText.normal.textColor = Color.red;
|
||||
EditorGUILayout.LabelField("Unsupported event type", redText);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
break;
|
||||
}
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Delete " + myTarget.Events[i].Name + "?");
|
||||
if (GUILayout.Button("delete"))
|
||||
deleteEventIndex = i;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if (myTarget.Events[i].ParameterObject == null)
|
||||
myTarget.Events[i].ParameterObject = myTarget.gameObject;
|
||||
}
|
||||
|
||||
|
||||
if (deleteEventIndex != -1)
|
||||
myTarget.Events.RemoveAt(deleteEventIndex);
|
||||
}
|
||||
|
||||
private void RenderEvents(IEnumerable<VRCSDK2.VRC_EventHandler.EventInfo> entries)
|
||||
{
|
||||
foreach (VRCSDK2.VRC_EventHandler.EventInfo entry in entries)
|
||||
{
|
||||
EditorGUILayout.PrefixLabel("Target");
|
||||
EditorGUILayout.ObjectField(entry.evt.ParameterObject, typeof(GameObject), true);
|
||||
|
||||
EditorGUILayout.LabelField(string.Format("Name: {0}", entry.evt.Name));
|
||||
EditorGUILayout.LabelField(string.Format("Type: {0}", entry.evt.EventType));
|
||||
EditorGUILayout.LabelField(string.Format("Bool: {0}", entry.evt.ParameterBool));
|
||||
EditorGUILayout.LabelField(string.Format("Float: {0}", entry.evt.ParameterFloat));
|
||||
EditorGUILayout.LabelField(string.Format("Int: {0}", entry.evt.ParameterInt));
|
||||
EditorGUILayout.LabelField(string.Format("String: {0}", entry.evt.ParameterString));
|
||||
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
}
|
||||
|
||||
public static void RenderEditor(VRCSDK2.VRC_EventHandler myTarget)
|
||||
{
|
||||
bool first = true;
|
||||
int deleteEventIndex = -1;
|
||||
|
||||
for (int i = 0; i < myTarget.Events.Count; ++i)
|
||||
{
|
||||
if (!first)
|
||||
EditorGUILayout.Separator();
|
||||
first = false;
|
||||
|
||||
if (RenderEventHeader(myTarget, myTarget.Events[i]))
|
||||
deleteEventIndex = i;
|
||||
|
||||
RenderEventHeader(myTarget, myTarget.Events[i]);
|
||||
|
||||
if (myTarget.Events[i].ParameterObject == null)
|
||||
myTarget.Events[i].ParameterObject = myTarget.gameObject;
|
||||
}
|
||||
|
||||
if (deleteEventIndex != -1)
|
||||
myTarget.Events.RemoveAt(deleteEventIndex);
|
||||
}
|
||||
|
||||
public static VRCSDK2.VRC_EventHandler.VrcEvent RenderAddEvent(VRCSDK2.VRC_EventHandler myTarget)
|
||||
{
|
||||
VRCSDK2.VRC_EventHandler.VrcEvent newEvent = null;
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
lastAddedEventType = VRC_EditorTools.FilteredEnumPopup("New Event Type", lastAddedEventType, (v) => v != VRCSDK2.VRC_EventHandler.VrcEventType.SpawnObject && v != VRCSDK2.VRC_EventHandler.VrcEventType.SendMessage);
|
||||
if (GUILayout.Button("Add"))
|
||||
{
|
||||
newEvent = new VRCSDK2.VRC_EventHandler.VrcEvent
|
||||
{
|
||||
EventType = lastAddedEventType,
|
||||
ParameterObject = myTarget.gameObject
|
||||
};
|
||||
myTarget.Events.Add(newEvent);
|
||||
EditorUtility.SetDirty(myTarget);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
return newEvent;
|
||||
}
|
||||
|
||||
public static bool RenderEventHeader(VRCSDK2.VRC_EventHandler myTarget, VRCSDK2.VRC_EventHandler.VrcEvent evt)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
evt.EventType = VRC_EditorTools.FilteredEnumPopup("New Event Type", evt.EventType, (v) => v != VRCSDK2.VRC_EventHandler.VrcEventType.SpawnObject && v != VRCSDK2.VRC_EventHandler.VrcEventType.SendMessage);
|
||||
bool delete = GUILayout.Button("Remove");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
return delete;
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRC.SDKBase.VRC_EventHandler))]
|
||||
public class SDKBaseEventHandlerEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.LabelField("Event Handlers are not supported in VRCSDK3.");
|
||||
if (GUILayout.Button("replace me with the correct VRC_EventHandler"))
|
||||
{
|
||||
var go = ((VRC.SDKBase.VRC_EventHandler)target).gameObject;
|
||||
DestroyImmediate(target);
|
||||
go.AddComponent<VRCSDK2.VRC_EventHandler>();
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
[CustomEditor(typeof(VRC.SDKBase.VRC_EventHandler))]
|
||||
public class SDKBaseEventHandlerEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.LabelField("Event Handlers are not supported in VRCSDK3.");
|
||||
if( GUILayout.Button("delete me") )
|
||||
DestroyImmediate(target);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4810e652e8242384c834320970702290
|
||||
timeCreated: 1454469344
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,50 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
#if UNITY_EDITOR
|
||||
#pragma warning disable 0618
|
||||
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_KeyEvents))]
|
||||
public class VRC_KeyEventsEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.HelpBox("Obsolete. Please use a VRC_Trigger instead.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_UseEvents))]
|
||||
public class VRC_UseEventsEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.HelpBox("Obsolete. Please use a VRC_Trigger instead.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_TriggerColliderEventTrigger))]
|
||||
public class VRC_TriggerColliderEventTriggerEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.HelpBox("Obsolete. Please use a VRC_Trigger instead.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_TimedEvents))]
|
||||
public class VRC_TimedEventsEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.HelpBox("Obsolete. Please use a VRC_Trigger instead.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore 0618
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 482185bf29f12074dada194ffef6a682
|
||||
timeCreated: 1475877803
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,225 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using VRC.SDK3.Editor;
|
||||
using VRC.SDKBase.Editor;
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_AvatarDescriptor))]
|
||||
public class AvatarDescriptorEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_AvatarDescriptor avatarDescriptor;
|
||||
VRC.Core.PipelineManager pipelineManager;
|
||||
|
||||
SkinnedMeshRenderer selectedMesh;
|
||||
List<string> blendShapeNames = null;
|
||||
|
||||
bool shouldRefreshVisemes = false;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
if (avatarDescriptor == null)
|
||||
avatarDescriptor = (VRCSDK2.VRC_AvatarDescriptor)target;
|
||||
|
||||
if (pipelineManager == null)
|
||||
{
|
||||
pipelineManager = avatarDescriptor.GetComponent<VRC.Core.PipelineManager>();
|
||||
if (pipelineManager == null)
|
||||
avatarDescriptor.gameObject.AddComponent<VRC.Core.PipelineManager>();
|
||||
}
|
||||
|
||||
// DrawDefaultInspector();
|
||||
|
||||
if(VRCSdkControlPanel.window != null)
|
||||
{
|
||||
if( GUILayout.Button( "Select this avatar in the SDK control panel" ) )
|
||||
VRCSdkControlPanelAvatarBuilder.SelectAvatar(avatarDescriptor);
|
||||
}
|
||||
|
||||
avatarDescriptor.ViewPosition = EditorGUILayout.Vector3Field("View Position", avatarDescriptor.ViewPosition);
|
||||
//avatarDescriptor.Name = EditorGUILayout.TextField("Avatar Name", avatarDescriptor.Name);
|
||||
avatarDescriptor.Animations = (VRCSDK2.VRC_AvatarDescriptor.AnimationSet)EditorGUILayout.EnumPopup("Default Animation Set", avatarDescriptor.Animations);
|
||||
avatarDescriptor.CustomStandingAnims = (AnimatorOverrideController)EditorGUILayout.ObjectField("Custom Standing Anims", avatarDescriptor.CustomStandingAnims, typeof(AnimatorOverrideController), true, null);
|
||||
avatarDescriptor.CustomSittingAnims = (AnimatorOverrideController)EditorGUILayout.ObjectField("Custom Sitting Anims", avatarDescriptor.CustomSittingAnims, typeof(AnimatorOverrideController), true, null);
|
||||
avatarDescriptor.ScaleIPD = EditorGUILayout.Toggle("Scale IPD", avatarDescriptor.ScaleIPD);
|
||||
|
||||
avatarDescriptor.lipSync = (VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle)EditorGUILayout.EnumPopup("Lip Sync", avatarDescriptor.lipSync);
|
||||
switch (avatarDescriptor.lipSync)
|
||||
{
|
||||
case VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.Default:
|
||||
if (GUILayout.Button("Auto Detect!"))
|
||||
AutoDetectLipSync();
|
||||
break;
|
||||
|
||||
case VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape:
|
||||
avatarDescriptor.VisemeSkinnedMesh = (SkinnedMeshRenderer)EditorGUILayout.ObjectField("Face Mesh", avatarDescriptor.VisemeSkinnedMesh, typeof(SkinnedMeshRenderer), true);
|
||||
if (avatarDescriptor.VisemeSkinnedMesh != null)
|
||||
{
|
||||
DetermineBlendShapeNames();
|
||||
|
||||
int current = -1;
|
||||
for (int b = 0; b < blendShapeNames.Count; ++b)
|
||||
if (avatarDescriptor.MouthOpenBlendShapeName == blendShapeNames[b])
|
||||
current = b;
|
||||
|
||||
string title = "Jaw Flap Blend Shape";
|
||||
int next = EditorGUILayout.Popup(title, current, blendShapeNames.ToArray());
|
||||
if (next >= 0)
|
||||
avatarDescriptor.MouthOpenBlendShapeName = blendShapeNames[next];
|
||||
}
|
||||
break;
|
||||
|
||||
case VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone:
|
||||
avatarDescriptor.lipSyncJawBone = (Transform)EditorGUILayout.ObjectField("Jaw Bone", avatarDescriptor.lipSyncJawBone, typeof(Transform), true);
|
||||
break;
|
||||
|
||||
case VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape:
|
||||
SkinnedMeshRenderer prev = avatarDescriptor.VisemeSkinnedMesh;
|
||||
avatarDescriptor.VisemeSkinnedMesh = (SkinnedMeshRenderer)EditorGUILayout.ObjectField("Face Mesh", avatarDescriptor.VisemeSkinnedMesh, typeof(SkinnedMeshRenderer), true);
|
||||
if (avatarDescriptor.VisemeSkinnedMesh != prev)
|
||||
shouldRefreshVisemes = true;
|
||||
if (avatarDescriptor.VisemeSkinnedMesh != null)
|
||||
{
|
||||
DetermineBlendShapeNames();
|
||||
|
||||
if (avatarDescriptor.VisemeBlendShapes == null || avatarDescriptor.VisemeBlendShapes.Length != (int)VRCSDK2.VRC_AvatarDescriptor.Viseme.Count)
|
||||
avatarDescriptor.VisemeBlendShapes = new string[(int)VRCSDK2.VRC_AvatarDescriptor.Viseme.Count];
|
||||
for (int i = 0; i < (int)VRCSDK2.VRC_AvatarDescriptor.Viseme.Count; ++i)
|
||||
{
|
||||
int current = -1;
|
||||
for (int b = 0; b < blendShapeNames.Count; ++b)
|
||||
if (avatarDescriptor.VisemeBlendShapes[i] == blendShapeNames[b])
|
||||
current = b;
|
||||
|
||||
string title = "Viseme: " + ((VRCSDK2.VRC_AvatarDescriptor.Viseme)i).ToString();
|
||||
int next = EditorGUILayout.Popup(title, current, blendShapeNames.ToArray());
|
||||
if (next >= 0)
|
||||
avatarDescriptor.VisemeBlendShapes[i] = blendShapeNames[next];
|
||||
}
|
||||
|
||||
if (shouldRefreshVisemes)
|
||||
AutoDetectVisemes();
|
||||
}
|
||||
break;
|
||||
}
|
||||
EditorGUILayout.LabelField("Unity Version", avatarDescriptor.unityVersion);
|
||||
}
|
||||
|
||||
void DetermineBlendShapeNames()
|
||||
{
|
||||
if (avatarDescriptor.VisemeSkinnedMesh != null &&
|
||||
avatarDescriptor.VisemeSkinnedMesh != selectedMesh)
|
||||
{
|
||||
blendShapeNames = new List<string>();
|
||||
blendShapeNames.Add("-none-");
|
||||
selectedMesh = avatarDescriptor.VisemeSkinnedMesh;
|
||||
if ((selectedMesh != null) && (selectedMesh.sharedMesh != null))
|
||||
{
|
||||
for (int i = 0; i < selectedMesh.sharedMesh.blendShapeCount; ++i)
|
||||
blendShapeNames.Add(selectedMesh.sharedMesh.GetBlendShapeName(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AutoDetectVisemes()
|
||||
{
|
||||
|
||||
// prioritize strict - but fallback to looser - naming and don't touch user-overrides
|
||||
|
||||
List<string> blendShapes = new List<string>(blendShapeNames);
|
||||
blendShapes.Remove("-none-");
|
||||
|
||||
for (int v = 0; v < avatarDescriptor.VisemeBlendShapes.Length; v++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(avatarDescriptor.VisemeBlendShapes[v]))
|
||||
{
|
||||
string viseme = ((VRCSDK2.VRC_AvatarDescriptor.Viseme)v).ToString().ToLowerInvariant();
|
||||
|
||||
foreach (string s in blendShapes)
|
||||
{
|
||||
if (s.ToLowerInvariant() == "vrc.v_" + viseme)
|
||||
{
|
||||
avatarDescriptor.VisemeBlendShapes[v] = s;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
foreach (string s in blendShapes)
|
||||
{
|
||||
if (s.ToLowerInvariant() == "v_" + viseme)
|
||||
{
|
||||
avatarDescriptor.VisemeBlendShapes[v] = s;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
foreach (string s in blendShapes)
|
||||
{
|
||||
if (s.ToLowerInvariant().EndsWith(viseme))
|
||||
{
|
||||
avatarDescriptor.VisemeBlendShapes[v] = s;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
foreach (string s in blendShapes)
|
||||
{
|
||||
if (s.ToLowerInvariant() == viseme)
|
||||
{
|
||||
avatarDescriptor.VisemeBlendShapes[v] = s;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
foreach (string s in blendShapes)
|
||||
{
|
||||
if (s.ToLowerInvariant().Contains(viseme))
|
||||
{
|
||||
avatarDescriptor.VisemeBlendShapes[v] = s;
|
||||
goto next;
|
||||
}
|
||||
}
|
||||
next: { }
|
||||
}
|
||||
}
|
||||
|
||||
shouldRefreshVisemes = false;
|
||||
|
||||
}
|
||||
|
||||
void AutoDetectLipSync()
|
||||
{
|
||||
var smrs = avatarDescriptor.GetComponentsInChildren<SkinnedMeshRenderer>();
|
||||
foreach (var smr in smrs)
|
||||
{
|
||||
if (smr.sharedMesh.blendShapeCount > 0)
|
||||
{
|
||||
avatarDescriptor.lipSyncJawBone = null;
|
||||
|
||||
if (smr.sharedMesh.blendShapeCount > 1)
|
||||
{
|
||||
avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape;
|
||||
avatarDescriptor.VisemeSkinnedMesh = smr;
|
||||
shouldRefreshVisemes = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape;
|
||||
avatarDescriptor.VisemeSkinnedMesh = null;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Animator a = avatarDescriptor.GetComponent<Animator>();
|
||||
if (!a)
|
||||
EditorUtility.DisplayDialog("Ooops", "This avatar has no Animator and can have no lipsync.", "OK");
|
||||
else if (a.GetBoneTransform(HumanBodyBones.Jaw) != null)
|
||||
{
|
||||
avatarDescriptor.lipSync = VRCSDK2.VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone;
|
||||
avatarDescriptor.lipSyncJawBone = avatarDescriptor.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Jaw);
|
||||
avatarDescriptor.VisemeSkinnedMesh = null;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5e83254bb97e84795ac882692ae124ba
|
||||
timeCreated: 1450462624
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,23 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_ObjectSpawn))]
|
||||
public class VRCObjectSpawnEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_ObjectSpawn spawn;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if (spawn == null)
|
||||
spawn = (VRCSDK2.VRC_ObjectSpawn)target;
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
DrawDefaultInspector();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 26a75599848adb449b7aceed5090e35c
|
||||
timeCreated: 1463516633
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,25 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_ObjectSync))]
|
||||
public class VRCObjectSyncEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_ObjectSync sync;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if (sync == null)
|
||||
sync = (VRCSDK2.VRC_ObjectSync)target;
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
sync.SynchronizePhysics = EditorGUILayout.Toggle("Synchronize Physics",sync.SynchronizePhysics);
|
||||
sync.AllowCollisionTransfer = EditorGUILayout.Toggle("Allow Collision Transfer", sync.AllowCollisionTransfer);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed4aad2698d3b62408e69b57c7748791
|
||||
timeCreated: 1463516212
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,37 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
public class VRCPlayerModEditorWindow : EditorWindow {
|
||||
|
||||
public delegate void AddModCallback();
|
||||
public static AddModCallback addModCallback;
|
||||
|
||||
private static VRCSDK2.VRC_PlayerMods myTarget;
|
||||
|
||||
private static VRCSDK2.VRCPlayerModFactory.PlayerModType type;
|
||||
|
||||
public static void Init (VRCSDK2.VRC_PlayerMods target, AddModCallback callback)
|
||||
{
|
||||
// Get existing open window or if none, make a new one:
|
||||
EditorWindow.GetWindow (typeof (VRCPlayerModEditorWindow));
|
||||
addModCallback = callback;
|
||||
myTarget = target;
|
||||
|
||||
type = VRCSDK2.VRCPlayerModFactory.PlayerModType.Jump;
|
||||
}
|
||||
|
||||
void OnGUI ()
|
||||
{
|
||||
type = (VRCSDK2.VRCPlayerModFactory.PlayerModType)EditorGUILayout.EnumPopup("Mods", type);
|
||||
if(GUILayout.Button("Add Mod"))
|
||||
{
|
||||
VRCSDK2.VRCPlayerMod mod = VRCSDK2.VRCPlayerModFactory.Create(type);
|
||||
myTarget.AddMod(mod);
|
||||
addModCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8986a640e24a0754ea0aded12234b808
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,109 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_PlayerMods))]
|
||||
public class VRCPlayerModsEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_PlayerMods myTarget;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if(myTarget == null)
|
||||
myTarget = (VRCSDK2.VRC_PlayerMods)target;
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
myTarget.isRoomPlayerMods = EditorGUILayout.Toggle("isRoomPlayerMods", myTarget.isRoomPlayerMods);
|
||||
|
||||
List<VRCSDK2.VRCPlayerMod> playerMods = myTarget.playerMods;
|
||||
for(int i=0; i<playerMods.Count; ++i)
|
||||
{
|
||||
VRCSDK2.VRCPlayerMod mod = playerMods[i];
|
||||
EditorGUILayout.BeginVertical("box");
|
||||
EditorGUILayout.LabelField(mod.name, EditorStyles.boldLabel);
|
||||
if( mod.allowNameEdit )
|
||||
mod.name = EditorGUILayout.TextField( "Mod Name: ", mod.name );
|
||||
for(int j=0; j<mod.properties.Count; ++j)
|
||||
{
|
||||
VRCSDK2.VRCPlayerModProperty prop = mod.properties[j];
|
||||
myTarget.playerMods[i].properties[j] = DrawFieldForProp(prop);
|
||||
}
|
||||
if(GUILayout.Button ("Remove Mod"))
|
||||
{
|
||||
myTarget.RemoveMod(mod);
|
||||
break;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
}
|
||||
if(GUILayout.Button("Add Mods"))
|
||||
{
|
||||
VRCPlayerModEditorWindow.AddModCallback adcb = OnInspectorGUI;
|
||||
VRCPlayerModEditorWindow.Init(myTarget, adcb);
|
||||
}
|
||||
}
|
||||
|
||||
VRCSDK2.VRCPlayerModProperty DrawFieldForProp(VRCSDK2.VRCPlayerModProperty property)
|
||||
{
|
||||
if(property.type.SystemType == typeof(int))
|
||||
{
|
||||
property.intValue = EditorGUILayout.IntField(property.name, property.intValue);
|
||||
}
|
||||
else if(property.type.SystemType == typeof(float))
|
||||
{
|
||||
property.floatValue = EditorGUILayout.FloatField(property.name, property.floatValue);
|
||||
}
|
||||
else if(property.type.SystemType == typeof(string))
|
||||
{
|
||||
property.stringValue = EditorGUILayout.TextField(property.name, property.stringValue);
|
||||
}
|
||||
else if(property.type.SystemType == typeof(bool))
|
||||
{
|
||||
property.boolValue = EditorGUILayout.Toggle(property.name, property.boolValue);
|
||||
}
|
||||
else if(property.type.SystemType == typeof(GameObject))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField( property.name );
|
||||
property.gameObjectValue = (GameObject) EditorGUILayout.ObjectField( property.gameObjectValue, typeof( GameObject ), true );
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
else if(property.type.SystemType == typeof(KeyCode))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField( property.name );
|
||||
property.keyCodeValue = (KeyCode) EditorGUILayout.EnumPopup( property.keyCodeValue );
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
else if(property.type.SystemType == typeof(VRCSDK2.VRC_EventHandler.VrcBroadcastType))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField( property.name );
|
||||
property.broadcastValue = (VRCSDK2.VRC_EventHandler.VrcBroadcastType) EditorGUILayout.EnumPopup( property.broadcastValue );
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
else if(property.type.SystemType == typeof(VRCSDK2.VRCPlayerModFactory.HealthOnDeathAction))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField( property.name );
|
||||
property.onDeathActionValue = (VRCSDK2.VRCPlayerModFactory.HealthOnDeathAction) EditorGUILayout.EnumPopup( property.onDeathActionValue);
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
else if(property.type.SystemType == typeof(RuntimeAnimatorController))
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField( property.name );
|
||||
property.animationController = (RuntimeAnimatorController) EditorGUILayout.ObjectField( property.animationController, typeof( RuntimeAnimatorController ), false );
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
return property;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 792e7964a56e51f4188e1221751642e9
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,46 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_Station))]
|
||||
public class VRCPlayerStationEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_Station myTarget;
|
||||
|
||||
SerializedProperty onRemoteEnter;
|
||||
SerializedProperty onRemoteExit;
|
||||
SerializedProperty onLocalEnter;
|
||||
SerializedProperty onLocalExit;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if(myTarget == null)
|
||||
myTarget = (VRCSDK2.VRC_Station)target;
|
||||
onRemoteEnter = serializedObject.FindProperty("OnRemotePlayerEnterStation");
|
||||
onRemoteExit = serializedObject.FindProperty("OnRemotePlayerExitStation");
|
||||
onLocalEnter = serializedObject.FindProperty("OnLocalPlayerEnterStation");
|
||||
onLocalExit = serializedObject.FindProperty("OnLocalPlayerExitStation");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
myTarget.PlayerMobility = (VRC.SDKBase.VRCStation.Mobility)EditorGUILayout.EnumPopup("Player Mobility", myTarget.PlayerMobility);
|
||||
myTarget.canUseStationFromStation = EditorGUILayout.Toggle("Can Use Station From Station", myTarget.canUseStationFromStation);
|
||||
myTarget.animatorController = (RuntimeAnimatorController)EditorGUILayout.ObjectField("Animator Controller", myTarget.animatorController, typeof(RuntimeAnimatorController), false);
|
||||
myTarget.disableStationExit = EditorGUILayout.Toggle("Disable Station Exit", myTarget.disableStationExit);
|
||||
myTarget.seated = EditorGUILayout.Toggle("Seated", myTarget.seated);
|
||||
myTarget.stationEnterPlayerLocation = (Transform)EditorGUILayout.ObjectField("Player Enter Location", myTarget.stationEnterPlayerLocation, typeof(Transform), true);
|
||||
myTarget.stationExitPlayerLocation = (Transform)EditorGUILayout.ObjectField("Player Exit Location", myTarget.stationExitPlayerLocation, typeof(Transform), true);
|
||||
myTarget.controlsObject = (VRC.SDKBase.VRC_ObjectApi)EditorGUILayout.ObjectField("API Object", myTarget.controlsObject, typeof(VRC.SDKBase.VRC_ObjectApi), false);
|
||||
|
||||
EditorGUILayout.PropertyField(onRemoteEnter, new GUIContent("On Remote Player Enter"));
|
||||
EditorGUILayout.PropertyField(onRemoteExit, new GUIContent("On Remote Player Exit"));
|
||||
EditorGUILayout.PropertyField(onLocalEnter, new GUIContent("On Local Player Enter"));
|
||||
EditorGUILayout.PropertyField(onLocalExit, new GUIContent("On Local Player Exit"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5262a02c32e41e047bdfdfc3b63db8ff
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,29 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
|
||||
[CustomEditor (typeof(VRCSDK2.VRC_SceneDescriptor))]
|
||||
public class VRCSceneDescriptorEditor : Editor
|
||||
{
|
||||
VRCSDK2.VRC_SceneDescriptor sceneDescriptor;
|
||||
VRC.Core.PipelineManager pipelineManager;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
if(sceneDescriptor == null)
|
||||
sceneDescriptor = (VRCSDK2.VRC_SceneDescriptor)target;
|
||||
|
||||
if(pipelineManager == null)
|
||||
{
|
||||
pipelineManager = sceneDescriptor.GetComponent<VRC.Core.PipelineManager>();
|
||||
if(pipelineManager == null)
|
||||
sceneDescriptor.gameObject.AddComponent<VRC.Core.PipelineManager>();
|
||||
}
|
||||
|
||||
DrawDefaultInspector();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9cbc493bbbc443fb92898aa84d221ec
|
||||
timeCreated: 1450463561
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,130 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
//[CustomPropertyDrawer(typeof(VRC_AvatarVariations.VariationCategory))]
|
||||
//public class PropertyDrawer_AvatarVariation_VariationCategory : PropertyDrawer
|
||||
//{
|
||||
// public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
|
||||
// {
|
||||
// //EditorGUILayout.Label("blah");
|
||||
|
||||
// if (property == null)
|
||||
// return;
|
||||
|
||||
// SerializedProperty nameProperty = property.FindPropertyRelative("name");
|
||||
// //SerializedProperty mirrorProperty = property.FindPropertyRelative("mirror");
|
||||
// //SerializedProperty typeProperty = property.FindPropertyRelative("type");
|
||||
// //SerializedProperty valueProperty = null;
|
||||
// //switch (typeProperty.enumValueIndex)
|
||||
// //{
|
||||
// // case (int)VRC_DataStorage.VrcDataType.Bool:
|
||||
// // valueProperty = property.FindPropertyRelative("valueBool");
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataType.Float:
|
||||
// // valueProperty = property.FindPropertyRelative("valueFloat");
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataType.Int:
|
||||
// // valueProperty = property.FindPropertyRelative("valueInt");
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataType.String:
|
||||
// // valueProperty = property.FindPropertyRelative("valueString");
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataType.SerializeObject:
|
||||
// // valueProperty = property.FindPropertyRelative("serializeComponent");
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataType.None:
|
||||
// // case (int)VRC_DataStorage.VrcDataType.SerializeBytes:
|
||||
// // break;
|
||||
// //}
|
||||
|
||||
// EditorGUI.BeginProperty(rect, label, property);
|
||||
|
||||
// int baseWidth = (int)(rect.width / 4);
|
||||
// Rect nameRect = new Rect(rect.x, rect.y, baseWidth, rect.height);
|
||||
// //Rect mirrorRect = new Rect(rect.x + baseWidth, rect.y, baseWidth, rect.height);
|
||||
// //Rect typeRect = new Rect(rect.x + baseWidth * 2, rect.y, baseWidth, rect.height);
|
||||
// //Rect valueRect = new Rect(rect.x + baseWidth * 3, rect.y, baseWidth, rect.height);
|
||||
// //Rect typeValueRect = new Rect(rect.x + baseWidth * 2, rect.y, baseWidth * 2, rect.height);
|
||||
|
||||
// EditorGUI.PropertyField(nameRect, nameProperty, GUIContent.none);
|
||||
// //EditorGUI.PropertyField(mirrorRect, mirrorProperty, GUIContent.none);
|
||||
|
||||
// //switch (mirrorProperty.enumValueIndex)
|
||||
// //{
|
||||
// // case (int)VRC_DataStorage.VrcDataMirror.None:
|
||||
// // if (valueProperty == null)
|
||||
// // VRC_EditorTools.FilteredEnumPopup<VRC_DataStorage.VrcDataType>(typeValueRect, typeProperty, t => true);
|
||||
// // else
|
||||
// // {
|
||||
// // VRC_EditorTools.FilteredEnumPopup<VRC_DataStorage.VrcDataType>(typeRect, typeProperty, t => true);
|
||||
// // EditorGUI.PropertyField(valueRect, valueProperty, GUIContent.none);
|
||||
// // }
|
||||
// // break;
|
||||
// // case (int)VRC_DataStorage.VrcDataMirror.SerializeComponent:
|
||||
// // typeProperty.enumValueIndex = (int)VRC_DataStorage.VrcDataType.SerializeObject;
|
||||
// // EditorGUI.PropertyField(typeValueRect, valueProperty, GUIContent.none);
|
||||
// // break;
|
||||
// // default:
|
||||
// // VRC_EditorTools.FilteredEnumPopup<VRC_DataStorage.VrcDataType>(typeValueRect, typeProperty, t => true);
|
||||
// // break;
|
||||
// //}
|
||||
|
||||
// EditorGUI.EndProperty();
|
||||
// }
|
||||
//}
|
||||
|
||||
//[CustomEditor(typeof(VRC_AvatarVariations))]
|
||||
//public class VRC_AvatarVariationsEditor : Editor
|
||||
//{
|
||||
// SerializedProperty categories;
|
||||
|
||||
// void OnEnable()
|
||||
// {
|
||||
// categories = serializedObject.FindProperty("categories");
|
||||
// }
|
||||
|
||||
// public override void OnInspectorGUI()
|
||||
// {
|
||||
// //serializedObject.Update();
|
||||
// // EditorGUILayout.PropertyField(categories);
|
||||
// //serializedObject.ApplyModifiedProperties();
|
||||
|
||||
|
||||
|
||||
// //if (target == null)
|
||||
// // return;
|
||||
|
||||
// ////var prop = serializedObject.FindProperty("root");
|
||||
// ////EditorGUILayout.PropertyField(prop, new GUIContent("Show Help"));
|
||||
// //VRCSDK2.VRC_AvatarVariations variations = target as VRCSDK2.VRC_AvatarVariations;
|
||||
// //if (variations.categories == null)
|
||||
// // variations.categories = new VRC_AvatarVariations.VariationCategory[0];
|
||||
|
||||
// //foreach ( var vc in variations.categories )
|
||||
// //{
|
||||
// // vc.name = EditorGUILayout.TextField("Variation Name", vc.name);
|
||||
// //// SerializedProperty triggers = triggersProperty.Copy();
|
||||
// //// int triggersLength = triggers.arraySize;
|
||||
|
||||
// //// List<int> to_remove = new List<int>();
|
||||
// //// for (int idx = 0; idx < triggersLength; ++idx)
|
||||
// //// {
|
||||
// //// SerializedProperty triggerProperty = triggers.GetArrayElementAtIndex(idx);
|
||||
// //// }
|
||||
|
||||
// //// EditorGUILayout.LabelField("");
|
||||
// ////// helpProperty = serializedObject.FindProperty("ShowHelp");
|
||||
// ////// EditorGUILayout.PropertyField(helpProperty, new GUIContent("Show Help"));
|
||||
// //}
|
||||
|
||||
// ////EditorGUILayout.
|
||||
|
||||
// DrawDefaultInspector();
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eeda995d0ceac6443a54716996eab52e
|
||||
timeCreated: 1511373338
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,93 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(VRCSDK2.VRC_DataStorage.VrcDataElement))]
|
||||
public class CustomDataElementDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
if (property == null)
|
||||
return;
|
||||
|
||||
SerializedProperty nameProperty = property.FindPropertyRelative("name");
|
||||
SerializedProperty mirrorProperty = property.FindPropertyRelative("mirror");
|
||||
SerializedProperty typeProperty = property.FindPropertyRelative("type");
|
||||
SerializedProperty valueProperty = null;
|
||||
switch (typeProperty.enumValueIndex)
|
||||
{
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.Bool:
|
||||
valueProperty = property.FindPropertyRelative("valueBool");
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.Float:
|
||||
valueProperty = property.FindPropertyRelative("valueFloat");
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.Int:
|
||||
valueProperty = property.FindPropertyRelative("valueInt");
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.String:
|
||||
valueProperty = property.FindPropertyRelative("valueString");
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.SerializeObject:
|
||||
valueProperty = property.FindPropertyRelative("serializeComponent");
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.None:
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataType.SerializeBytes:
|
||||
break;
|
||||
}
|
||||
|
||||
EditorGUI.BeginProperty(rect, label, property);
|
||||
|
||||
int baseWidth = (int)(rect.width / 4);
|
||||
Rect nameRect = new Rect(rect.x, rect.y, baseWidth, rect.height);
|
||||
Rect mirrorRect = new Rect(rect.x + baseWidth, rect.y, baseWidth, rect.height);
|
||||
Rect typeRect = new Rect(rect.x + baseWidth * 2, rect.y, baseWidth, rect.height);
|
||||
Rect valueRect = new Rect(rect.x + baseWidth * 3, rect.y, baseWidth, rect.height);
|
||||
Rect typeValueRect = new Rect(rect.x + baseWidth * 2, rect.y, baseWidth * 2, rect.height);
|
||||
|
||||
EditorGUI.PropertyField(nameRect, nameProperty, GUIContent.none);
|
||||
EditorGUI.PropertyField(mirrorRect, mirrorProperty, GUIContent.none);
|
||||
|
||||
switch (mirrorProperty.enumValueIndex)
|
||||
{
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataMirror.None:
|
||||
if (valueProperty == null)
|
||||
VRC_EditorTools.FilteredEnumPopup<VRCSDK2.VRC_DataStorage.VrcDataType>(typeValueRect, typeProperty, t => true);
|
||||
else
|
||||
{
|
||||
VRC_EditorTools.FilteredEnumPopup<VRCSDK2.VRC_DataStorage.VrcDataType>(typeRect, typeProperty, t => true);
|
||||
EditorGUI.PropertyField(valueRect, valueProperty, GUIContent.none);
|
||||
}
|
||||
break;
|
||||
case (int)VRCSDK2.VRC_DataStorage.VrcDataMirror.SerializeComponent:
|
||||
typeProperty.enumValueIndex = (int)VRCSDK2.VRC_DataStorage.VrcDataType.SerializeObject;
|
||||
EditorGUI.PropertyField(typeValueRect, valueProperty, GUIContent.none);
|
||||
break;
|
||||
default:
|
||||
VRC_EditorTools.FilteredEnumPopup<VRCSDK2.VRC_DataStorage.VrcDataType>(typeValueRect, typeProperty, t => true);
|
||||
break;
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_DataStorage)), CanEditMultipleObjects]
|
||||
public class VRC_DataStorageEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
VRCSDK2.VRC_ObjectSync os = ((VRCSDK2.VRC_DataStorage)target).GetComponent<VRCSDK2.VRC_ObjectSync>();
|
||||
if (os != null && os.SynchronizePhysics)
|
||||
EditorGUILayout.HelpBox("Consider either removing the VRC_ObjectSync or disabling SynchronizePhysics.", MessageType.Warning);
|
||||
|
||||
DrawDefaultInspector();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ac7998a36f085844847acbc046d4e27
|
||||
timeCreated: 1478191469
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,57 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using UnityEditor;
|
||||
using VRC.SDKBase;
|
||||
|
||||
[CustomEditor(typeof(VRC_DestructibleStandard))]
|
||||
[CanEditMultipleObjects]
|
||||
public class VRC_DestructibleStandardEditor : Editor
|
||||
{
|
||||
VRC_DestructibleStandard ds;
|
||||
|
||||
SerializedProperty maxHealth;
|
||||
SerializedProperty currentHealth;
|
||||
SerializedProperty healable;
|
||||
SerializedProperty onDamagedTrigger;
|
||||
SerializedProperty onDestroyedTrigger;
|
||||
SerializedProperty onHealedTrigger;
|
||||
SerializedProperty onFullHealedTrigger;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
maxHealth = serializedObject.FindProperty("maxHealth");
|
||||
currentHealth = serializedObject.FindProperty("currentHealth");
|
||||
healable = serializedObject.FindProperty("healable");
|
||||
onDamagedTrigger = serializedObject.FindProperty("onDamagedTrigger");
|
||||
onDestroyedTrigger = serializedObject.FindProperty("onDestructedTrigger");
|
||||
onHealedTrigger = serializedObject.FindProperty("onHealedTrigger");
|
||||
onFullHealedTrigger = serializedObject.FindProperty("onFullHealedTrigger");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
ds = (VRC_DestructibleStandard)target;
|
||||
|
||||
// Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
|
||||
serializedObject.Update ();
|
||||
|
||||
EditorGUILayout.PropertyField(maxHealth, new GUIContent("Max Health"));
|
||||
EditorGUILayout.PropertyField(currentHealth, new GUIContent("Current Health"));
|
||||
EditorGUILayout.PropertyField(healable, new GUIContent("Is Healable"));
|
||||
|
||||
EditorGUILayout.PropertyField(onDamagedTrigger, new GUIContent("On Damaged Trigger"));
|
||||
VRCSDK2.VRC_EditorTools.DrawTriggerActionCallback("On Damaged Action", ds.onDamagedTrigger, ds.onDamagedEvent);
|
||||
|
||||
EditorGUILayout.PropertyField(onDestroyedTrigger, new GUIContent("On Destructed Trigger"));
|
||||
VRCSDK2.VRC_EditorTools.DrawTriggerActionCallback("On Destructed Action", ds.onDestructedTrigger, ds.onDestructedEvent);
|
||||
|
||||
EditorGUILayout.PropertyField(onHealedTrigger, new GUIContent("On Healed Trigger"));
|
||||
VRCSDK2.VRC_EditorTools.DrawTriggerActionCallback("On Healed Action", ds.onHealedTrigger, ds.onHealedEvent);
|
||||
|
||||
EditorGUILayout.PropertyField(onFullHealedTrigger, new GUIContent("On Full Healed Trigger"));
|
||||
VRCSDK2.VRC_EditorTools.DrawTriggerActionCallback("On Full Healed Action", ds.onFullHealedTrigger, ds.onFullHealedEvent);
|
||||
|
||||
// Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
|
||||
serializedObject.ApplyModifiedProperties ();
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3b63b118c0591b548ba1797e6be4292e
|
||||
timeCreated: 1477161996
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,19 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_ObjectSync))]
|
||||
public class VRC_ObjectSyncEditor : Editor {
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
VRCSDK2.VRC_ObjectSync c = ((VRCSDK2.VRC_ObjectSync)target);
|
||||
if ((c.gameObject.GetComponent<Animator>() != null || c.gameObject.GetComponent<Animation>() != null) && c.SynchronizePhysics)
|
||||
EditorGUILayout.HelpBox("If the Animator or Animation moves the root position of this object then it will conflict with physics synchronization.", MessageType.Warning);
|
||||
if (c.GetComponent<VRCSDK2.VRC_DataStorage>() != null && c.SynchronizePhysics)
|
||||
EditorGUILayout.HelpBox("Consider either removing the VRC_DataStorage or disabling SynchronizePhysics.", MessageType.Warning);
|
||||
DrawDefaultInspector();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e19a7147a2386554a8e4d6e414f190a2
|
||||
timeCreated: 1504908295
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,76 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
#if UNITY_EDITOR
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEditor.Build;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_Pickup))]
|
||||
public class VRC_PickupEditor : Editor
|
||||
{
|
||||
private void InspectorField(string propertyName, string humanName)
|
||||
{
|
||||
SerializedProperty propertyField = serializedObject.FindProperty(propertyName);
|
||||
EditorGUILayout.PropertyField(propertyField, new GUIContent(humanName), true);
|
||||
}
|
||||
|
||||
private SerializedProperty momentumTransferMethodProperty;
|
||||
private SerializedProperty disallowTheftProperty;
|
||||
private SerializedProperty exactGunProperty;
|
||||
private SerializedProperty exactGripProperty;
|
||||
private SerializedProperty allowManipulationWhenEquippedProperty;
|
||||
private SerializedProperty orientationProperty;
|
||||
private SerializedProperty autoHoldProperty;
|
||||
private SerializedProperty interactionTextProperty;
|
||||
private SerializedProperty useTextProperty;
|
||||
private SerializedProperty throwVelocityBoostMinSpeedProperty;
|
||||
private SerializedProperty throwVelocityBoostScaleProperty;
|
||||
private SerializedProperty pickupableProperty;
|
||||
private SerializedProperty proximityProperty;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
momentumTransferMethodProperty = serializedObject.FindProperty("MomentumTransferMethod");
|
||||
disallowTheftProperty = serializedObject.FindProperty("DisallowTheft");
|
||||
exactGunProperty = serializedObject.FindProperty("ExactGun");
|
||||
exactGripProperty = serializedObject.FindProperty("ExactGrip");
|
||||
allowManipulationWhenEquippedProperty = serializedObject.FindProperty("allowManipulationWhenEquipped");
|
||||
orientationProperty = serializedObject.FindProperty("orientation");
|
||||
autoHoldProperty = serializedObject.FindProperty("AutoHold");
|
||||
interactionTextProperty = serializedObject.FindProperty("InteractionText");
|
||||
useTextProperty = serializedObject.FindProperty("UseText");
|
||||
throwVelocityBoostMinSpeedProperty = serializedObject.FindProperty("ThrowVelocityBoostMinSpeed");
|
||||
throwVelocityBoostScaleProperty = serializedObject.FindProperty("ThrowVelocityBoostScale");
|
||||
pickupableProperty = serializedObject.FindProperty("pickupable");
|
||||
proximityProperty = serializedObject.FindProperty("proximity");
|
||||
|
||||
EditorGUILayout.BeginVertical(GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 30));
|
||||
|
||||
EditorGUILayout.PropertyField(momentumTransferMethodProperty, new GUIContent("Momentum Transfer Method"));
|
||||
EditorGUILayout.PropertyField(disallowTheftProperty, new GUIContent("Disallow Theft"));
|
||||
EditorGUILayout.PropertyField(exactGunProperty, new GUIContent("Exact Gun"));
|
||||
EditorGUILayout.PropertyField(exactGripProperty, new GUIContent("Exact Grip"));
|
||||
EditorGUILayout.PropertyField(allowManipulationWhenEquippedProperty, new GUIContent("Allow Manipulation When Equipped"));
|
||||
EditorGUILayout.PropertyField(orientationProperty, new GUIContent("Orientation"));
|
||||
EditorGUILayout.PropertyField(autoHoldProperty, new GUIContent("AutoHold", "If the pickup is supposed to be aligned to the hand (i.e. orientation field is set to Gun or Grip), auto-detect means that it will be Equipped(not dropped when they release trigger), otherwise just hold as a normal pickup."));
|
||||
EditorGUILayout.PropertyField(interactionTextProperty, new GUIContent("Interaction Text","Text displayed when user hovers over the pickup."));
|
||||
if (autoHoldProperty.enumValueIndex != (int)VRCSDK2.VRC_Pickup.AutoHoldMode.No)
|
||||
EditorGUILayout.PropertyField(useTextProperty, new GUIContent("Use Text", "Text to display describing action for clicking button, when this pickup is already being held."));
|
||||
EditorGUILayout.PropertyField(throwVelocityBoostMinSpeedProperty, new GUIContent("Throw Velocity Boost Min Speed"));
|
||||
EditorGUILayout.PropertyField(throwVelocityBoostScaleProperty, new GUIContent("Throw Velocity Boost Scale"));
|
||||
EditorGUILayout.PropertyField(pickupableProperty, new GUIContent("Pickupable"));
|
||||
EditorGUILayout.PropertyField(proximityProperty, new GUIContent("Proximity"));
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4aff4e5c0d600c845b29d7b8b7965d68
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,106 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_PlayerAudioOverride))]
|
||||
public class VRC_PlayerAudioOverrideEditor : Editor
|
||||
{
|
||||
private bool voShow = true;
|
||||
private bool voAdv = false;
|
||||
private bool avShow = true;
|
||||
private bool avAdv = false;
|
||||
private SerializedProperty prioProperty;
|
||||
private SerializedProperty globalProperty;
|
||||
private SerializedProperty regionProperty;
|
||||
private SerializedProperty voGainProperty;
|
||||
private SerializedProperty voNearProperty;
|
||||
private SerializedProperty voFarProperty;
|
||||
private SerializedProperty voRadiusProperty;
|
||||
private SerializedProperty voDisableLpProperty;
|
||||
private SerializedProperty avGainProperty;
|
||||
private SerializedProperty avNearProperty;
|
||||
private SerializedProperty avFarProperty;
|
||||
private SerializedProperty avRadiusProperty;
|
||||
private SerializedProperty avForceSpatialProperty;
|
||||
private SerializedProperty avAllowCustomProperty;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
globalProperty = serializedObject.FindProperty("global");
|
||||
regionProperty = serializedObject.FindProperty("region");
|
||||
prioProperty = serializedObject.FindProperty("regionPriority");
|
||||
|
||||
voGainProperty = serializedObject.FindProperty("VoiceGain");
|
||||
voNearProperty = serializedObject.FindProperty("VoiceNear");
|
||||
voFarProperty = serializedObject.FindProperty("VoiceFar");
|
||||
voRadiusProperty = serializedObject.FindProperty("VoiceVolumetricRadius");
|
||||
voDisableLpProperty = serializedObject.FindProperty("VoiceDisableLowpass");
|
||||
|
||||
avGainProperty = serializedObject.FindProperty("AvatarGainLimit");
|
||||
avNearProperty = serializedObject.FindProperty("AvatarNearLimit");
|
||||
avFarProperty = serializedObject.FindProperty("AvatarFarLimit");
|
||||
avRadiusProperty = serializedObject.FindProperty("AvatarVolumetricRadiusLimit");
|
||||
avForceSpatialProperty = serializedObject.FindProperty("AvatarForceSpatial");
|
||||
avAllowCustomProperty = serializedObject.FindProperty("AvatarAllowCustomCurve");
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
|
||||
var ovr = serializedObject.targetObject as VRCSDK2.VRC_PlayerAudioOverride;
|
||||
|
||||
EditorGUILayout.PropertyField(globalProperty, new GUIContent("Global"));
|
||||
if (!ovr.global)
|
||||
{
|
||||
EditorGUILayout.PropertyField(regionProperty, new GUIContent("Region"));
|
||||
EditorGUILayout.PropertyField(prioProperty, new GUIContent("Priority"));
|
||||
}
|
||||
|
||||
voShow = EditorGUILayout.Foldout(voShow, "Voice Settings");
|
||||
|
||||
if (voShow)
|
||||
{
|
||||
EditorGUILayout.PropertyField(voGainProperty, new GUIContent("Gain"));
|
||||
EditorGUILayout.PropertyField(voFarProperty, new GUIContent("Far"));
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
voAdv = EditorGUILayout.Foldout(voAdv, "Advanced Options");
|
||||
if (voAdv)
|
||||
{
|
||||
EditorGUILayout.PropertyField(voNearProperty, new GUIContent("Near"));
|
||||
EditorGUILayout.PropertyField(voRadiusProperty, new GUIContent("Volumetric Radius"));
|
||||
EditorGUILayout.PropertyField(voDisableLpProperty, new GUIContent("Disable Lowpass Filter"));
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
avShow = EditorGUILayout.Foldout(avShow, "Avatar Audio Limits");
|
||||
|
||||
if (avShow)
|
||||
{
|
||||
EditorGUILayout.PropertyField(avGainProperty, new GUIContent("Gain Limit"));
|
||||
EditorGUILayout.PropertyField(avFarProperty, new GUIContent("Far Limit"));
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
avAdv = EditorGUILayout.Foldout(avAdv, "Advanced Options");
|
||||
if (avAdv)
|
||||
{
|
||||
EditorGUILayout.PropertyField(avNearProperty, new GUIContent("Near Limit"));
|
||||
EditorGUILayout.PropertyField(avRadiusProperty, new GUIContent("Volumetric Radius Limit"));
|
||||
EditorGUILayout.PropertyField(avForceSpatialProperty, new GUIContent("Force Spatial"));
|
||||
EditorGUILayout.PropertyField(avAllowCustomProperty, new GUIContent("Allow Custom Curve"));
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5c545625e0bf93045ac1c5864141c5c1
|
||||
timeCreated: 1474315179
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,60 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
#if UNITY_EDITOR
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
namespace VRCSDK2
|
||||
{
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_SpatialAudioSource))]
|
||||
public class VRC_SpatialAudioSourceEditor : Editor
|
||||
{
|
||||
private bool showAdvancedOptions = false;
|
||||
private SerializedProperty gainProperty;
|
||||
private SerializedProperty nearProperty;
|
||||
private SerializedProperty farProperty;
|
||||
private SerializedProperty volRadiusProperty;
|
||||
private SerializedProperty enableSpatialProperty;
|
||||
private SerializedProperty useCurveProperty;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
gainProperty = serializedObject.FindProperty("Gain");
|
||||
nearProperty = serializedObject.FindProperty("Near");
|
||||
farProperty = serializedObject.FindProperty("Far");
|
||||
volRadiusProperty = serializedObject.FindProperty("VolumetricRadius");
|
||||
enableSpatialProperty = serializedObject.FindProperty("EnableSpatialization");
|
||||
useCurveProperty = serializedObject.FindProperty("UseAudioSourceVolumeCurve");
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
VRCSDK2.VRC_SpatialAudioSource target = serializedObject.targetObject as VRCSDK2.VRC_SpatialAudioSource;
|
||||
AudioSource source = target.GetComponent<AudioSource>();
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
|
||||
EditorGUILayout.PropertyField(gainProperty, new GUIContent("Gain"));
|
||||
EditorGUILayout.PropertyField(farProperty, new GUIContent("Far"));
|
||||
showAdvancedOptions = EditorGUILayout.Foldout(showAdvancedOptions, "Advanced Options");
|
||||
bool enableSp = enableSpatialProperty.boolValue;
|
||||
if (showAdvancedOptions)
|
||||
{
|
||||
EditorGUILayout.PropertyField(nearProperty, new GUIContent("Near"));
|
||||
EditorGUILayout.PropertyField(volRadiusProperty, new GUIContent("Volumetric Radius"));
|
||||
EditorGUILayout.PropertyField(enableSpatialProperty, new GUIContent("Enable Spatialization"));
|
||||
if (enableSp)
|
||||
EditorGUILayout.PropertyField(useCurveProperty, new GUIContent("Use AudioSource Volume Curve"));
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
if (source != null)
|
||||
source.spatialize = enableSp;
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0d2d4cba733f5eb4ba170368e67710d2
|
||||
timeCreated: 1474315179
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,104 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
|
||||
[CustomPropertyDrawer(typeof(VRCSDK2.VRC_SyncVideoPlayer.VideoEntry))]
|
||||
public class CustomVideoEntryDrawer : PropertyDrawer
|
||||
{
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
SerializedProperty source = property.FindPropertyRelative("Source");
|
||||
SerializedProperty ratio = property.FindPropertyRelative("AspectRatio");
|
||||
SerializedProperty speed = property.FindPropertyRelative("PlaybackSpeed");
|
||||
SerializedProperty clip = property.FindPropertyRelative("VideoClip");
|
||||
SerializedProperty url = property.FindPropertyRelative("URL");
|
||||
|
||||
return EditorGUI.GetPropertyHeight(source, new GUIContent("Source"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ EditorGUI.GetPropertyHeight(ratio, new GUIContent("Aspect Ratio"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ EditorGUI.GetPropertyHeight(speed, new GUIContent("Playback Speed"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ Mathf.Max(EditorGUI.GetPropertyHeight(clip, new GUIContent("VideoClip"), true), EditorGUI.GetPropertyHeight(url, new GUIContent("URL"), true)) + EditorGUIUtility.standardVerticalSpacing;
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
SerializedProperty source = property.FindPropertyRelative("Source");
|
||||
SerializedProperty ratio = property.FindPropertyRelative("AspectRatio");
|
||||
SerializedProperty speed = property.FindPropertyRelative("PlaybackSpeed");
|
||||
SerializedProperty clip = property.FindPropertyRelative("VideoClip");
|
||||
SerializedProperty url = property.FindPropertyRelative("URL");
|
||||
|
||||
EditorGUI.BeginProperty(rect, label, property);
|
||||
float x = rect.x;
|
||||
float y = rect.y;
|
||||
float w = rect.width;
|
||||
float h = EditorGUI.GetPropertyHeight(source, new GUIContent("Source"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
VRCSDK2.VRC_EditorTools.FilteredEnumPopup<UnityEngine.Video.VideoSource>(new Rect(x, y, w, h), source, (e) => e == UnityEngine.Video.VideoSource.Url);
|
||||
y += h;
|
||||
|
||||
if (source.enumValueIndex == (int)UnityEngine.Video.VideoSource.Url)
|
||||
{
|
||||
h = EditorGUI.GetPropertyHeight(url, new GUIContent("URL"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), url);
|
||||
y += h;
|
||||
}
|
||||
else
|
||||
{
|
||||
h = EditorGUI.GetPropertyHeight(clip, new GUIContent("VideoClip"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), clip);
|
||||
y += h;
|
||||
}
|
||||
|
||||
h = EditorGUI.GetPropertyHeight(ratio, new GUIContent("AspectRatio"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), ratio);
|
||||
y += h;
|
||||
|
||||
h = EditorGUI.GetPropertyHeight(ratio, new GUIContent("Playback Speed"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), speed);
|
||||
if (speed.floatValue == 0f)
|
||||
speed.floatValue = 1f;
|
||||
y += h;
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_SyncVideoPlayer))]
|
||||
public class SyncVideoPlayerEditor : Editor
|
||||
{
|
||||
ReorderableList sourceList;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
SerializedProperty searchRoot = serializedObject.FindProperty("VideoSearchRoot");
|
||||
EditorGUILayout.PropertyField(searchRoot);
|
||||
SerializedProperty maxQual = serializedObject.FindProperty("MaxStreamQuality");
|
||||
EditorGUILayout.PropertyField(maxQual);
|
||||
|
||||
EditorGUILayout.Space();
|
||||
|
||||
sourceList.DoLayoutList();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
SerializedProperty videos = serializedObject.FindProperty("Videos");
|
||||
sourceList = new ReorderableList(serializedObject, videos);
|
||||
sourceList.drawElementCallback += (Rect rect, int index, bool active, bool focused) =>
|
||||
{
|
||||
EditorGUI.PropertyField(rect, serializedObject.FindProperty("Videos").GetArrayElementAtIndex(index));
|
||||
};
|
||||
sourceList.elementHeightCallback += (int index) =>
|
||||
{
|
||||
SerializedProperty element = serializedObject.FindProperty("Videos").GetArrayElementAtIndex(index);
|
||||
return EditorGUI.GetPropertyHeight(element);
|
||||
};
|
||||
sourceList.drawHeaderCallback = (Rect rect) => EditorGUI.LabelField(rect, "Videos");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae0e74693b7899f47bd98864f94b9311
|
||||
timeCreated: 1499468412
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,116 @@
|
||||
#if VRC_SDK_VRCSDK2
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
|
||||
[CustomPropertyDrawer(typeof(VRCSDK2.VRC_SyncVideoStream.VideoEntry))]
|
||||
public class CustomVideoStreamEntryDrawer : PropertyDrawer
|
||||
{
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
SerializedProperty source = property.FindPropertyRelative("Source");
|
||||
SerializedProperty speed = property.FindPropertyRelative("PlaybackSpeed");
|
||||
SerializedProperty clip = property.FindPropertyRelative("VideoClip");
|
||||
SerializedProperty url = property.FindPropertyRelative("URL");
|
||||
SerializedProperty live = property.FindPropertyRelative("SyncType");
|
||||
SerializedProperty sync = property.FindPropertyRelative("SyncMinutes");
|
||||
|
||||
return EditorGUI.GetPropertyHeight(source, new GUIContent("Source"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ EditorGUI.GetPropertyHeight(speed, new GUIContent("Playback Speed"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ Mathf.Max(EditorGUI.GetPropertyHeight(clip, new GUIContent("VideoClip"), true), EditorGUI.GetPropertyHeight(url, new GUIContent("URL"), true)) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ EditorGUI.GetPropertyHeight(live, new GUIContent("SyncType"), true) + EditorGUIUtility.standardVerticalSpacing
|
||||
+ EditorGUI.GetPropertyHeight(sync, new GUIContent("SyncMinutes"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
SerializedProperty source = property.FindPropertyRelative("Source");
|
||||
SerializedProperty speed = property.FindPropertyRelative("PlaybackSpeed");
|
||||
SerializedProperty clip = property.FindPropertyRelative("VideoClip");
|
||||
SerializedProperty url = property.FindPropertyRelative("URL");
|
||||
SerializedProperty live = property.FindPropertyRelative("SyncType");
|
||||
SerializedProperty sync = property.FindPropertyRelative("SyncMinutes");
|
||||
|
||||
EditorGUI.BeginProperty(rect, label, property);
|
||||
float x = rect.x;
|
||||
float y = rect.y;
|
||||
float w = rect.width;
|
||||
float h = EditorGUI.GetPropertyHeight(source, new GUIContent("Source"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
VRCSDK2.VRC_EditorTools.FilteredEnumPopup<UnityEngine.Video.VideoSource>(new Rect(x, y, w, h), source, (e) => e == UnityEngine.Video.VideoSource.Url);
|
||||
y += h;
|
||||
|
||||
if (source.enumValueIndex == (int)UnityEngine.Video.VideoSource.Url)
|
||||
{
|
||||
h = EditorGUI.GetPropertyHeight(url, new GUIContent("URL"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), url);
|
||||
y += h;
|
||||
}
|
||||
else
|
||||
{
|
||||
h = EditorGUI.GetPropertyHeight(clip, new GUIContent("VideoClip"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), clip);
|
||||
y += h;
|
||||
}
|
||||
|
||||
h = EditorGUI.GetPropertyHeight(speed, new GUIContent("Playback Speed"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), speed);
|
||||
if (speed.floatValue == 0f)
|
||||
speed.floatValue = 1f;
|
||||
y += h;
|
||||
|
||||
h = EditorGUI.GetPropertyHeight(live, new GUIContent("SyncType"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), live);
|
||||
y += h;
|
||||
|
||||
h = EditorGUI.GetPropertyHeight(sync, new GUIContent("SyncMinutes"), true) + EditorGUIUtility.standardVerticalSpacing;
|
||||
EditorGUI.PropertyField(new Rect(x, y, w, h), sync);
|
||||
if (sync.floatValue < 1f)
|
||||
sync.floatValue = 0;
|
||||
y += h;
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(VRCSDK2.VRC_SyncVideoStream))]
|
||||
public class SyncVideoStreamEditor : Editor
|
||||
{
|
||||
ReorderableList sourceList;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
SerializedProperty searchRoot = serializedObject.FindProperty("VideoSearchRoot");
|
||||
EditorGUILayout.PropertyField(searchRoot);
|
||||
SerializedProperty maxQual = serializedObject.FindProperty("MaxStreamQuality");
|
||||
EditorGUILayout.PropertyField(maxQual);
|
||||
SerializedProperty autoStart = serializedObject.FindProperty("AutoStart");
|
||||
EditorGUILayout.PropertyField(autoStart);
|
||||
|
||||
EditorGUILayout.Space();
|
||||
|
||||
sourceList.DoLayoutList();
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
SerializedProperty videos = serializedObject.FindProperty("Videos");
|
||||
sourceList = new ReorderableList(serializedObject, videos);
|
||||
sourceList.drawElementCallback += (Rect rect, int index, bool active, bool focused) =>
|
||||
{
|
||||
EditorGUI.PropertyField(rect, serializedObject.FindProperty("Videos").GetArrayElementAtIndex(index));
|
||||
};
|
||||
sourceList.elementHeightCallback += (int index) =>
|
||||
{
|
||||
SerializedProperty element = serializedObject.FindProperty("Videos").GetArrayElementAtIndex(index);
|
||||
return EditorGUI.GetPropertyHeight(element);
|
||||
};
|
||||
sourceList.drawHeaderCallback = (Rect rect) => EditorGUI.LabelField(rect, "Videos");
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f9dccfed0b072f49a307b3f20a7e768
|
||||
timeCreated: 1528745185
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large.
Load diff
Loaded 100 of 3297 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user