diff --git a/Assets/Addons.meta b/Assets/Addons.meta new file mode 100644 index 0000000..99f0562 --- /dev/null +++ b/Assets/Addons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2da1af16170b00f40a918f0359fe65d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator.meta b/Assets/Addons/CameraPathCreator.meta new file mode 100644 index 0000000..fb86e78 --- /dev/null +++ b/Assets/Addons/CameraPathCreator.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b443fb86c669f0d4dbe6d9ac295f5fe8 +folderAsset: yes +timeCreated: 1487519906 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/DEMO.meta b/Assets/Addons/CameraPathCreator/DEMO.meta new file mode 100644 index 0000000..f9dc6de --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85dbe3e87a3e244478e9c43d2fc57fc4 +folderAsset: yes +timeCreated: 1487523732 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs b/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs new file mode 100644 index 0000000..4c6302e --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CPC_DEMO_UpDown : MonoBehaviour +{ + private Vector3 startPos; + public float height; + public float speed; + + void Start() + { + startPos = transform.position; + } + + // Update is called once per frame + void Update () + { + transform.position = startPos + Vector3.up * height * Mathf.Sin(Time.time * speed); + } +} diff --git a/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs.meta b/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs.meta new file mode 100644 index 0000000..d47f4ee --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/CPC_DEMO_UpDown.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1e3126cbbf1c85a43b396850218ecc38 +timeCreated: 1488289835 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity b/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity new file mode 100644 index 0000000..7dc3180 --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity @@ -0,0 +1,1505 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 4 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_DirectLightInLightProbes: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + accuratePlacement: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &47332220 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 47332222} + - component: {fileID: 47332221} + m_Layer: 0 + m_Name: Path + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &47332221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 47332220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2edac0b6f5e12204bbc4b9f4391db7ec, type: 3} + m_Name: + m_EditorClassIdentifier: + useMainCamera: 1 + selectedCamera: {fileID: 0} + lookAtTarget: 1 + target: {fileID: 467876390} + playOnAwake: 1 + playOnAwakeTime: 20 + points: + - position: {x: 8.6006365, y: 4.0815315, z: 11.890832} + rotation: {x: 0.011345158, y: -0.960911, z: 0.03982798, w: 0.27374297} + handleprev: {x: 0.40907288, y: -0, z: 5.7757864} + handlenext: {x: -0.40907288, y: 0, z: -5.7757864} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: -1.0868638, y: 3.1280422, z: -10.750435} + rotation: {x: 0.036598578, y: -0.52158326, z: 0.022403074, w: 0.8521207} + handleprev: {x: 6.4742994, y: -0, z: 4.033576} + handlenext: {x: -6.4742994, y: 0, z: -4.033576} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: -20.778866, y: 2.390653, z: -4.567561} + rotation: {x: 0.010780818, y: 0.3308536, z: -0.0037790318, w: 0.943613} + handleprev: {x: 0.44895935, y: -1.1033096, z: -5.799323} + handlenext: {x: -0.44895935, y: 1.1033096, z: 5.799323} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: -4.980856, y: 7.3673797, z: 12.192657} + rotation: {x: 0.07524117, y: 0.8633961, z: -0.13528338, w: 0.48019207} + handleprev: {x: -5.559801, y: 0, z: 0.029015541} + handlenext: {x: 5.559801, y: -0, z: -0.029015541} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: 16.389738, y: 3.2838373, z: 6.0831747} + rotation: {x: -0.020217849, y: 0.9685509, z: -0.08391576, w: -0.23336363} + handleprev: {x: -4.0812035, y: 0.8790326, z: 5.007968} + handlenext: {x: 4.0812035, y: -0.8790326, z: -5.007968} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: 19.569214, y: 2.2610433, z: -17.727482} + rotation: {x: -0.017019652, y: 0.43701252, z: -0.008272078, w: -0.8992564} + handleprev: {x: 7.2626514, y: -0, z: 6.170559} + handlenext: {x: -7.2626514, y: 0, z: -6.170559} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: -3.579837, y: 1.9228485, z: -8.262179} + rotation: {x: 0.0020716635, y: 0.060824096, z: 0.00012531984, w: -0.99814636} + handleprev: {x: 2.2312834, y: -0, z: -3.4213858} + handlenext: {x: -2.2312834, y: 0, z: 3.4213858} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: -6.9744334, y: 1.889559, z: 18.205463} + rotation: {x: 0.010156039, y: -0.92068666, z: -0.024013117, w: -0.38943073} + handleprev: {x: -6.825821, y: -0, z: -4.345196} + handlenext: {x: 6.825821, y: 0, z: 4.345196} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.4573728 + outSlope: 0.4573728 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0.43870634 + outSlope: 0.43870634 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + visual: + pathColor: {r: 0, g: 1, b: 0, a: 1} + inactivePathColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + frustrumColor: {r: 1, g: 1, b: 1, a: 1} + handleColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + looped: 1 + alwaysShow: 1 + afterLoop: 0 +--- !u!4 &47332222 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 47332220} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &151283900 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 151283901} + - component: {fileID: 151283904} + - component: {fileID: 151283903} + - component: {fileID: 151283902} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &151283901 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 151283900} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.521, y: 0.398, z: -2.422} + m_LocalScale: {x: 0.9999994, y: 3.5274396, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &151283902 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 151283900} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &151283903 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 151283900} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &151283904 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 151283900} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &467876385 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 467876390} + - component: {fileID: 467876389} + - component: {fileID: 467876388} + - component: {fileID: 467876387} + - component: {fileID: 467876386} + m_Layer: 0 + m_Name: HoveringBall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &467876386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 467876385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1e3126cbbf1c85a43b396850218ecc38, type: 3} + m_Name: + m_EditorClassIdentifier: + height: 3 + speed: 3 +--- !u!23 &467876387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 467876385} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!135 &467876388 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 467876385} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &467876389 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 467876385} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &467876390 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 467876385} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &522747740 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 522747741} + - component: {fileID: 522747744} + - component: {fileID: 522747743} + - component: {fileID: 522747742} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &522747741 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 522747740} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.574, y: 0.398, z: 2.47} + m_LocalScale: {x: 0.9999994, y: 1.447509, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &522747742 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 522747740} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &522747743 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 522747740} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &522747744 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 522747740} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &523135162 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 523135163} + - component: {fileID: 523135166} + - component: {fileID: 523135165} + - component: {fileID: 523135164} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &523135163 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 523135162} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.057, y: 0.398, z: -1.4099998} + m_LocalScale: {x: 0.9999994, y: 1.8124002, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &523135164 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 523135162} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &523135165 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 523135162} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &523135166 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 523135162} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &564324142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 564324143} + - component: {fileID: 564324146} + - component: {fileID: 564324145} + - component: {fileID: 564324144} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &564324143 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 564324142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.783, y: 1.178, z: -2.4} + m_LocalScale: {x: 6.0806265, y: 0.28011185, z: 0.999137} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &564324144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 564324142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &564324145 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 564324142} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &564324146 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 564324142} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &608591708 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 608591709} + - component: {fileID: 608591712} + - component: {fileID: 608591711} + - component: {fileID: 608591710} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &608591709 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608591708} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.913, y: 0.398, z: -2.747} + m_LocalScale: {x: 0.9999994, y: 2.2268276, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &608591710 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608591708} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &608591711 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608591708} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &608591712 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608591708} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &688091427 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 688091428} + - component: {fileID: 688091431} + - component: {fileID: 688091430} + - component: {fileID: 688091429} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &688091428 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 688091427} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.07, y: 0.398, z: 0.059999995} + m_LocalScale: {x: 0.9999994, y: 1.4374995, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &688091429 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 688091427} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &688091430 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 688091427} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &688091431 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 688091427} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &756064243 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 756064244} + - component: {fileID: 756064247} + - component: {fileID: 756064246} + - component: {fileID: 756064245} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &756064244 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 756064243} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.73, y: -0.15, z: 2.47} + m_LocalScale: {x: 1, y: 0.5970863, z: 1} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &756064245 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 756064243} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &756064246 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 756064243} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &756064247 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 756064243} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1082601184 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1082601186} + - component: {fileID: 1082601185} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1082601185 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1082601184} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1082601186 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1082601184} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1092049235 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1092049236} + - component: {fileID: 1092049239} + - component: {fileID: 1092049238} + - component: {fileID: 1092049237} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1092049236 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1092049235} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 25.658596, y: 25.6586, z: 25.6586} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1092049237 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1092049235} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &1092049238 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1092049235} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1092049239 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1092049235} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1549360252 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1549360253} + - component: {fileID: 1549360256} + - component: {fileID: 1549360255} + - component: {fileID: 1549360254} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1549360253 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1549360252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.6999998, y: 0.398, z: 2.6799998} + m_LocalScale: {x: 0.9999994, y: 1.6774973, z: 0.99999946} + m_Children: [] + m_Father: {fileID: 1587896670} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1549360254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1549360252} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 0ea5607332fc4854090854d440fd52b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &1549360255 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1549360252} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1549360256 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1549360252} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1587896669 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1587896670} + m_Layer: 0 + m_Name: Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1587896670 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1587896669} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 4.792123, y: 4.7921224, z: 4.7921224} + m_Children: + - {fileID: 1092049236} + - {fileID: 756064244} + - {fileID: 522747741} + - {fileID: 151283901} + - {fileID: 523135163} + - {fileID: 688091428} + - {fileID: 1549360253} + - {fileID: 608591709} + - {fileID: 564324143} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1782926063 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1782926068} + - component: {fileID: 1782926064} + - component: {fileID: 1782926067} + - component: {fileID: 1782926066} + - component: {fileID: 1782926065} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1782926064 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782926063} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!81 &1782926065 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782926063} + m_Enabled: 1 +--- !u!124 &1782926066 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782926063} + m_Enabled: 1 +--- !u!92 &1782926067 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782926063} + m_Enabled: 1 +--- !u!4 &1782926068 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782926063} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity.meta b/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity.meta new file mode 100644 index 0000000..4bdfaa3 --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/CPC_Demo.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad172255fbbbbfe4e82fa992a4667fcb +timeCreated: 1494443288 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/DEMO/Mat.mat b/Assets/Addons/CameraPathCreator/DEMO/Mat.mat new file mode 100644 index 0000000..a547d80 --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/Mat.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Mat + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0.313 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 0.37710854, g: 0.56959856, b: 0.6838235, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Addons/CameraPathCreator/DEMO/Mat.mat.meta b/Assets/Addons/CameraPathCreator/DEMO/Mat.mat.meta new file mode 100644 index 0000000..a4ee20c --- /dev/null +++ b/Assets/Addons/CameraPathCreator/DEMO/Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ea5607332fc4854090854d440fd52b5 +timeCreated: 1487640447 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/Scripts.meta b/Assets/Addons/CameraPathCreator/Scripts.meta new file mode 100644 index 0000000..2e6bd3a --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2412056fa1cf84b49aaa9e628d5d79f9 +folderAsset: yes +timeCreated: 1487519926 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs b/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs new file mode 100644 index 0000000..e9b599a --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs @@ -0,0 +1,319 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[System.Serializable] +public class CPC_Visual +{ + public Color pathColor = Color.green; + public Color inactivePathColor = Color.gray; + public Color frustrumColor = Color.white; + public Color handleColor = Color.yellow; +} + +public enum CPC_ECurveType +{ + EaseInAndOut, + Linear, + Custom +} + +public enum CPC_EAfterLoop +{ + Continue, + Stop +} + +[System.Serializable] +public class CPC_Point +{ + + public Vector3 position; + public Quaternion rotation; + public Vector3 handleprev; + public Vector3 handlenext; + public CPC_ECurveType curveTypeRotation; + public AnimationCurve rotationCurve; + public CPC_ECurveType curveTypePosition; + public AnimationCurve positionCurve; + public bool chained; + + public CPC_Point(Vector3 pos, Quaternion rot) + { + position = pos; + rotation = rot; + handleprev = Vector3.back; + handlenext = Vector3.forward; + curveTypeRotation = CPC_ECurveType.EaseInAndOut; + rotationCurve = AnimationCurve.EaseInOut(0,0,1,1); + curveTypePosition = CPC_ECurveType.Linear; + positionCurve = AnimationCurve.Linear(0,0,1,1); + chained = true; + } +} + +public class CPC_CameraPath : MonoBehaviour +{ + + public bool useMainCamera = true; + public Camera selectedCamera; + public bool lookAtTarget = false; + public Transform target; + public bool playOnAwake = false; + public float playOnAwakeTime = 10; + public List points = new List(); + public CPC_Visual visual; + public bool looped = false; + public bool alwaysShow = true; + public CPC_EAfterLoop afterLoop = CPC_EAfterLoop.Continue; + + private int currentWaypointIndex; + private float currentTimeInWaypoint; + private float timePerSegment; + + private bool paused = false; + private bool playing = false; + + void Start () + { + + if (Camera.main == null) { Debug.LogError("There is no main camera in the scene!"); } + if (useMainCamera) + selectedCamera = Camera.main; + else if (selectedCamera == null) + { + selectedCamera = Camera.main; + Debug.LogError("No camera selected for following path, defaulting to main camera"); + } + + if (lookAtTarget && target == null) + { + lookAtTarget = false; + Debug.LogError("No target selected to look at, defaulting to normal rotation"); + } + + foreach (var index in points) + { + if (index.curveTypeRotation == CPC_ECurveType.EaseInAndOut) index.rotationCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); + if (index.curveTypeRotation == CPC_ECurveType.Linear) index.rotationCurve = AnimationCurve.Linear(0, 0, 1, 1); + if (index.curveTypePosition == CPC_ECurveType.EaseInAndOut) index.positionCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); + if (index.curveTypePosition == CPC_ECurveType.Linear) index.positionCurve = AnimationCurve.Linear(0, 0, 1, 1); + } + + if (playOnAwake) + PlayPath(playOnAwakeTime); + } + + /// + /// Plays the path + /// + /// The time in seconds how long the camera takes for the entire path + public void PlayPath(float time) + { + if (time <= 0) time = 0.001f; + paused = false; + playing = true; + StopAllCoroutines(); + StartCoroutine(FollowPath(time)); + } + + /// + /// Stops the path + /// + public void StopPath() + { + playing = false; + paused = false; + StopAllCoroutines(); + } + + /// + /// Allows to change the time variable specified in PlayPath(float time) on the fly + /// + /// New time in seconds for entire path + public void UpdateTimeInSeconds(float seconds) + { + timePerSegment = seconds / ((looped) ? points.Count : points.Count - 1); + } + + /// + /// Pauses the camera's movement - resumable with ResumePath() + /// + public void PausePath() + { + paused = true; + playing = false; + } + + /// + /// Can be called after PausePath() to resume + /// + public void ResumePath() + { + if (paused) + playing = true; + paused = false; + } + + /// + /// Gets if the path is paused + /// + /// Returns paused state + public bool IsPaused() + { + return paused; + } + + /// + /// Gets if the path is playing + /// + /// Returns playing state + public bool IsPlaying() + { + return playing; + } + + /// + /// Gets the index of the current waypoint + /// + /// Returns waypoint index + public int GetCurrentWayPoint() + { + return currentWaypointIndex; + } + + /// + /// Gets the time within the current waypoint (Range is 0-1) + /// + /// Returns time of current waypoint (Range is 0-1) + public float GetCurrentTimeInWaypoint() + { + return currentTimeInWaypoint; + } + + /// + /// Sets the current waypoint index of the path + /// + /// Waypoint index + public void SetCurrentWayPoint(int value) + { + currentWaypointIndex = value; + } + + /// + /// Sets the time in the current waypoint + /// + /// Waypoint time (Range is 0-1) + public void SetCurrentTimeInWaypoint(float value) + { + currentTimeInWaypoint = value; + } + + /// + /// When index/time are set while the path is not playing, this method will teleport the camera to the position/rotation specified + /// + public void RefreshTransform() + { + selectedCamera.transform.position = GetBezierPosition(currentWaypointIndex, currentTimeInWaypoint); + if (!lookAtTarget) + selectedCamera.transform.rotation = GetLerpRotation(currentWaypointIndex, currentTimeInWaypoint); + else + selectedCamera.transform.rotation = Quaternion.LookRotation((target.transform.position - selectedCamera.transform.position).normalized); + } + + IEnumerator FollowPath(float time) + { + UpdateTimeInSeconds(time); + currentWaypointIndex = 0; + while (currentWaypointIndex < points.Count) + { + currentTimeInWaypoint = 0; + while (currentTimeInWaypoint < 1) + { + if (!paused) + { + currentTimeInWaypoint += Time.deltaTime / timePerSegment; + selectedCamera.transform.position = GetBezierPosition(currentWaypointIndex, currentTimeInWaypoint); + if (!lookAtTarget) + selectedCamera.transform.rotation = GetLerpRotation(currentWaypointIndex, currentTimeInWaypoint); + else + selectedCamera.transform.rotation = Quaternion.LookRotation((target.transform.position - selectedCamera.transform.position).normalized); + } + yield return 0; + } + ++currentWaypointIndex; + if (currentWaypointIndex == points.Count - 1 && !looped) break; + if (currentWaypointIndex == points.Count && afterLoop == CPC_EAfterLoop.Continue) currentWaypointIndex = 0; + } + StopPath(); + } + + int GetNextIndex(int index) + { + if (index == points.Count-1) + return 0; + return index + 1; + } + + Vector3 GetBezierPosition(int pointIndex, float time) + { + float t = points[pointIndex].positionCurve.Evaluate(time); + int nextIndex = GetNextIndex(pointIndex); + return + Vector3.Lerp( + Vector3.Lerp( + Vector3.Lerp(points[pointIndex].position, + points[pointIndex].position + points[pointIndex].handlenext, t), + Vector3.Lerp(points[pointIndex].position + points[pointIndex].handlenext, + points[nextIndex].position + points[nextIndex].handleprev, t), t), + Vector3.Lerp( + Vector3.Lerp(points[pointIndex].position + points[pointIndex].handlenext, + points[nextIndex].position + points[nextIndex].handleprev, t), + Vector3.Lerp(points[nextIndex].position + points[nextIndex].handleprev, + points[nextIndex].position, t), t), t); + } + + private Quaternion GetLerpRotation(int pointIndex, float time) + { + return Quaternion.LerpUnclamped(points[pointIndex].rotation, points[GetNextIndex(pointIndex)].rotation, points[pointIndex].rotationCurve.Evaluate(time)); + } + +#if UNITY_EDITOR + public void OnDrawGizmos() + { + if (UnityEditor.Selection.activeGameObject == gameObject || alwaysShow) + { + if (points.Count >= 2) + { + for (int i = 0; i < points.Count; i++) + { + if (i < points.Count - 1) + { + var index = points[i]; + var indexNext = points[i + 1]; + UnityEditor.Handles.DrawBezier(index.position, indexNext.position, index.position + index.handlenext, + indexNext.position + indexNext.handleprev,((UnityEditor.Selection.activeGameObject == gameObject) ? visual.pathColor : visual.inactivePathColor), null, 5); + } + else if (looped) + { + var index = points[i]; + var indexNext = points[0]; + UnityEditor.Handles.DrawBezier(index.position, indexNext.position, index.position + index.handlenext, + indexNext.position + indexNext.handleprev, ((UnityEditor.Selection.activeGameObject == gameObject) ? visual.pathColor : visual.inactivePathColor), null, 5); + } + } + } + + for (int i = 0; i < points.Count; i++) + { + var index = points[i]; + Gizmos.matrix = Matrix4x4.TRS(index.position, index.rotation, Vector3.one); + Gizmos.color = visual.frustrumColor; + Gizmos.DrawFrustum(Vector3.zero, 90f, 0.25f, 0.01f, 1.78f); + Gizmos.matrix = Matrix4x4.identity; + } + } + } +#endif + +} diff --git a/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs.meta b/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs.meta new file mode 100644 index 0000000..808ce3f --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts/CPC_CameraPath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2edac0b6f5e12204bbc4b9f4391db7ec +timeCreated: 1487519992 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/Scripts/Editor.meta b/Assets/Addons/CameraPathCreator/Scripts/Editor.meta new file mode 100644 index 0000000..6b4ea87 --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f91ec2ef85c19da4b81f5e4f92a078ae +folderAsset: yes +timeCreated: 1487520902 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs b/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs new file mode 100644 index 0000000..f7e321d --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs @@ -0,0 +1,761 @@ +using System; +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; + +public enum CPC_EManipulationModes +{ + Free, + SelectAndTransform +} + +public enum CPC_ENewWaypointMode +{ + SceneCamera, + LastWaypoint, + WaypointIndex, + WorldCenter +} + +[CustomEditor(typeof(CPC_CameraPath))] +public class CPC_CameraPathInspector : Editor +{ + private CPC_CameraPath t; + private ReorderableList pointReorderableList; + + //Editor variables + private bool visualFoldout; + private bool manipulationFoldout; + private bool showRawValues; + private float time; + private CPC_EManipulationModes cameraTranslateMode; + private CPC_EManipulationModes cameraRotationMode; + private CPC_EManipulationModes handlePositionMode; + private CPC_ENewWaypointMode waypointMode; + private int waypointIndex = 1; + private CPC_ECurveType allCurveType = CPC_ECurveType.Custom; + private AnimationCurve allAnimationCurve = AnimationCurve.EaseInOut(0,0,1,1); + + //GUIContents + private GUIContent addPointContent = new GUIContent("Add Point", "Adds a waypoint at the scene view camera's position/rotation"); + private GUIContent testButtonContent = new GUIContent("Test", "Only available in play mode"); + private GUIContent pauseButtonContent = new GUIContent("Pause", "Paused Camera at current Position"); + private GUIContent continueButtonContent = new GUIContent("Continue", "Continues Path at current position"); + private GUIContent stopButtonContent = new GUIContent("Stop", "Stops the playback"); + private GUIContent deletePointContent = new GUIContent("X", "Deletes this waypoint"); + private GUIContent gotoPointContent = new GUIContent("Goto", "Teleports the scene camera to the specified waypoint"); + private GUIContent relocateContent = new GUIContent("Relocate", "Relocates the specified camera to the current view camera's position/rotation"); + private GUIContent alwaysShowContent = new GUIContent("Always show", "When true, shows the curve even when the GameObject is not selected - \"Inactive cath color\" will be used as path color instead"); + private GUIContent chainedContent = new GUIContent("o───o", "Toggles if the handles of the specified waypoint should be chained (mirrored) or not"); + private GUIContent unchainedContent = new GUIContent("o─x─o", "Toggles if the handles of the specified waypoint should be chained (mirrored) or not"); + private GUIContent replaceAllPositionContent = new GUIContent("Replace all position lerps", "Replaces curve types (and curves when set to \"Custom\") of all the waypoint position lerp types with the specified values"); + private GUIContent replaceAllRotationContent = new GUIContent("Replace all rotation lerps", "Replaces curve types (and curves when set to \"Custom\") of all the waypoint rotation lerp types with the specified values"); + + //Serialized Properties + private SerializedObject serializedObjectTarget; + private SerializedProperty useMainCameraProperty; + private SerializedProperty selectedCameraProperty; + private SerializedProperty lookAtTargetProperty; + private SerializedProperty lookAtTargetTransformProperty; + private SerializedProperty playOnAwakeProperty; + private SerializedProperty playOnAwakeTimeProperty; + private SerializedProperty visualPathProperty; + private SerializedProperty visualInactivePathProperty; + private SerializedProperty visualFrustumProperty; + private SerializedProperty visualHandleProperty; + private SerializedProperty loopedProperty; + private SerializedProperty alwaysShowProperty; + private SerializedProperty afterLoopProperty; + + private int selectedIndex = -1; + + private float currentTime; + private float previousTime; + + private bool hasScrollBar = false; + + void OnEnable() + { + EditorApplication.update += Update; + + t = (CPC_CameraPath) target; + if (t == null) return; + + SetupEditorVariables(); + GetVariableProperties(); + SetupReorderableList(); + } + + void OnDisable() + { + EditorApplication.update -= Update; + } + + void Update() + { + if (t == null) return; + currentTime = t.GetCurrentWayPoint() + t.GetCurrentTimeInWaypoint(); + if (Math.Abs(currentTime - previousTime) > 0.0001f) + { + Repaint(); + previousTime = currentTime; + } + } + + public override void OnInspectorGUI() + { + serializedObjectTarget.Update(); + DrawPlaybackWindow(); + Rect scale = GUILayoutUtility.GetLastRect(); + hasScrollBar = (Screen.width - scale.width <= 12); + GUILayout.Space(5); + GUILayout.Box("", GUILayout.Width(Screen.width - 20), GUILayout.Height(3)); + GUILayout.Space(5); + DrawBasicSettings(); + GUILayout.Space(5); + GUILayout.Box("", GUILayout.Width(Screen.width-20), GUILayout.Height(3)); + DrawVisualDropdown(); + GUILayout.Box("", GUILayout.Width(Screen.width - 20), GUILayout.Height(3)); + DrawManipulationDropdown(); + GUILayout.Box("", GUILayout.Width(Screen.width - 20), GUILayout.Height(3)); + GUILayout.Space(10); + DrawWaypointList(); + GUILayout.Space(10); + DrawRawValues(); + serializedObjectTarget.ApplyModifiedProperties(); + } + + void OnSceneGUI() + { + if (t.points.Count >= 2) + { + for (int i = 0; i < t.points.Count; i++) + { + DrawHandles(i); + Handles.color = Color.white; + } + } + } + + void SelectIndex(int index) + { + selectedIndex = index; + pointReorderableList.index = index; + Repaint(); + } + + void SetupEditorVariables() + { + cameraTranslateMode = (CPC_EManipulationModes)PlayerPrefs.GetInt("CPC_cameraTranslateMode", 1); + cameraRotationMode = (CPC_EManipulationModes)PlayerPrefs.GetInt("CPC_cameraRotationMode", 1); + handlePositionMode = (CPC_EManipulationModes)PlayerPrefs.GetInt("CPC_handlePositionMode", 0); + waypointMode = (CPC_ENewWaypointMode) PlayerPrefs.GetInt("CPC_waypointMode", 0); + time = PlayerPrefs.GetFloat("CPC_time", 10); + } + + void GetVariableProperties() + { + serializedObjectTarget = new SerializedObject(t); + useMainCameraProperty = serializedObjectTarget.FindProperty("useMainCamera"); + selectedCameraProperty = serializedObjectTarget.FindProperty("selectedCamera"); + lookAtTargetProperty = serializedObjectTarget.FindProperty("lookAtTarget"); + lookAtTargetTransformProperty = serializedObjectTarget.FindProperty("target"); + visualPathProperty = serializedObjectTarget.FindProperty("visual.pathColor"); + visualInactivePathProperty = serializedObjectTarget.FindProperty("visual.inactivePathColor"); + visualFrustumProperty = serializedObjectTarget.FindProperty("visual.frustrumColor"); + visualHandleProperty = serializedObjectTarget.FindProperty("visual.handleColor"); + loopedProperty = serializedObjectTarget.FindProperty("looped"); + alwaysShowProperty = serializedObjectTarget.FindProperty("alwaysShow"); + afterLoopProperty = serializedObjectTarget.FindProperty("afterLoop"); + playOnAwakeProperty = serializedObjectTarget.FindProperty("playOnAwake"); + playOnAwakeTimeProperty = serializedObjectTarget.FindProperty("playOnAwakeTime"); + } + + void SetupReorderableList() + { + pointReorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("points"), true, true, false, false); + + pointReorderableList.elementHeight *= 2; + + pointReorderableList.drawElementCallback = (rect, index, active, focused) => + { + float startRectY = rect.y; + if (index > t.points.Count - 1) return; + rect.height -= 2; + float fullWidth = rect.width - 16 * (hasScrollBar ? 1 : 0); + rect.width = 40; + fullWidth -= 40; + rect.height /= 2; + GUI.Label(rect, "#" + (index + 1)); + rect.y += rect.height-3; + rect.x -= 14; + rect.width += 12; + if (GUI.Button(rect, t.points[index].chained ? chainedContent : unchainedContent)) + { + Undo.RecordObject(t, "Changed chain type"); + t.points[index].chained = !t.points[index].chained; + } + rect.x += rect.width+2; + rect.y = startRectY; + //Position + rect.width = (fullWidth - 22) / 3 - 1; + EditorGUI.BeginChangeCheck(); + CPC_ECurveType tempP = (CPC_ECurveType)EditorGUI.EnumPopup(rect, t.points[index].curveTypePosition); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Changed enum value"); + t.points[index].curveTypePosition = tempP; + } + rect.y += pointReorderableList.elementHeight / 2 - 4; + //rect.x += rect.width + 2; + EditorGUI.BeginChangeCheck(); + GUI.enabled = t.points[index].curveTypePosition == CPC_ECurveType.Custom; + AnimationCurve tempACP = EditorGUI.CurveField(rect, t.points[index].positionCurve); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Changed curve"); + t.points[index].positionCurve = tempACP; + } + GUI.enabled = true; + rect.x += rect.width + 2; + rect.y = startRectY; + + //Rotation + + rect.width = (fullWidth - 22) / 3 - 1; + EditorGUI.BeginChangeCheck(); + CPC_ECurveType temp = (CPC_ECurveType)EditorGUI.EnumPopup(rect, t.points[index].curveTypeRotation); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Changed enum value"); + t.points[index].curveTypeRotation = temp; + } + rect.y += pointReorderableList.elementHeight / 2 - 4; + //rect.height /= 2; + //rect.x += rect.width + 2; + EditorGUI.BeginChangeCheck(); + GUI.enabled = t.points[index].curveTypeRotation == CPC_ECurveType.Custom; + AnimationCurve tempAC = EditorGUI.CurveField(rect, t.points[index].rotationCurve); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Changed curve"); + t.points[index].rotationCurve = tempAC; + } + GUI.enabled = true; + + rect.y = startRectY; + rect.height *= 2; + rect.x += rect.width + 2; + rect.width = (fullWidth - 22) / 3; + rect.height = rect.height / 2 - 1; + if (GUI.Button(rect, gotoPointContent)) + { + pointReorderableList.index = index; + selectedIndex = index; + SceneView.lastActiveSceneView.pivot = t.points[pointReorderableList.index].position; + SceneView.lastActiveSceneView.size = 3; + SceneView.lastActiveSceneView.Repaint(); + } + rect.y += rect.height + 2; + if (GUI.Button(rect, relocateContent)) + { + Undo.RecordObject(t, "Relocated waypoint"); + pointReorderableList.index = index; + selectedIndex = index; + t.points[pointReorderableList.index].position = SceneView.lastActiveSceneView.camera.transform.position; + t.points[pointReorderableList.index].rotation = SceneView.lastActiveSceneView.camera.transform.rotation; + SceneView.lastActiveSceneView.Repaint(); + } + rect.height = (rect.height + 1) * 2; + rect.y = startRectY; + rect.x += rect.width + 2; + rect.width = 20; + + if (GUI.Button(rect, deletePointContent)) + { + Undo.RecordObject(t, "Deleted a waypoint"); + t.points.Remove(t.points[index]); + SceneView.RepaintAll(); + } + }; + + pointReorderableList.drawHeaderCallback = rect => + { + float fullWidth = rect.width; + rect.width = 56; + GUI.Label(rect, "Sum: " + t.points.Count); + rect.x += rect.width; + rect.width = (fullWidth - 78) / 3; + GUI.Label(rect, "Position Lerp"); + rect.x += rect.width; + GUI.Label(rect, "Rotation Lerp"); + //rect.x += rect.width*2; + //GUI.Label(rect, "Del."); + }; + + pointReorderableList.onSelectCallback = l => + { + selectedIndex = l.index; + SceneView.RepaintAll(); + }; + } + + void DrawPlaybackWindow() + { + GUI.enabled = Application.isPlaying; + GUILayout.BeginVertical("Box"); + GUILayout.BeginHorizontal(); + if (GUILayout.Button(testButtonContent)) + { + t.PlayPath(time); + } + + if (!t.IsPaused()) + { + if (Application.isPlaying && !t.IsPlaying()) GUI.enabled = false; + if (GUILayout.Button(pauseButtonContent)) + { + t.PausePath(); + } + } + else if (GUILayout.Button(continueButtonContent)) + { + t.ResumePath(); + } + + if (GUILayout.Button(stopButtonContent)) + { + t.StopPath(); + } + GUI.enabled = true; + EditorGUI.BeginChangeCheck(); + GUILayout.Label("Time (seconds)"); + time = EditorGUILayout.FloatField("", time, GUILayout.MinWidth(5), GUILayout.MaxWidth(50)); + if (EditorGUI.EndChangeCheck()) + { + time = Mathf.Clamp(time, 0.001f, Mathf.Infinity); + t.UpdateTimeInSeconds(time); + PlayerPrefs.SetFloat("CPC_time", time); + } + GUILayout.EndHorizontal(); + GUI.enabled = Application.isPlaying; + EditorGUI.BeginChangeCheck(); + currentTime = EditorGUILayout.Slider(currentTime, 0, t.points.Count - ((t.looped) ? 0.01f : 1.01f)); + if (EditorGUI.EndChangeCheck()) + { + t.SetCurrentWayPoint(Mathf.FloorToInt(currentTime)); + t.SetCurrentTimeInWaypoint(currentTime % 1); + t.RefreshTransform(); + } + GUI.enabled = false; + Rect rr = GUILayoutUtility.GetRect(4, 8); + float endWidth = rr.width - 60; + rr.y -= 4; + rr.width = 4; + int c = t.points.Count + ((t.looped) ? 1 : 0); + for (int i = 0; i < c; ++i) + { + GUI.Box(rr, ""); + rr.x += endWidth / (c - 1); + } + GUILayout.EndVertical(); + GUI.enabled = true; + } + + void DrawBasicSettings() + { + GUILayout.BeginHorizontal(); + useMainCameraProperty.boolValue = GUILayout.Toggle(useMainCameraProperty.boolValue, "Use main camera", GUILayout.Width(Screen.width / 3f)); + GUI.enabled = !useMainCameraProperty.boolValue; + selectedCameraProperty.objectReferenceValue = (Camera)EditorGUILayout.ObjectField(selectedCameraProperty.objectReferenceValue, typeof(Camera), true); + GUI.enabled = true; + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + lookAtTargetProperty.boolValue = GUILayout.Toggle(lookAtTargetProperty.boolValue, "Look at target", GUILayout.Width(Screen.width / 3f)); + GUI.enabled = lookAtTargetProperty.boolValue; + lookAtTargetTransformProperty.objectReferenceValue = (Transform)EditorGUILayout.ObjectField(lookAtTargetTransformProperty.objectReferenceValue, typeof(Transform), true); + GUI.enabled = true; + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + loopedProperty.boolValue = GUILayout.Toggle(loopedProperty.boolValue, "Looped", GUILayout.Width(Screen.width/3f)); + GUI.enabled = loopedProperty.boolValue; + GUILayout.Label("After loop:", GUILayout.Width(Screen.width / 4f)); + afterLoopProperty.enumValueIndex = Convert.ToInt32(EditorGUILayout.EnumPopup((CPC_EAfterLoop)afterLoopProperty.intValue)); + GUI.enabled = true; + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + playOnAwakeProperty.boolValue = GUILayout.Toggle(playOnAwakeProperty.boolValue, "Play on awake", GUILayout.Width(Screen.width / 3f)); + GUI.enabled = playOnAwakeProperty.boolValue; + GUILayout.Label("Time: ", GUILayout.Width(Screen.width / 4f)); + playOnAwakeTimeProperty.floatValue = EditorGUILayout.FloatField(playOnAwakeTimeProperty.floatValue); + GUI.enabled = true; + GUILayout.EndHorizontal(); + } + + void DrawVisualDropdown() + { + EditorGUI.BeginChangeCheck(); + GUILayout.BeginHorizontal(); + visualFoldout = EditorGUILayout.Foldout(visualFoldout, "Visual"); + alwaysShowProperty.boolValue = GUILayout.Toggle(alwaysShowProperty.boolValue, alwaysShowContent); + GUILayout.EndHorizontal(); + if (visualFoldout) + { + GUILayout.BeginVertical("Box"); + visualPathProperty.colorValue = EditorGUILayout.ColorField("Path color", visualPathProperty.colorValue); + visualInactivePathProperty.colorValue = EditorGUILayout.ColorField("Inactive path color", visualInactivePathProperty.colorValue); + visualFrustumProperty.colorValue = EditorGUILayout.ColorField("Frustum color", visualFrustumProperty.colorValue); + visualHandleProperty.colorValue = EditorGUILayout.ColorField("Handle color", visualHandleProperty.colorValue); + if (GUILayout.Button("Default colors")) + { + Undo.RecordObject(t, "Reset to default color values"); + t.visual = new CPC_Visual(); + } + GUILayout.EndVertical(); + } + if (EditorGUI.EndChangeCheck()) + { + SceneView.RepaintAll(); + } + } + + void DrawManipulationDropdown() + { + manipulationFoldout = EditorGUILayout.Foldout(manipulationFoldout, "Transform manipulation modes"); + EditorGUI.BeginChangeCheck(); + if (manipulationFoldout) + { + GUILayout.BeginVertical("Box"); + cameraTranslateMode = (CPC_EManipulationModes)EditorGUILayout.EnumPopup("Waypoint Translation", cameraTranslateMode); + cameraRotationMode = (CPC_EManipulationModes)EditorGUILayout.EnumPopup("Waypoint Rotation", cameraRotationMode); + handlePositionMode = (CPC_EManipulationModes)EditorGUILayout.EnumPopup("Handle Translation", handlePositionMode); + GUILayout.EndVertical(); + } + if (EditorGUI.EndChangeCheck()) + { + PlayerPrefs.SetInt("CPC_cameraTranslateMode", (int)cameraTranslateMode); + PlayerPrefs.SetInt("CPC_cameraRotationMode", (int)cameraRotationMode); + PlayerPrefs.SetInt("CPC_handlePositionMode", (int)handlePositionMode); + SceneView.RepaintAll(); + } + } + + void DrawWaypointList() + { + GUILayout.Label("Replace all lerp types"); + GUILayout.BeginVertical("Box"); + GUILayout.BeginHorizontal(); + allCurveType = (CPC_ECurveType)EditorGUILayout.EnumPopup(allCurveType, GUILayout.Width(Screen.width / 3f)); + if (GUILayout.Button(replaceAllPositionContent)) + { + Undo.RecordObject(t, "Applied new position"); + foreach (var index in t.points) + { + index.curveTypePosition = allCurveType; + if (allCurveType == CPC_ECurveType.Custom) + index.positionCurve.keys = allAnimationCurve.keys; + } + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUI.enabled = allCurveType == CPC_ECurveType.Custom; + allAnimationCurve = EditorGUILayout.CurveField(allAnimationCurve, GUILayout.Width(Screen.width / 3f)); + GUI.enabled = true; + if (GUILayout.Button(replaceAllRotationContent)) + { + Undo.RecordObject(t, "Applied new rotation"); + foreach (var index in t.points) + { + index.curveTypeRotation = allCurveType; + if (allCurveType == CPC_ECurveType.Custom) + index.rotationCurve = allAnimationCurve; + } + } + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + GUILayout.BeginHorizontal(); + GUILayout.Space(Screen.width/2f-20); + GUILayout.Label("↓"); + GUILayout.EndHorizontal(); + serializedObject.Update(); + pointReorderableList.DoLayoutList(); + serializedObject.ApplyModifiedProperties(); + Rect r = GUILayoutUtility.GetRect(Screen.width - 16, 18); + //r.height = 18; + r.y -= 10; + GUILayout.Space(-30); + GUILayout.BeginHorizontal(); + if (GUILayout.Button(addPointContent)) + { + Undo.RecordObject(t, "Added camera path point"); + switch (waypointMode) + { + case CPC_ENewWaypointMode.SceneCamera: + t.points.Add(new CPC_Point(SceneView.lastActiveSceneView.camera.transform.position, SceneView.lastActiveSceneView.camera.transform.rotation)); + break; + case CPC_ENewWaypointMode.LastWaypoint: + if (t.points.Count > 0) + t.points.Add(new CPC_Point(t.points[t.points.Count - 1].position, t.points[t.points.Count - 1].rotation) { handlenext = t.points[t.points.Count - 1].handlenext, handleprev = t.points[t.points.Count - 1].handleprev }); + else + { + t.points.Add(new CPC_Point(Vector3.zero, Quaternion.identity)); + Debug.LogWarning("No previous waypoint found to place this waypoint, defaulting position to world center"); + } + break; + case CPC_ENewWaypointMode.WaypointIndex: + if (t.points.Count > waypointIndex-1 && waypointIndex > 0) + t.points.Add(new CPC_Point(t.points[waypointIndex-1].position, t.points[waypointIndex-1].rotation) { handlenext = t.points[waypointIndex-1].handlenext, handleprev = t.points[waypointIndex-1].handleprev }); + else + { + t.points.Add(new CPC_Point(Vector3.zero, Quaternion.identity)); + Debug.LogWarning("Waypoint index "+waypointIndex+" does not exist, defaulting position to world center"); + } + break; + case CPC_ENewWaypointMode.WorldCenter: + t.points.Add(new CPC_Point(Vector3.zero, Quaternion.identity)); + break; + default: + throw new ArgumentOutOfRangeException(); + } + selectedIndex = t.points.Count - 1; + SceneView.RepaintAll(); + } + GUILayout.Label("at", GUILayout.Width(20)); + EditorGUI.BeginChangeCheck(); + waypointMode = (CPC_ENewWaypointMode) EditorGUILayout.EnumPopup(waypointMode, waypointMode==CPC_ENewWaypointMode.WaypointIndex ? GUILayout.Width(Screen.width/4) : GUILayout.Width(Screen.width/2)); + if (waypointMode == CPC_ENewWaypointMode.WaypointIndex) + { + waypointIndex = EditorGUILayout.IntField(waypointIndex, GUILayout.Width(Screen.width / 4)); + } + if (EditorGUI.EndChangeCheck()) + { + PlayerPrefs.SetInt("CPC_waypointMode", (int)waypointMode); + } + GUILayout.EndHorizontal(); + } + + void DrawHandles(int i) + { + DrawHandleLines(i); + Handles.color = t.visual.handleColor; + DrawNextHandle(i); + DrawPrevHandle(i); + DrawWaypointHandles(i); + DrawSelectionHandles(i); + } + + void DrawHandleLines(int i) + { + Handles.color = t.visual.handleColor; + if (i < t.points.Count - 1 || t.looped == true) + Handles.DrawLine(t.points[i].position, t.points[i].position + t.points[i].handlenext); + if (i > 0 || t.looped == true) + Handles.DrawLine(t.points[i].position, t.points[i].position + t.points[i].handleprev); + Handles.color = Color.white; + } + + void DrawNextHandle(int i) + { + if (i < t.points.Count - 1 || loopedProperty.boolValue) + { + EditorGUI.BeginChangeCheck(); + Vector3 posNext = Vector3.zero; + float size = HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handlenext) * 0.1f; + if (handlePositionMode == CPC_EManipulationModes.Free) + { +#if UNITY_5_5_OR_NEWER + posNext = Handles.FreeMoveHandle(t.points[i].position + t.points[i].handlenext, Quaternion.identity, size, Vector3.zero, Handles.SphereHandleCap); +#else + posNext = Handles.FreeMoveHandle(t.points[i].position + t.points[i].handlenext, Quaternion.identity, size, Vector3.zero, Handles.SphereCap); +#endif + } + else + { + if (selectedIndex == i) + { +#if UNITY_5_5_OR_NEWER + Handles.SphereHandleCap(0, t.points[i].position + t.points[i].handlenext, Quaternion.identity, size, EventType.Repaint); +#else + Handles.SphereCap(0, t.points[i].position + t.points[i].handlenext, Quaternion.identity, size); +#endif + posNext = Handles.PositionHandle(t.points[i].position + t.points[i].handlenext, Quaternion.identity); + } + else if (Event.current.button != 1) + { +#if UNITY_5_5_OR_NEWER + if (Handles.Button(t.points[i].position + t.points[i].handlenext, Quaternion.identity, size, size, Handles.CubeHandleCap)) + { + SelectIndex(i); + } +#else + if (Handles.Button(t.points[i].position + t.points[i].handlenext, Quaternion.identity, size, size, Handles.CubeCap)) + { + SelectIndex(i); + } +#endif + } + } + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Changed Handle Position"); + t.points[i].handlenext = posNext - t.points[i].position; + if (t.points[i].chained) + t.points[i].handleprev = t.points[i].handlenext * -1; + } + } + + } + + void DrawPrevHandle(int i) + { + if (i > 0 || loopedProperty.boolValue) + { + EditorGUI.BeginChangeCheck(); + Vector3 posPrev = Vector3.zero; + float size = HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handleprev) * 0.1f; + if (handlePositionMode == CPC_EManipulationModes.Free) + { +#if UNITY_5_5_OR_NEWER + posPrev = Handles.FreeMoveHandle(t.points[i].position + t.points[i].handleprev, Quaternion.identity, 0.1f * HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handleprev), Vector3.zero, Handles.SphereHandleCap); +#else + posPrev = Handles.FreeMoveHandle(t.points[i].position + t.points[i].handleprev, Quaternion.identity, 0.1f * HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handleprev), Vector3.zero, Handles.SphereCap); +#endif + } + else + { + if (selectedIndex == i) + { +#if UNITY_5_5_OR_NEWER + Handles.SphereHandleCap(0, t.points[i].position + t.points[i].handleprev, Quaternion.identity, 0.1f * HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handlenext), EventType.Repaint); +#else + Handles.SphereCap(0, t.points[i].position + t.points[i].handleprev, Quaternion.identity, + 0.1f * HandleUtility.GetHandleSize(t.points[i].position + t.points[i].handlenext)); +#endif + posPrev = Handles.PositionHandle(t.points[i].position + t.points[i].handleprev, Quaternion.identity); + } + else if (Event.current.button != 1) + { +#if UNITY_5_5_OR_NEWER + if (Handles.Button(t.points[i].position + t.points[i].handleprev, Quaternion.identity, size, size, Handles.CubeHandleCap)) + { + SelectIndex(i); + } +#else + if (Handles.Button(t.points[i].position + t.points[i].handleprev, Quaternion.identity, size, size, + Handles.CubeCap)) + { + SelectIndex(i); + } +#endif + } + } + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Changed Handle Position"); + t.points[i].handleprev = posPrev - t.points[i].position; + if (t.points[i].chained) + t.points[i].handlenext = t.points[i].handleprev * -1; + } + } + } + + void DrawWaypointHandles(int i) + { + if (Tools.current == Tool.Move) + { + EditorGUI.BeginChangeCheck(); + Vector3 pos = Vector3.zero; + if (cameraTranslateMode == CPC_EManipulationModes.SelectAndTransform) + { + if (i == selectedIndex) pos = Handles.PositionHandle(t.points[i].position, (Tools.pivotRotation == PivotRotation.Local) ? t.points[i].rotation : Quaternion.identity); + } + else + { +#if UNITY_5_5_OR_NEWER + pos = Handles.FreeMoveHandle(t.points[i].position, (Tools.pivotRotation == PivotRotation.Local) ? t.points[i].rotation : Quaternion.identity, HandleUtility.GetHandleSize(t.points[i].position) * 0.2f, Vector3.zero, Handles.RectangleHandleCap); +#else + pos = Handles.FreeMoveHandle(t.points[i].position, (Tools.pivotRotation == PivotRotation.Local) ? t.points[i].rotation : Quaternion.identity, HandleUtility.GetHandleSize(t.points[i].position) * 0.2f, Vector3.zero, Handles.RectangleCap); +#endif + } + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Moved Waypoint"); + t.points[i].position = pos; + } + } + else if (Tools.current == Tool.Rotate) + { + + EditorGUI.BeginChangeCheck(); + Quaternion rot = Quaternion.identity; + if (cameraRotationMode == CPC_EManipulationModes.SelectAndTransform) + { + if (i == selectedIndex) rot = Handles.RotationHandle(t.points[i].rotation, t.points[i].position); + } + else + { + rot = Handles.FreeRotateHandle(t.points[i].rotation, t.points[i].position, HandleUtility.GetHandleSize(t.points[i].position) * 0.2f); + } + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Rotated Waypoint"); + t.points[i].rotation = rot; + } + } + } + + void DrawSelectionHandles(int i) + { + if (Event.current.button != 1 && selectedIndex != i) + { + if (cameraTranslateMode == CPC_EManipulationModes.SelectAndTransform && Tools.current == Tool.Move + || cameraRotationMode == CPC_EManipulationModes.SelectAndTransform && Tools.current == Tool.Rotate) + { + float size = HandleUtility.GetHandleSize(t.points[i].position) * 0.2f; +#if UNITY_5_5_OR_NEWER + if (Handles.Button(t.points[i].position, Quaternion.identity, size, size, Handles.CubeHandleCap)) + { + SelectIndex(i); + } +#else + if (Handles.Button(t.points[i].position, Quaternion.identity, size, size, Handles.CubeCap)) + { + SelectIndex(i); + } +#endif + } + } + } + + void DrawRawValues() + { + if (GUILayout.Button(showRawValues ? "Hide raw values" : "Show raw values")) + showRawValues = !showRawValues; + + if (showRawValues) + { + foreach (var i in t.points) + { + EditorGUI.BeginChangeCheck(); + GUILayout.BeginVertical("Box"); + Vector3 pos = EditorGUILayout.Vector3Field("Waypoint Position", i.position); + Quaternion rot = Quaternion.Euler(EditorGUILayout.Vector3Field("Waypoint Rotation", i.rotation.eulerAngles)); + Vector3 posp = EditorGUILayout.Vector3Field("Previous Handle Offset", i.handleprev); + Vector3 posn = EditorGUILayout.Vector3Field("Next Handle Offset", i.handlenext); + GUILayout.EndVertical(); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(t, "Changed waypoint transform"); + i.position = pos; + i.rotation = rot; + i.handleprev = posp; + i.handlenext = posn; + SceneView.RepaintAll(); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs.meta b/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs.meta new file mode 100644 index 0000000..3a97886 --- /dev/null +++ b/Assets/Addons/CameraPathCreator/Scripts/Editor/CPC_CameraPathInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 068b9973fbe3fc942ae7bf5c1dfadfbf +timeCreated: 1487520919 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Game-Mountain.unity b/Assets/Scenes/Game-Mountain.unity index 7cd9133..cfed8ec 100644 --- a/Assets/Scenes/Game-Mountain.unity +++ b/Assets/Scenes/Game-Mountain.unity @@ -123,6 +123,198 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &390025522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 390025523} + - component: {fileID: 390025526} + - component: {fileID: 390025525} + - component: {fileID: 390025524} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &390025523 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 390025522} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.959, z: 0} + m_LocalScale: {x: 3, y: 0.1, z: 3} + m_Children: [] + m_Father: {fileID: 897806604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &390025524 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 390025522} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &390025525 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 390025522} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &390025526 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 390025522} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &897806600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 897806604} + - component: {fileID: 897806603} + - component: {fileID: 897806602} + - component: {fileID: 897806601} + m_Layer: 0 + m_Name: TempTowerForCameraDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!136 &897806601 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897806600} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &897806602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897806600} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &897806603 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897806600} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &897806604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897806600} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 14.18, z: 0} + m_LocalScale: {x: 1, y: 5, z: 1} + m_Children: + - {fileID: 390025523} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1135084891 GameObject: m_ObjectHideFlags: 0 @@ -323,6 +515,7 @@ GameObject: - component: {fileID: 1664207032} - component: {fileID: 1664207031} - component: {fileID: 1664207030} + - component: {fileID: 1664207033} m_Layer: 0 m_Name: MainCamera m_TagString: MainCamera @@ -388,13 +581,260 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1664207029} - m_LocalRotation: {x: -0, y: -0.9939013, z: 0.1102735, w: 0} - m_LocalPosition: {x: 0, y: 10.4, z: 23} + m_LocalRotation: {x: 0.010671735, y: -0.95365894, z: 0.30051628, w: 0.010523123} + m_LocalPosition: {x: -0.02, y: 7.05, z: 7.97} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 12.662, y: -180, z: 0} + m_LocalEulerAnglesHint: {x: 34.988, y: -179.045, z: -0.981} +--- !u!114 &1664207033 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664207029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2edac0b6f5e12204bbc4b9f4391db7ec, type: 3} + m_Name: + m_EditorClassIdentifier: + useMainCamera: 1 + selectedCamera: {fileID: 0} + lookAtTarget: 0 + target: {fileID: 0} + playOnAwake: 1 + playOnAwakeTime: 10 + points: + - position: {x: -17.624346, y: 30.346123, z: -4.2200975} + rotation: {x: 0.24489032, y: 0.6386206, z: -0.22540663, w: 0.6938186} + handleprev: {x: 7.122225, y: -11.064339, z: 8.700377} + handlenext: {x: -7.122225, y: 11.064339, z: -8.700377} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: 22.491816, y: 48.047947, z: -31.492859} + rotation: {x: 0.42355374, y: 0.09212859, z: -0.043351084, w: 0.9001307} + handleprev: {x: -4.368765, y: 7.9338646, z: 4.0120926} + handlenext: {x: 4.368765, y: -7.9338646, z: -4.0120926} + curveTypeRotation: 1 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: 31.154615, y: 27.090834, z: -5.7233553} + rotation: {x: 0.30968326, y: -0.48398438, z: 0.18816969, w: 0.79652226} + handleprev: {x: -0.45297813, y: -11.287661, z: -26.319904} + handlenext: {x: 0.45297813, y: 11.287661, z: 26.319904} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + - position: {x: 38.802773, y: 35.303326, z: 0.014641285} + rotation: {x: 0.19904628, y: -0.72700554, z: 0.23593752, w: 0.6133328} + handleprev: {x: -21.305935, y: 13.653553, z: 12.659761} + handlenext: {x: 21.305935, y: -13.653553, z: -12.659761} + curveTypeRotation: 0 + rotationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveTypePosition: 1 + positionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + chained: 1 + visual: + pathColor: {r: 0, g: 1, b: 0, a: 1} + inactivePathColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + frustrumColor: {r: 1, g: 1, b: 1, a: 1} + handleColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1} + looped: 0 + alwaysShow: 1 + afterLoop: 0 --- !u!1001 &1043847406924501847 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 6b742b7..5f6faee 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -24,17 +24,17 @@ EditorUserSettings: value: 224247031146467c0c03096f3d2c4a1e02161124623d28393930 flags: 0 RecentlyUsedScenePath-6: - value: 22424703114646680e0b0227036c78111b125507233d28242c20137df7ee3d2cfb - flags: 0 - RecentlyUsedScenePath-7: value: 22424703114646680e0b0227036c731f1415016439262f2434 flags: 0 - RecentlyUsedScenePath-8: + RecentlyUsedScenePath-7: value: 22424703114646680e0b0227036c6b19021b1d192f2d2835633c133af6f9 flags: 0 - RecentlyUsedScenePath-9: + RecentlyUsedScenePath-8: value: 22424703114646680e0b0227036c6f02131b172b282d347e38271427fb flags: 0 + RecentlyUsedScenePath-9: + value: 22424703114646680e0b0227036c78111b125507233d28242c20137df7ee3d2cfb + flags: 0 UnityRemoteCompression: value: 337f73 flags: 0