From 1efc220fa120548d4e769e12eadf8a8cc0d33e36 Mon Sep 17 00:00:00 2001 From: Maximilian Dolbaum <md127@hdm-stuttgart.de> Date: Sat, 1 May 2021 23:16:00 +0200 Subject: [PATCH] Implemented Slicing via Saber. Had to change the barrels mesh and import settings to work. on merge pls revert. --- Assets/Models/Lightsabers/Blade Small.fbx | 3 - .../Models/Lightsabers/Blade Small.fbx.meta | 102 --- .../Models/Lightsabers/Lightsabers(s).blend | 3 - .../Lightsabers/Lightsabers(s).blend.meta | 102 --- Assets/Models/Lightsabers/SaberBlue.prefab | 134 +++- Assets/Models/Lightsabers/SaberGreen.prefab | 156 ++++- Assets/Models/Lightsabers/SaberPurple.prefab | 160 ++++- Assets/Models/Lightsabers/SaberRed.prefab | 150 ++++- Assets/Models/barrel_WIP.fbx.meta | 2 +- Assets/Scenes/SampleScene.unity | 472 ++++++++++---- Assets/Scripts/LightSaberScripts.meta | 8 + Assets/Scripts/LightSaberScripts/Sliceable.cs | 83 +++ .../LightSaberScripts/Sliceable.cs.meta | 11 + Assets/Scripts/LightSaberScripts/Slicer.cs | 92 +++ .../Scripts/LightSaberScripts/Slicer.cs.meta | 11 + .../LightSaberScripts/SlicesMetadata.cs | 607 ++++++++++++++++++ .../LightSaberScripts/SlicesMetadata.cs.meta | 11 + .../LightSaberScripts/WeaponManager.cs | 148 +++++ .../WeaponManager.cs.meta | 0 Assets/Scripts/WeaponManager.cs | 70 -- UserSettings/EditorUserSettings.asset | 3 + 21 files changed, 1802 insertions(+), 526 deletions(-) delete mode 100644 Assets/Models/Lightsabers/Blade Small.fbx delete mode 100644 Assets/Models/Lightsabers/Blade Small.fbx.meta delete mode 100644 Assets/Models/Lightsabers/Lightsabers(s).blend delete mode 100644 Assets/Models/Lightsabers/Lightsabers(s).blend.meta create mode 100644 Assets/Scripts/LightSaberScripts.meta create mode 100644 Assets/Scripts/LightSaberScripts/Sliceable.cs create mode 100644 Assets/Scripts/LightSaberScripts/Sliceable.cs.meta create mode 100644 Assets/Scripts/LightSaberScripts/Slicer.cs create mode 100644 Assets/Scripts/LightSaberScripts/Slicer.cs.meta create mode 100644 Assets/Scripts/LightSaberScripts/SlicesMetadata.cs create mode 100644 Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta create mode 100644 Assets/Scripts/LightSaberScripts/WeaponManager.cs rename Assets/Scripts/{ => LightSaberScripts}/WeaponManager.cs.meta (100%) delete mode 100644 Assets/Scripts/WeaponManager.cs diff --git a/Assets/Models/Lightsabers/Blade Small.fbx b/Assets/Models/Lightsabers/Blade Small.fbx deleted file mode 100644 index 40bdd024..00000000 --- a/Assets/Models/Lightsabers/Blade Small.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28eeadbead66d2fb9c9f6aa73c78f6f608d6d5998dc3f115252c3f8afe2d422b -size 17164 diff --git a/Assets/Models/Lightsabers/Blade Small.fbx.meta b/Assets/Models/Lightsabers/Blade Small.fbx.meta deleted file mode 100644 index c6e5182e..00000000 --- a/Assets/Models/Lightsabers/Blade Small.fbx.meta +++ /dev/null @@ -1,102 +0,0 @@ -fileFormatVersion: 2 -guid: d679aa440e3e8284bbf5bc6daa496b7f -ModelImporter: - serializedVersion: 20200 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Models/Lightsabers/Lightsabers(s).blend b/Assets/Models/Lightsabers/Lightsabers(s).blend deleted file mode 100644 index 5ce26ae4..00000000 --- a/Assets/Models/Lightsabers/Lightsabers(s).blend +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ddbc9e30b1b602c1938345b61d37d560b387cbc52de6743819fb76242d6a9486 -size 1233992 diff --git a/Assets/Models/Lightsabers/Lightsabers(s).blend.meta b/Assets/Models/Lightsabers/Lightsabers(s).blend.meta deleted file mode 100644 index 5ad0e7a8..00000000 --- a/Assets/Models/Lightsabers/Lightsabers(s).blend.meta +++ /dev/null @@ -1,102 +0,0 @@ -fileFormatVersion: 2 -guid: 4f57d85ae8604454ab2b4e4aacb4a098 -ModelImporter: - serializedVersion: 20200 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 0 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Models/Lightsabers/SaberBlue.prefab b/Assets/Models/Lightsabers/SaberBlue.prefab index 4e0c7c39..d1bb0700 100644 --- a/Assets/Models/Lightsabers/SaberBlue.prefab +++ b/Assets/Models/Lightsabers/SaberBlue.prefab @@ -192,20 +192,57 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -7387706064836869012, guid: 2e0427b29f4946d499452abb5d082636, type: 3} ---- !u!136 &7695646964589331710 -CapsuleCollider: +--- !u!54 &201148715 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3359126146926893393} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!64 &6629517142980830489 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3359126146926893393} m_Material: {fileID: 0} - m_IsTrigger: 0 + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 1 + m_CookingOptions: 30 + m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3} +--- !u!114 &1327955950139578333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3359126146926893393} m_Enabled: 1 - m_Radius: 0.015 - m_Height: 0.9165672 - m_Direction: 1 - m_Center: {x: 0, y: 0.4582836, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} + m_Name: + m_EditorClassIdentifier: + _blade: {fileID: 3359126146926893393} + _tip: {fileID: 4660016671522463036} + _base: {fileID: 6681503832187716144} + _forceAppliedToCut: 3 + extendSpeed: 0.1 + maximumSwordSize: 7 + activateBlade: + actionPath: + needsReinit: 0 --- !u!1 &3395298484381185767 GameObject: m_ObjectHideFlags: 0 @@ -311,7 +348,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 5247273969708224055} - - component: {fileID: 7905181437100026170} m_Layer: 0 m_Name: SaberBlue m_TagString: Untagged @@ -328,7 +364,7 @@ Transform: m_GameObject: {fileID: 3441095255025812787} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 24.46069, y: 1, z: -35.64092} - m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259} + m_LocalScale: {x: 0.1722259, y: 0.17222594, z: 0.17222594} m_Children: - {fileID: 996865527394314579} - {fileID: 2726317981733585899} @@ -336,24 +372,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &7905181437100026170 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3441095255025812787} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} - m_Name: - m_EditorClassIdentifier: - bladeHolder: {fileID: 3359126146926893393} - maximumSwordSize: 6.5 - extendSpeed: 0.1 - activateBlade: - actionPath: - needsReinit: 0 --- !u!1 &3899787647720555611 GameObject: m_ObjectHideFlags: 0 @@ -450,6 +468,36 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3} +--- !u!1 &4660016671522463036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6638661504809774059} + m_Layer: 0 + m_Name: BladeTip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6638661504809774059 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4660016671522463036} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.9097, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2726317981733585899} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &5206598183120968814 GameObject: m_ObjectHideFlags: 0 @@ -738,6 +786,36 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3} +--- !u!1 &6681503832187716144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 364959221412897637} + m_Layer: 0 + m_Name: BladeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &364959221412897637 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6681503832187716144} + 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: 2726317981733585899} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6761538402700238143 GameObject: m_ObjectHideFlags: 0 @@ -1116,7 +1194,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.y - value: 6.5 + value: 7 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} diff --git a/Assets/Models/Lightsabers/SaberGreen.prefab b/Assets/Models/Lightsabers/SaberGreen.prefab index 066bc942..24ff0977 100644 --- a/Assets/Models/Lightsabers/SaberGreen.prefab +++ b/Assets/Models/Lightsabers/SaberGreen.prefab @@ -221,7 +221,7 @@ Transform: m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259} m_Children: - {fileID: 4601037317967204352} - - {fileID: 6347709206645337944} + - {fileID: 8841570493264984474} - {fileID: 1517365877800091929} m_Father: {fileID: 0} m_RootOrder: 0 @@ -238,9 +238,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} m_Name: m_EditorClassIdentifier: - bladeHolder: {fileID: 6006754381144405474} - maximumSwordSize: 6.5 + _blade: {fileID: 0} + _tip: {fileID: 0} + _base: {fileID: 0} + _forceAppliedToCut: 3 extendSpeed: 0.1 + maximumSwordSize: 6.5 activateBlade: actionPath: needsReinit: 0 @@ -698,20 +701,6 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3} ---- !u!136 &6611807667370853356 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6006754381144405474} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - m_Radius: 0.015 - m_Height: 0.9165672 - m_Direction: 1 - m_Center: {x: 0, y: 0.4582836, z: 0} --- !u!1 &6617440006656488907 GameObject: m_ObjectHideFlags: 0 @@ -1000,6 +989,36 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3} +--- !u!1 &7756561401392750041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3054777223326895886} + m_Layer: 0 + m_Name: BladeTip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3054777223326895886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756561401392750041} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.9097, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8841570493264984474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7849543655793136600 GameObject: m_ObjectHideFlags: 0 @@ -1096,7 +1115,88 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 8691780276856062721, guid: 2e0427b29f4946d499452abb5d082636, type: 3} ---- !u!1001 &6889714240436766899 +--- !u!1 &7892764322448365736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7529995285836671535} + m_Layer: 0 + m_Name: BladeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7529995285836671535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7892764322448365736} + 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: 8841570493264984474} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &5922758895058057032 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212385561656304416} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!64 &788972806405850415 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212385561656304416} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 1 + m_CookingOptions: 30 + m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3} +--- !u!114 &846717856241389920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8212385561656304416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} + m_Name: + m_EditorClassIdentifier: + _blade: {fileID: 8212385561656304416} + _tip: {fileID: 7756561401392750041} + _base: {fileID: 7892764322448365736} + _forceAppliedToCut: 3 + extendSpeed: 0.1 + maximumSwordSize: 7 + activateBlade: + actionPath: + needsReinit: 0 +--- !u!1001 &9023288381095747185 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -1111,27 +1211,27 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.x - value: 8.1288595 + value: 8.12886 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.y - value: 6.5 + value: 7 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.z - value: 8.1288595 + value: 8.12886 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalPosition.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalPosition.y - value: 2.430001 + value: 2.4300005 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1146,7 +1246,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1185,15 +1285,15 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3} ---- !u!1 &6006754381144405474 stripped +--- !u!1 &8212385561656304416 stripped GameObject: m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86, type: 3} - m_PrefabInstance: {fileID: 6889714240436766899} + m_PrefabInstance: {fileID: 9023288381095747185} m_PrefabAsset: {fileID: 0} ---- !u!4 &6347709206645337944 stripped +--- !u!4 &8841570493264984474 stripped Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} - m_PrefabInstance: {fileID: 6889714240436766899} + m_PrefabInstance: {fileID: 9023288381095747185} m_PrefabAsset: {fileID: 0} diff --git a/Assets/Models/Lightsabers/SaberPurple.prefab b/Assets/Models/Lightsabers/SaberPurple.prefab index fffce44c..783e86f2 100644 --- a/Assets/Models/Lightsabers/SaberPurple.prefab +++ b/Assets/Models/Lightsabers/SaberPurple.prefab @@ -1,5 +1,56 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!54 &3038571134312424703 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688427628865633301} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!64 &2151282287490391945 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688427628865633301} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 1 + m_CookingOptions: 30 + m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3} +--- !u!114 &6831661100328807913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688427628865633301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} + m_Name: + m_EditorClassIdentifier: + _blade: {fileID: 688427628865633301} + _tip: {fileID: 9006483180403487930} + _base: {fileID: 7249659932052553793} + _forceAppliedToCut: 3 + extendSpeed: 0.1 + maximumSwordSize: 7 + activateBlade: + actionPath: + needsReinit: 0 --- !u!1 &2113930384389249603 GameObject: m_ObjectHideFlags: 0 @@ -192,20 +243,6 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -7387706064836869012, guid: 2e0427b29f4946d499452abb5d082636, type: 3} ---- !u!136 &8638861390797501157 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3225311681837171379} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - m_Radius: 0.015 - m_Height: 0.9165672 - m_Direction: 1 - m_Center: {x: 0, y: 0.4582836, z: 0} --- !u!1 &3408129264393719073 GameObject: m_ObjectHideFlags: 0 @@ -948,6 +985,36 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -125435165217083709, guid: 2e0427b29f4946d499452abb5d082636, type: 3} +--- !u!1 &7249659932052553793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381259125534858650} + m_Layer: 0 + m_Name: BladeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1381259125534858650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7249659932052553793} + 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: 199875732362094255} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7769661174558955510 GameObject: m_ObjectHideFlags: 0 @@ -1073,7 +1140,7 @@ Transform: m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259} m_Children: - {fileID: 1346793771699192155} - - {fileID: 2848891038865741833} + - {fileID: 199875732362094255} - {fileID: 1390914449952353266} m_Father: {fileID: 0} m_RootOrder: 0 @@ -1090,13 +1157,46 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} m_Name: m_EditorClassIdentifier: - bladeHolder: {fileID: 3225311681837171379} - maximumSwordSize: 6.5 + _blade: {fileID: 0} + _tip: {fileID: 0} + _base: {fileID: 0} + _forceAppliedToCut: 3 extendSpeed: 0.1 + maximumSwordSize: 6.5 activateBlade: actionPath: needsReinit: 0 ---- !u!1001 &2306953735972044770 +--- !u!1 &9006483180403487930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6548567222616591649} + m_Layer: 0 + m_Name: BladeTip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6548567222616591649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9006483180403487930} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.9097, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 199875732362094255} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &381856634862076228 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -1116,7 +1216,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.y - value: 6.5 + value: 7 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1126,12 +1226,12 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalPosition.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalPosition.y - value: 2.430001 + value: 2.4300005 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1146,7 +1246,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1185,15 +1285,15 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3} ---- !u!1 &3225311681837171379 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86, - type: 3} - m_PrefabInstance: {fileID: 2306953735972044770} - m_PrefabAsset: {fileID: 0} ---- !u!4 &2848891038865741833 stripped +--- !u!4 &199875732362094255 stripped Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} - m_PrefabInstance: {fileID: 2306953735972044770} + m_PrefabInstance: {fileID: 381856634862076228} + m_PrefabAsset: {fileID: 0} +--- !u!1 &688427628865633301 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86, + type: 3} + m_PrefabInstance: {fileID: 381856634862076228} m_PrefabAsset: {fileID: 0} diff --git a/Assets/Models/Lightsabers/SaberRed.prefab b/Assets/Models/Lightsabers/SaberRed.prefab index 0f7bb0ab..0321cb6b 100644 --- a/Assets/Models/Lightsabers/SaberRed.prefab +++ b/Assets/Models/Lightsabers/SaberRed.prefab @@ -40,20 +40,6 @@ Transform: m_Father: {fileID: 2631477764915917491} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!136 &6138242976932105645 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746625454528537934} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - m_Radius: 0.015 - m_Height: 0.9165672 - m_Direction: 1 - m_Center: {x: 0, y: 0.4582836, z: 0} --- !u!1 &775822491111855997 GameObject: m_ObjectHideFlags: 0 @@ -785,7 +771,7 @@ Transform: m_LocalScale: {x: 0.1722259, y: 0.1722259, z: 0.1722259} m_Children: - {fileID: 7026599620898821591} - - {fileID: 78631890810077172} + - {fileID: 7931919499572317613} - {fileID: 1936758862765474806} m_Father: {fileID: 0} m_RootOrder: 0 @@ -802,9 +788,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} m_Name: m_EditorClassIdentifier: - bladeHolder: {fileID: 746625454528537934} - maximumSwordSize: 6.5 + _blade: {fileID: 0} + _tip: {fileID: 0} + _base: {fileID: 0} + _forceAppliedToCut: 3 extendSpeed: 0.1 + maximumSwordSize: 6.5 activateBlade: actionPath: needsReinit: 0 @@ -1096,7 +1085,118 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 3390558720134950976, guid: 2e0427b29f4946d499452abb5d082636, type: 3} ---- !u!1001 &476785851783518239 +--- !u!54 &6365243369612149457 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7302593869151000343} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!64 &6945370504838758461 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7302593869151000343} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 1 + m_CookingOptions: 30 + m_Mesh: {fileID: 7401353886334607404, guid: d122b058ea637564b9937b70b0b60d86, type: 3} +--- !u!114 &8744196058865543180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7302593869151000343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b8f1d2e3f203774dbe049389e195160, type: 3} + m_Name: + m_EditorClassIdentifier: + _blade: {fileID: 7302593869151000343} + _tip: {fileID: 7554108608169366222} + _base: {fileID: 9201128464475190540} + _forceAppliedToCut: 3 + extendSpeed: 0.1 + maximumSwordSize: 7 + activateBlade: + actionPath: + needsReinit: 0 +--- !u!1 &7554108608169366222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5599105018017814699} + m_Layer: 0 + m_Name: BladeTip + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5599105018017814699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7554108608169366222} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.9097, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7931919499572317613} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9201128464475190540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6069788664474740941} + m_Layer: 0 + m_Name: BladeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6069788664474740941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9201128464475190540} + 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: 7931919499572317613} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &7609235911577823814 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -1116,7 +1216,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalScale.y - value: 6.5 + value: 7 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1131,7 +1231,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalPosition.y - value: 2.430001 + value: 2.4300005 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1146,7 +1246,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} @@ -1185,15 +1285,15 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d122b058ea637564b9937b70b0b60d86, type: 3} ---- !u!1 &746625454528537934 stripped +--- !u!1 &7302593869151000343 stripped GameObject: m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d122b058ea637564b9937b70b0b60d86, type: 3} - m_PrefabInstance: {fileID: 476785851783518239} + m_PrefabInstance: {fileID: 7609235911577823814} m_PrefabAsset: {fileID: 0} ---- !u!4 &78631890810077172 stripped +--- !u!4 &7931919499572317613 stripped Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d122b058ea637564b9937b70b0b60d86, type: 3} - m_PrefabInstance: {fileID: 476785851783518239} + m_PrefabInstance: {fileID: 7609235911577823814} m_PrefabAsset: {fileID: 0} diff --git a/Assets/Models/barrel_WIP.fbx.meta b/Assets/Models/barrel_WIP.fbx.meta index 8539909a..be3ec055 100644 --- a/Assets/Models/barrel_WIP.fbx.meta +++ b/Assets/Models/barrel_WIP.fbx.meta @@ -31,7 +31,7 @@ ModelImporter: extraExposedTransformPaths: [] extraUserProperties: [] clipAnimations: [] - isReadable: 0 + isReadable: 1 meshes: lODScreenPercentages: [] globalScale: 1 diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 6e9023ce..c57b7d04 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -192,7 +192,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec, type: 3} propertyPath: m_RootOrder - value: 11 + value: 13 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec, type: 3} @@ -447,7 +447,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: a4455556c88b6bd4fb0379b366d0b1be, type: 3} propertyPath: m_RootOrder - value: 8 + value: 10 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: a4455556c88b6bd4fb0379b366d0b1be, type: 3} @@ -907,7 +907,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40220 + m_Name: pb_Mesh44052 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -1259,7 +1259,7 @@ Transform: - {fileID: 979253159} - {fileID: 567635848} m_Father: {fileID: 0} - m_RootOrder: 21 + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &103212238 stripped Transform: @@ -1604,7 +1604,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4368652640090004, guid: f662bb257bdbe4b4098d75c944baa81f, type: 3} propertyPath: m_RootOrder - value: 6 + value: 8 objectReference: {fileID: 0} - target: {fileID: 4368652640090004, guid: f662bb257bdbe4b4098d75c944baa81f, type: 3} propertyPath: m_LocalPosition.x @@ -2589,7 +2589,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40602 + m_Name: pb_Mesh44438 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -3546,7 +3546,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 447954, guid: dc06161b6d97feb419f45f03b62e14b9, type: 3} propertyPath: m_RootOrder - value: 0 + value: 3 objectReference: {fileID: 0} - target: {fileID: 447954, guid: dc06161b6d97feb419f45f03b62e14b9, type: 3} propertyPath: m_LocalPosition.x @@ -3713,7 +3713,7 @@ Transform: - {fileID: 618853050} - {fileID: 1795159564} m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &336075329 PrefabInstance: @@ -4119,7 +4119,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 36 + value: 38 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -4585,7 +4585,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 24 + m_RootOrder: 27 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &400311175 PrefabInstance: @@ -4950,7 +4950,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 35 + value: 37 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -5340,7 +5340,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40356 + m_Name: pb_Mesh44188 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -5798,7 +5798,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4052385530168264, guid: 3f2079bea2fbaae40a0d35e362897421, type: 3} propertyPath: m_RootOrder - value: 7 + value: 9 objectReference: {fileID: 0} - target: {fileID: 4052385530168264, guid: 3f2079bea2fbaae40a0d35e362897421, type: 3} propertyPath: m_LocalPosition.x @@ -6219,7 +6219,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40772 + m_Name: pb_Mesh44610 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -6469,7 +6469,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: 3402a939aeed1964cb422d698db9c248, type: 3} propertyPath: m_LocalPosition.y - value: 0.5 + value: 1.314 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 3402a939aeed1964cb422d698db9c248, type: 3} @@ -6535,8 +6535,8 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 538163532} m_PrefabAsset: {fileID: 0} ---- !u!65 &538163535 -BoxCollider: +--- !u!64 &538163535 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -6545,23 +6545,27 @@ BoxCollider: m_Material: {fileID: 0} m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 0.01, y: 0.01, z: 0.001} - m_Center: {x: 0.000000014901161, y: -4.6566118e-10, z: -0.01} ---- !u!136 &538163536 -CapsuleCollider: + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 2534964839176971238, guid: 3402a939aeed1964cb422d698db9c248, type: 3} +--- !u!114 &538163536 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 538163534} - m_Material: {fileID: 0} - m_IsTrigger: 0 m_Enabled: 1 - m_Radius: 0.010644982 - m_Height: 0.021289958 - m_Direction: 2 - m_Center: {x: 0.000000014901161, y: -4.6566118e-10, z: 0.000036322508} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7df4eb6bebdaf4548b4746999af2a2ef, type: 3} + m_Name: + m_EditorClassIdentifier: + _isSolid: 1 + _reverseWindTriangles: 0 + _useGravity: 1 + _shareVertices: 0 + _smoothVertices: 0 --- !u!54 &538163537 Rigidbody: m_ObjectHideFlags: 0 @@ -6574,7 +6578,7 @@ Rigidbody: m_Drag: 0 m_AngularDrag: 0.05 m_UseGravity: 1 - m_IsKinematic: 0 + m_IsKinematic: 1 m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 @@ -7976,7 +7980,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh39886 + m_Name: pb_Mesh43716 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -8339,7 +8343,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} propertyPath: m_RootOrder - value: 23 + value: 24 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} @@ -8797,7 +8801,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 114.10199, y: -136.245, z: -87.15799} --- !u!114 &705507996 MonoBehaviour: @@ -9135,7 +9139,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4214997939682252, guid: 6f6bf2b372bf5ea43977fb96a1b11e88, type: 3} propertyPath: m_RootOrder - value: 9 + value: 11 objectReference: {fileID: 0} - target: {fileID: 4214997939682252, guid: 6f6bf2b372bf5ea43977fb96a1b11e88, type: 3} propertyPath: m_LocalPosition.x @@ -10494,7 +10498,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4030702537426336, guid: defc1954bd6bc1347aa94a45192f58db, type: 3} propertyPath: m_RootOrder - value: 3 + value: 5 objectReference: {fileID: 0} - target: {fileID: 4030702537426336, guid: defc1954bd6bc1347aa94a45192f58db, type: 3} propertyPath: m_LocalPosition.x @@ -11403,7 +11407,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195, type: 3} propertyPath: m_RootOrder - value: 29 + value: 31 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195, type: 3} @@ -13056,7 +13060,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} propertyPath: m_RootOrder - value: 25 + value: 26 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} @@ -13547,7 +13551,7 @@ Transform: - {fileID: 1426559845} - {fileID: 325786952} m_Father: {fileID: 0} - m_RootOrder: 19 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &925733554 PrefabInstance: @@ -38272,7 +38276,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 1 + value: 4 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -43325,7 +43329,7 @@ Transform: - {fileID: 440575160} - {fileID: 177675886} m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1032276778 PrefabInstance: @@ -43698,7 +43702,7 @@ Transform: - {fileID: 868096425} - {fileID: 1882430989} m_Father: {fileID: 0} - m_RootOrder: 18 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &1059569740 stripped Transform: @@ -44065,6 +44069,75 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1097986361} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1099240587 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3441095255025812787, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_Name + value: SaberBlue + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalPosition.x + value: 7.313 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.47 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalPosition.z + value: -15.404 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.7067334 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalRotation.x + value: 0.70748 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 89.944 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 79f30c7baf59f68468ea82a38473449d, type: 3} --- !u!1001 &1099371949 PrefabInstance: m_ObjectHideFlags: 0 @@ -44240,7 +44313,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 22 + m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1117867616 PrefabInstance: @@ -44807,7 +44880,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} propertyPath: m_RootOrder - value: 26 + value: 28 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b9a9009d4c96ae249a1f532f94089974, type: 3} @@ -45034,7 +45107,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 38 + value: 40 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -46251,7 +46324,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4264151941027994, guid: 92013a4fbb8606940991197d497f999d, type: 3} propertyPath: m_RootOrder - value: 4 + value: 6 objectReference: {fileID: 0} - target: {fileID: 4264151941027994, guid: 92013a4fbb8606940991197d497f999d, type: 3} propertyPath: m_LocalPosition.x @@ -46464,7 +46537,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4432952677729790, guid: 47ec7938f499f9f4d8a61ca589432ee0, type: 3} propertyPath: m_RootOrder - value: 5 + value: 7 objectReference: {fileID: 0} - target: {fileID: 4432952677729790, guid: 47ec7938f499f9f4d8a61ca589432ee0, type: 3} propertyPath: m_LocalPosition.x @@ -46521,7 +46594,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 37 + value: 39 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -48388,7 +48461,7 @@ Transform: - {fileID: 1016733342} - {fileID: 596015964} m_Father: {fileID: 0} - m_RootOrder: 20 + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!43 &1456550662 Mesh: @@ -48396,7 +48469,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh41538 + m_Name: pb_Mesh45394 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -48564,7 +48637,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec, type: 3} propertyPath: m_RootOrder - value: 10 + value: 12 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b3eab5198c7b27a4284f286f025afcec, type: 3} @@ -48666,7 +48739,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 30 + value: 32 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -48755,7 +48828,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh41290 + m_Name: pb_Mesh45144 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -50883,75 +50956,6 @@ Transform: m_Father: {fileID: 333071810} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1486644277 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 3441095255025812787, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_Name - value: SaberBlue - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalPosition.x - value: -7.625 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalPosition.y - value: 1.0025208 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalPosition.z - value: -9.248041 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5247273969708224055, guid: 79f30c7baf59f68468ea82a38473449d, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 79f30c7baf59f68468ea82a38473449d, type: 3} --- !u!1001 &1487455162 PrefabInstance: m_ObjectHideFlags: 0 @@ -51437,7 +51441,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 34 + value: 36 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -51531,7 +51535,7 @@ PrefabInstance: - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195, type: 3} propertyPath: m_RootOrder - value: 28 + value: 29 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: f2779c59847ee594788a122ee1f03195, type: 3} @@ -51934,7 +51938,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 33 + value: 35 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -51984,7 +51988,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh41058 + m_Name: pb_Mesh44912 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -52189,7 +52193,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 31 + value: 33 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -58526,7 +58530,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh41228 + m_Name: pb_Mesh45082 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -59183,8 +59187,139 @@ Transform: - {fileID: 258474617} - {fileID: 593320218} m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1610002302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1610002306} + - component: {fileID: 1610002305} + - component: {fileID: 1610002304} + - component: {fileID: 1610002307} + - component: {fileID: 1610002303} + - component: {fileID: 1610002308} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1610002303 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1610002304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + 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: 257 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + 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 &1610002305 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1610002306 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + m_LocalRotation: {x: 0.70748, y: -0, z: -0, w: 0.7067334} + m_LocalPosition: {x: 6.802, y: 1.425, z: -14.151} + m_LocalScale: {x: 0.51, y: 0.46, z: 0.79} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &1610002307 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &1610002308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610002302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7df4eb6bebdaf4548b4746999af2a2ef, type: 3} + m_Name: + m_EditorClassIdentifier: + _isSolid: 1 + _reverseWindTriangles: 0 + _useGravity: 1 + _shareVertices: 0 + _smoothVertices: 0 --- !u!1001 &1611375518 PrefabInstance: m_ObjectHideFlags: 0 @@ -60211,7 +60346,7 @@ Transform: - {fileID: 180465191} - {fileID: 961477948} m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1715073592 PrefabInstance: @@ -60624,7 +60759,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40972 + m_Name: pb_Mesh44814 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -62182,7 +62317,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40548 + m_Name: pb_Mesh44382 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -63018,6 +63153,75 @@ BoxCollider: serializedVersion: 2 m_Size: {x: 2.0000005, y: 0.5000001, z: 0.5} m_Center: {x: -1, y: 0, z: 0} +--- !u!1001 &1870414369 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalPosition.x + value: 7.5923142 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.781 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalPosition.z + value: -12.826 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.91096526 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalRotation.x + value: 0.4124832 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 48.722 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 947440725445985924, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8797196755077634865, guid: be46f59e5e4dc3e4e826f9f443f8f770, + type: 3} + propertyPath: m_Name + value: SaberPurple + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: be46f59e5e4dc3e4e826f9f443f8f770, type: 3} --- !u!1 &1876004132 GameObject: m_ObjectHideFlags: 0 @@ -66904,7 +67108,7 @@ Mesh: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: pb_Mesh40464 + m_Name: pb_Mesh44298 serializedVersion: 10 m_SubMeshes: - serializedVersion: 2 @@ -67458,7 +67662,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_RootOrder - value: 32 + value: 34 objectReference: {fileID: 0} - target: {fileID: 4008618577427338, guid: f60a68fd009415d44bee80b63a157895, type: 3} propertyPath: m_LocalPosition.x @@ -68173,7 +68377,7 @@ Transform: - {fileID: 40040395} - {fileID: 538163533} m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &2091149495 PrefabInstance: @@ -68472,7 +68676,7 @@ Transform: - {fileID: 1746854949} - {fileID: 1862324717} m_Father: {fileID: 0} - m_RootOrder: 27 + m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!4 &2101105017 stripped Transform: diff --git a/Assets/Scripts/LightSaberScripts.meta b/Assets/Scripts/LightSaberScripts.meta new file mode 100644 index 00000000..3f233a17 --- /dev/null +++ b/Assets/Scripts/LightSaberScripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f618e8e87c614af4c997a62140551cb7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LightSaberScripts/Sliceable.cs b/Assets/Scripts/LightSaberScripts/Sliceable.cs new file mode 100644 index 00000000..c40ba16a --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/Sliceable.cs @@ -0,0 +1,83 @@ +using System.Collections; +using System.Collections.Generic; +using System.Security.AccessControl; +using UnityEngine; + +public class Sliceable : MonoBehaviour +{ + [SerializeField] + private bool _isSolid = true; + + [SerializeField] + private bool _reverseWindTriangles = false; + + [SerializeField] + private bool _useGravity = false; + + [SerializeField] + private bool _shareVertices = false; + + [SerializeField] + private bool _smoothVertices = false; + + public bool IsSolid + { + get + { + return _isSolid; + } + set + { + _isSolid = value; + } + } + + public bool ReverseWireTriangles + { + get + { + return _reverseWindTriangles; + } + set + { + _reverseWindTriangles = value; + } + } + + public bool UseGravity + { + get + { + return _useGravity; + } + set + { + _useGravity = value; + } + } + + public bool ShareVertices + { + get + { + return _shareVertices; + } + set + { + _shareVertices = value; + } + } + + public bool SmoothVertices + { + get + { + return _smoothVertices; + } + set + { + _smoothVertices = value; + } + } + +} diff --git a/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta b/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta new file mode 100644 index 00000000..8fab3d4c --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/Sliceable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7df4eb6bebdaf4548b4746999af2a2ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LightSaberScripts/Slicer.cs b/Assets/Scripts/LightSaberScripts/Slicer.cs new file mode 100644 index 00000000..0560bae5 --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/Slicer.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +class Slicer +{ + /// <summary> + /// Slice the object by the plane + /// </summary> + /// <param name="plane"></param> + /// <param name="objectToCut"></param> + /// <returns></returns> + public static GameObject[] Slice(Plane plane, GameObject objectToCut) + { + //Get the current mesh and its verts and tris + Mesh mesh = objectToCut.GetComponent<MeshFilter>().mesh; + var a = mesh.GetSubMesh(0); + Sliceable sliceable = objectToCut.GetComponent<Sliceable>(); + if(sliceable == null) + { + throw new NotSupportedException("Cannot slice non sliceable object, add the sliceable script to the object or inherit from sliceable to support slicing"); + } + + //Create left and right slice of hollow object + SlicesMetadata slicesMeta = new SlicesMetadata(plane, mesh, sliceable.IsSolid, sliceable.ReverseWireTriangles, sliceable.ShareVertices, sliceable.SmoothVertices); + + GameObject positiveObject = CreateMeshGameObject(objectToCut); + positiveObject.name = string.Format("{0}_positive", objectToCut.name); + + GameObject negativeObject = CreateMeshGameObject(objectToCut); + negativeObject.name = string.Format("{0}_negative", objectToCut.name); + + var positiveSideMeshData = slicesMeta.PositiveSideMesh; + var negativeSideMeshData = slicesMeta.NegativeSideMesh; + + positiveObject.GetComponent<MeshFilter>().mesh = positiveSideMeshData; + negativeObject.GetComponent<MeshFilter>().mesh = negativeSideMeshData; + + SetupCollidersAndRigidBodys(ref positiveObject, positiveSideMeshData, sliceable.UseGravity); + SetupCollidersAndRigidBodys(ref negativeObject, negativeSideMeshData, sliceable.UseGravity); + + return new GameObject[] { positiveObject, negativeObject}; + } + + /// <summary> + /// Creates the default mesh game object. + /// </summary> + /// <param name="originalObject">The original object.</param> + /// <returns></returns> + private static GameObject CreateMeshGameObject(GameObject originalObject) + { + var originalMaterial = originalObject.GetComponent<MeshRenderer>().materials; + + GameObject meshGameObject = new GameObject(); + Sliceable originalSliceable = originalObject.GetComponent<Sliceable>(); + + meshGameObject.AddComponent<MeshFilter>(); + meshGameObject.AddComponent<MeshRenderer>(); + Sliceable sliceable = meshGameObject.AddComponent<Sliceable>(); + + sliceable.IsSolid = originalSliceable.IsSolid; + sliceable.ReverseWireTriangles = originalSliceable.ReverseWireTriangles; + sliceable.UseGravity = originalSliceable.UseGravity; + + meshGameObject.GetComponent<MeshRenderer>().materials = originalMaterial; + + meshGameObject.transform.localScale = originalObject.transform.localScale; + meshGameObject.transform.rotation = originalObject.transform.rotation; + meshGameObject.transform.position = originalObject.transform.position; + + meshGameObject.tag = originalObject.tag; + + return meshGameObject; + } + + /// <summary> + /// Add mesh collider and rigid body to game object + /// </summary> + /// <param name="gameObject"></param> + /// <param name="mesh"></param> + private static void SetupCollidersAndRigidBodys(ref GameObject gameObject, Mesh mesh, bool useGravity) + { + MeshCollider meshCollider = gameObject.AddComponent<MeshCollider>(); + meshCollider.sharedMesh = mesh; + meshCollider.convex = true; + + var rb = gameObject.AddComponent<Rigidbody>(); + rb.useGravity = useGravity; + } +} + diff --git a/Assets/Scripts/LightSaberScripts/Slicer.cs.meta b/Assets/Scripts/LightSaberScripts/Slicer.cs.meta new file mode 100644 index 00000000..320fa9db --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/Slicer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67c09b18144166948afb3c87aee03bde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs new file mode 100644 index 00000000..d8fd723a --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs @@ -0,0 +1,607 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.InteropServices; +using UnityEngine.UIElements; + + +/// <summary> +/// The side of the mesh +/// </summary> +public enum MeshSide +{ + Positive = 0, + Negative = 1 +} + +/// <summary> +/// An object used to manage the positive and negative side mesh data for a sliced object +/// </summary> +class SlicesMetadata +{ + private Mesh _positiveSideMesh; + private List<Vector3> _positiveSideVertices; + private List<int> _positiveSideTriangles; + private List<Vector2> _positiveSideUvs; + private List<Vector3> _positiveSideNormals; + + private Mesh _negativeSideMesh; + private List<Vector3> _negativeSideVertices; + private List<int> _negativeSideTriangles; + private List<Vector2> _negativeSideUvs; + private List<Vector3> _negativeSideNormals; + + private readonly List<Vector3> _pointsAlongPlane; + private Plane _plane; + private Mesh _mesh; + private bool _isSolid; + private bool _useSharedVertices = false; + private bool _smoothVertices = false; + private bool _createReverseTriangleWindings = false; + + public bool IsSolid + { + get + { + return _isSolid; + } + set + { + _isSolid = value; + } + } + + public Mesh PositiveSideMesh + { + get + { + if (_positiveSideMesh == null) + { + _positiveSideMesh = new Mesh(); + } + + SetMeshData(MeshSide.Positive); + return _positiveSideMesh; + } + } + + public Mesh NegativeSideMesh + { + get + { + if (_negativeSideMesh == null) + { + _negativeSideMesh = new Mesh(); + } + + SetMeshData(MeshSide.Negative); + + return _negativeSideMesh; + } + } + + public SlicesMetadata(Plane plane, Mesh mesh, bool isSolid, bool createReverseTriangleWindings, bool shareVertices, bool smoothVertices) + { + _positiveSideTriangles = new List<int>(); + _positiveSideVertices = new List<Vector3>(); + _negativeSideTriangles = new List<int>(); + _negativeSideVertices = new List<Vector3>(); + _positiveSideUvs = new List<Vector2>(); + _negativeSideUvs = new List<Vector2>(); + _positiveSideNormals = new List<Vector3>(); + _negativeSideNormals = new List<Vector3>(); + _pointsAlongPlane = new List<Vector3>(); + _plane = plane; + _mesh = mesh; + _isSolid = isSolid; + _createReverseTriangleWindings = createReverseTriangleWindings; + _useSharedVertices = shareVertices; + _smoothVertices = smoothVertices; + + ComputeNewMeshes(); + } + + /// <summary> + /// Add the mesh data to the correct side and calulate normals + /// </summary> + /// <param name="side"></param> + /// <param name="vertex1"></param> + /// <param name="vertex1Uv"></param> + /// <param name="vertex2"></param> + /// <param name="vertex2Uv"></param> + /// <param name="vertex3"></param> + /// <param name="vertex3Uv"></param> + /// <param name="shareVertices"></param> + private void AddTrianglesNormalAndUvs(MeshSide side, Vector3 vertex1, Vector3? normal1, Vector2 uv1, Vector3 vertex2, Vector3? normal2, Vector2 uv2, Vector3 vertex3, Vector3? normal3, Vector2 uv3, bool shareVertices, bool addFirst) + { + if (side == MeshSide.Positive) + { + AddTrianglesNormalsAndUvs(ref _positiveSideVertices, ref _positiveSideTriangles, ref _positiveSideNormals, ref _positiveSideUvs, vertex1, normal1, uv1, vertex2, normal2, uv2, vertex3, normal3, uv3, shareVertices, addFirst); + } + else + { + AddTrianglesNormalsAndUvs(ref _negativeSideVertices, ref _negativeSideTriangles, ref _negativeSideNormals, ref _negativeSideUvs, vertex1, normal1, uv1, vertex2, normal2, uv2, vertex3, normal3, uv3, shareVertices, addFirst); + } + } + + + /// <summary> + /// Adds the vertices to the mesh sets the triangles in the order that the vertices are provided. + /// If shared vertices is false vertices will be added to the list even if a matching vertex already exists + /// Does not compute normals + /// </summary> + /// <param name="vertices"></param> + /// <param name="triangles"></param> + /// <param name="uvs"></param> + /// <param name="normals"></param> + /// <param name="vertex1"></param> + /// <param name="vertex1Uv"></param> + /// <param name="normal1"></param> + /// <param name="vertex2"></param> + /// <param name="vertex2Uv"></param> + /// <param name="normal2"></param> + /// <param name="vertex3"></param> + /// <param name="vertex3Uv"></param> + /// <param name="normal3"></param> + /// <param name="shareVertices"></param> + private void AddTrianglesNormalsAndUvs(ref List<Vector3> vertices, ref List<int> triangles, ref List<Vector3> normals, ref List<Vector2> uvs, Vector3 vertex1, Vector3? normal1, Vector2 uv1, Vector3 vertex2, Vector3? normal2, Vector2 uv2, Vector3 vertex3, Vector3? normal3, Vector2 uv3, bool shareVertices, bool addFirst) + { + int tri1Index = vertices.IndexOf(vertex1); + + if (addFirst) + { + ShiftTriangleIndeces(ref triangles); + } + + //If a the vertex already exists we just add a triangle reference to it, if not add the vert to the list and then add the tri index + if (tri1Index > -1 && shareVertices) + { + triangles.Add(tri1Index); + } + else + { + if (normal1 == null) + { + normal1 = ComputeNormal(vertex1, vertex2, vertex3); + } + + int? i = null; + if (addFirst) + { + i = 0; + } + + AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex1, (Vector3)normal1, uv1, i); + } + + int tri2Index = vertices.IndexOf(vertex2); + + if (tri2Index > -1 && shareVertices) + { + triangles.Add(tri2Index); + } + else + { + if (normal2 == null) + { + normal2 = ComputeNormal(vertex2, vertex3, vertex1); + } + + int? i = null; + + if (addFirst) + { + i = 1; + } + + AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex2, (Vector3)normal2, uv2, i); + } + + int tri3Index = vertices.IndexOf(vertex3); + + if (tri3Index > -1 && shareVertices) + { + triangles.Add(tri3Index); + } + else + { + if (normal3 == null) + { + normal3 = ComputeNormal(vertex3, vertex1, vertex2); + } + + int? i = null; + if (addFirst) + { + i = 2; + } + + AddVertNormalUv(ref vertices, ref normals, ref uvs, ref triangles, vertex3, (Vector3)normal3, uv3, i); + } + } + + private void AddVertNormalUv(ref List<Vector3> vertices, ref List<Vector3> normals, ref List<Vector2> uvs, ref List<int> triangles, Vector3 vertex, Vector3 normal, Vector2 uv, int? index) + { + if (index != null) + { + int i = (int)index; + vertices.Insert(i, vertex); + uvs.Insert(i, uv); + normals.Insert(i, normal); + triangles.Insert(i, i); + } + else + { + vertices.Add(vertex); + normals.Add(normal); + uvs.Add(uv); + triangles.Add(vertices.IndexOf(vertex)); + } + } + + private void ShiftTriangleIndeces(ref List<int> triangles) + { + for (int j = 0; j < triangles.Count; j += 3) + { + triangles[j] += +3; + triangles[j + 1] += 3; + triangles[j + 2] += 3; + } + } + + /// <summary> + /// Will render the inside of an object + /// This is heavy as it duplicates all the vertices and creates opposite winding direction + /// </summary> + private void AddReverseTriangleWinding() + { + int positiveVertsStartIndex = _positiveSideVertices.Count; + //Duplicate the original vertices + _positiveSideVertices.AddRange(_positiveSideVertices); + _positiveSideUvs.AddRange(_positiveSideUvs); + _positiveSideNormals.AddRange(FlipNormals(_positiveSideNormals)); + + int numPositiveTriangles = _positiveSideTriangles.Count; + + //Add reverse windings + for (int i = 0; i < numPositiveTriangles; i += 3) + { + _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i]); + _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i + 2]); + _positiveSideTriangles.Add(positiveVertsStartIndex + _positiveSideTriangles[i + 1]); + } + + int negativeVertextStartIndex = _negativeSideVertices.Count; + //Duplicate the original vertices + _negativeSideVertices.AddRange(_negativeSideVertices); + _negativeSideUvs.AddRange(_negativeSideUvs); + _negativeSideNormals.AddRange(FlipNormals(_negativeSideNormals)); + + int numNegativeTriangles = _negativeSideTriangles.Count; + + //Add reverse windings + for (int i = 0; i < numNegativeTriangles; i += 3) + { + _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i]); + _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i + 2]); + _negativeSideTriangles.Add(negativeVertextStartIndex + _negativeSideTriangles[i + 1]); + } + } + + /// <summary> + /// Join the points along the plane to the halfway point + /// </summary> + private void JoinPointsAlongPlane() + { + Vector3 halfway = GetHalfwayPoint(out float distance); + + for (int i = 0; i < _pointsAlongPlane.Count; i += 2) + { + Vector3 firstVertex; + Vector3 secondVertex; + + firstVertex = _pointsAlongPlane[i]; + secondVertex = _pointsAlongPlane[i + 1]; + + Vector3 normal3 = ComputeNormal(halfway, secondVertex, firstVertex); + normal3.Normalize(); + + var direction = Vector3.Dot(normal3, _plane.normal); + + if (direction > 0) + { + AddTrianglesNormalAndUvs(MeshSide.Positive, halfway, -normal3, Vector2.zero, firstVertex, -normal3, Vector2.zero, secondVertex, -normal3, Vector2.zero, false, true); + AddTrianglesNormalAndUvs(MeshSide.Negative, halfway, normal3, Vector2.zero, secondVertex, normal3, Vector2.zero, firstVertex, normal3, Vector2.zero, false, true); + } + else + { + AddTrianglesNormalAndUvs(MeshSide.Positive, halfway, normal3, Vector2.zero, secondVertex, normal3, Vector2.zero, firstVertex, normal3, Vector2.zero, false, true); + AddTrianglesNormalAndUvs(MeshSide.Negative, halfway, -normal3, Vector2.zero, firstVertex, -normal3, Vector2.zero, secondVertex, -normal3, Vector2.zero, false, true); + } + } + } + + /// <summary> + /// For all the points added along the plane cut, get the half way between the first and furthest point + /// </summary> + /// <returns></returns> + private Vector3 GetHalfwayPoint(out float distance) + { + if (_pointsAlongPlane.Count > 0) + { + Vector3 firstPoint = _pointsAlongPlane[0]; + Vector3 furthestPoint = Vector3.zero; + distance = 0f; + + foreach (Vector3 point in _pointsAlongPlane) + { + float currentDistance = 0f; + currentDistance = Vector3.Distance(firstPoint, point); + + if (currentDistance > distance) + { + distance = currentDistance; + furthestPoint = point; + } + } + + return Vector3.Lerp(firstPoint, furthestPoint, 0.5f); + } + else + { + distance = 0; + return Vector3.zero; + } + } + + /// <summary> + /// Setup the mesh object for the specified side + /// </summary> + /// <param name="side"></param> + private void SetMeshData(MeshSide side) + { + if (side == MeshSide.Positive) + { + _positiveSideMesh.vertices = _positiveSideVertices.ToArray(); + _positiveSideMesh.triangles = _positiveSideTriangles.ToArray(); + _positiveSideMesh.normals = _positiveSideNormals.ToArray(); + _positiveSideMesh.uv = _positiveSideUvs.ToArray(); + } + else + { + _negativeSideMesh.vertices = _negativeSideVertices.ToArray(); + _negativeSideMesh.triangles = _negativeSideTriangles.ToArray(); + _negativeSideMesh.normals = _negativeSideNormals.ToArray(); + _negativeSideMesh.uv = _negativeSideUvs.ToArray(); + } + } + + /// <summary> + /// Compute the positive and negative meshes based on the plane and mesh + /// </summary> + private void ComputeNewMeshes() + { + int[] meshTriangles = _mesh.triangles; + Vector3[] meshVerts = _mesh.vertices; + Vector3[] meshNormals = _mesh.normals; + Vector2[] meshUvs = _mesh.uv; + + for (int i = 0; i < meshTriangles.Length; i += 3) + { + //We need the verts in order so that we know which way to wind our new mesh triangles. + Vector3 vert1 = meshVerts[meshTriangles[i]]; + int vert1Index = Array.IndexOf(meshVerts, vert1); + Vector2 uv1 = meshUvs[vert1Index]; + Vector3 normal1 = meshNormals[vert1Index]; + bool vert1Side = _plane.GetSide(vert1); + + Vector3 vert2 = meshVerts[meshTriangles[i + 1]]; + int vert2Index = Array.IndexOf(meshVerts, vert2); + Vector2 uv2 = meshUvs[vert2Index]; + Vector3 normal2 = meshNormals[vert2Index]; + bool vert2Side = _plane.GetSide(vert2); + + Vector3 vert3 = meshVerts[meshTriangles[i + 2]]; + bool vert3Side = _plane.GetSide(vert3); + int vert3Index = Array.IndexOf(meshVerts, vert3); + Vector3 normal3 = meshNormals[vert3Index]; + Vector2 uv3 = meshUvs[vert3Index]; + + //All verts are on the same side + if (vert1Side == vert2Side && vert2Side == vert3Side) + { + //Add the relevant triangle + MeshSide side = (vert1Side) ? MeshSide.Positive : MeshSide.Negative; + AddTrianglesNormalAndUvs(side, vert1, normal1, uv1, vert2, normal2, uv2, vert3, normal3, uv3, true, false); + } + else + { + //we need the two points where the plane intersects the triangle. + Vector3 intersection1; + Vector3 intersection2; + + Vector2 intersection1Uv; + Vector2 intersection2Uv; + + MeshSide side1 = (vert1Side) ? MeshSide.Positive : MeshSide.Negative; + MeshSide side2 = (vert1Side) ? MeshSide.Negative : MeshSide.Positive; + + //vert 1 and 2 are on the same side + if (vert1Side == vert2Side) + { + //Cast a ray from v2 to v3 and from v3 to v1 to get the intersections + intersection1 = GetRayPlaneIntersectionPointAndUv(vert2, uv2, vert3, uv3, out intersection1Uv); + intersection2 = GetRayPlaneIntersectionPointAndUv(vert3, uv3, vert1, uv1, out intersection2Uv); + + //Add the positive or negative triangles + AddTrianglesNormalAndUvs(side1, vert1, null, uv1, vert2, null, uv2, intersection1, null, intersection1Uv, _useSharedVertices, false); + AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, _useSharedVertices, false); + + AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert3, null, uv3, intersection2, null, intersection2Uv, _useSharedVertices, false); + + } + //vert 1 and 3 are on the same side + else if (vert1Side == vert3Side) + { + //Cast a ray from v1 to v2 and from v2 to v3 to get the intersections + intersection1 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert2, uv2, out intersection1Uv); + intersection2 = GetRayPlaneIntersectionPointAndUv(vert2, uv2, vert3, uv3, out intersection2Uv); + + //Add the positive triangles + AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, vert3, null, uv3, _useSharedVertices, false); + AddTrianglesNormalAndUvs(side1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, vert3, null, uv3, _useSharedVertices, false); + + AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert2, null, uv2, intersection2, null, intersection2Uv, _useSharedVertices, false); + } + //Vert1 is alone + else + { + //Cast a ray from v1 to v2 and from v1 to v3 to get the intersections + intersection1 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert2, uv2, out intersection1Uv); + intersection2 = GetRayPlaneIntersectionPointAndUv(vert1, uv1, vert3, uv3, out intersection2Uv); + + AddTrianglesNormalAndUvs(side1, vert1, null, uv1, intersection1, null, intersection1Uv, intersection2, null, intersection2Uv, _useSharedVertices, false); + + AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert2, null, uv2, vert3, null, uv3, _useSharedVertices, false); + AddTrianglesNormalAndUvs(side2, intersection1, null, intersection1Uv, vert3, null, uv3, intersection2, null, intersection2Uv, _useSharedVertices, false); + } + + //Add the newly created points on the plane. + _pointsAlongPlane.Add(intersection1); + _pointsAlongPlane.Add(intersection2); + } + } + + //If the object is solid, join the new points along the plane otherwise do the reverse winding + if (_isSolid) + { + JoinPointsAlongPlane(); + } + else if (_createReverseTriangleWindings) + { + AddReverseTriangleWinding(); + } + + if (_smoothVertices) + { + SmoothVertices(); + } + + } + + /// <summary> + /// Casts a reay from vertex1 to vertex2 and gets the point of intersection with the plan, calculates the new uv as well. + /// </summary> + /// <param name="plane">The plane.</param> + /// <param name="vertex1">The vertex1.</param> + /// <param name="vertex1Uv">The vertex1 uv.</param> + /// <param name="vertex2">The vertex2.</param> + /// <param name="vertex2Uv">The vertex2 uv.</param> + /// <param name="uv">The uv.</param> + /// <returns>Point of intersection</returns> + private Vector3 GetRayPlaneIntersectionPointAndUv(Vector3 vertex1, Vector2 vertex1Uv, Vector3 vertex2, Vector2 vertex2Uv, out Vector2 uv) + { + float distance = GetDistanceRelativeToPlane(vertex1, vertex2, out Vector3 pointOfIntersection); + uv = InterpolateUvs(vertex1Uv, vertex2Uv, distance); + return pointOfIntersection; + } + + /// <summary> + /// Computes the distance based on the plane. + /// </summary> + /// <param name="vertex1">The vertex1.</param> + /// <param name="vertex2">The vertex2.</param> + /// <param name="pointOfintersection">The point ofintersection.</param> + /// <returns></returns> + private float GetDistanceRelativeToPlane(Vector3 vertex1, Vector3 vertex2, out Vector3 pointOfintersection) + { + Ray ray = new Ray(vertex1, (vertex2 - vertex1)); + _plane.Raycast(ray, out float distance); + pointOfintersection = ray.GetPoint(distance); + return distance; + } + + /// <summary> + /// Get a uv between the two provided uvs by the distance. + /// </summary> + /// <param name="uv1">The uv1.</param> + /// <param name="uv2">The uv2.</param> + /// <param name="distance">The distance.</param> + /// <returns></returns> + private Vector2 InterpolateUvs(Vector2 uv1, Vector2 uv2, float distance) + { + Vector2 uv = Vector2.Lerp(uv1, uv2, distance); + return uv; + } + + /// <summary> + /// Gets the point perpendicular to the face defined by the provided vertices + //https://docs.unity3d.com/Manual/ComputingNormalPerpendicularVector.html + /// </summary> + /// <param name="vertex1"></param> + /// <param name="vertex2"></param> + /// <param name="vertex3"></param> + /// <returns></returns> + private Vector3 ComputeNormal(Vector3 vertex1, Vector3 vertex2, Vector3 vertex3) + { + Vector3 side1 = vertex2 - vertex1; + Vector3 side2 = vertex3 - vertex1; + + Vector3 normal = Vector3.Cross(side1, side2); + + return normal; + } + + /// <summary> + /// Reverese the normals in a given list + /// </summary> + /// <param name="currentNormals"></param> + /// <returns></returns> + private List<Vector3> FlipNormals(List<Vector3> currentNormals) + { + List<Vector3> flippedNormals = new List<Vector3>(); + + foreach (Vector3 normal in currentNormals) + { + flippedNormals.Add(-normal); + } + + return flippedNormals; + } + + // + private void SmoothVertices() + { + DoSmoothing(ref _positiveSideVertices, ref _positiveSideNormals, ref _positiveSideTriangles); + DoSmoothing(ref _negativeSideVertices, ref _negativeSideNormals, ref _negativeSideTriangles); + } + + private void DoSmoothing(ref List<Vector3> vertices, ref List<Vector3> normals, ref List<int> triangles) + { + normals.ForEach(x => + { + x = Vector3.zero; + }); + + for (int i = 0; i < triangles.Count; i += 3) + { + int vertIndex1 = triangles[i]; + int vertIndex2 = triangles[i + 1]; + int vertIndex3 = triangles[i + 2]; + + Vector3 triangleNormal = ComputeNormal(vertices[vertIndex1], vertices[vertIndex2], vertices[vertIndex3]); + + normals[vertIndex1] += triangleNormal; + normals[vertIndex2] += triangleNormal; + normals[vertIndex3] += triangleNormal; + } + + normals.ForEach(x => + { + x.Normalize(); + }); + } +} \ No newline at end of file diff --git a/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta new file mode 100644 index 00000000..614ab1b1 --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/SlicesMetadata.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b199fecb57864584b8ef0c7dc18044a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LightSaberScripts/WeaponManager.cs b/Assets/Scripts/LightSaberScripts/WeaponManager.cs new file mode 100644 index 00000000..05b099ab --- /dev/null +++ b/Assets/Scripts/LightSaberScripts/WeaponManager.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Valve.VR; +using Valve.VR.InteractionSystem; + +public class WeaponManager : MonoBehaviour +{ + [SerializeField] + [Tooltip("The blade object")] + private GameObject _blade; + + [SerializeField] + [Tooltip("The empty game object located at the tip of the blade")] + private GameObject _tip = null; + + [SerializeField] + [Tooltip("The empty game object located at the base of the blade")] + private GameObject _base = null; + + [SerializeField] + [Tooltip("The amount of force applied to each side of a slice")] + private float _forceAppliedToCut = 3f; + + [SerializeField] + [Tooltip("The extend speed in seconds.")] + private float extendSpeed = 0.1f ; + + [SerializeField] + [Tooltip("The maximum extension of the Blade.")] + private float maximumSwordSize; + + private float minimumSwordSize = 0.0f; + private bool weaponTurnedOn; + public SteamVR_Action_Boolean activateBlade; + private Interactable interactable; + private Vector3 _triggerEnterTipPosition; + private Vector3 _triggerEnterBasePosition; + private Vector3 _triggerExitTipPosition; + + // Start is called before the first frame update + void Start() + { + interactable = GetComponent<Interactable>(); + } + + void Awake() + { + UpdateWeapon(); + } + +//here are testing variables not to be used in the final produkt +int i = 0; +Vector3 vector = new Vector3(-1.0f,0f); + // Update is called once per frame + void Update() + { + //if(i%120 == 0){weaponTurnedOn = !weaponTurnedOn;Debug.Log("Weapon state changed");}i++; //for blade function tests without input. + // if (interactable.attachedToHand != null){ + // SteamVR_Input_Sources source = interactable.attachedToHand.handType; + + // Debug.Log(source.ToString()); + + // if (activateBlade[source].stateDown){ + // weaponTurnedOn = !weaponTurnedOn; + // Debug.Log("Weapon state changed"); + // } + // } + UpdateWeapon(); + + } + + private void OnTriggerEnter(Collider other) + { + Debug.Log("Enter Triggered"); + Debug.Log(other); + _triggerEnterTipPosition = _tip.transform.position; + _triggerEnterBasePosition = _base.transform.position; + } + + private void OnTriggerExit(Collider other) + { + Debug.Log("Exit Triggered"); + _triggerExitTipPosition = _tip.transform.position; + + //Create a triangle between the tip and base so that we can get the normal + Vector3 side1 = _triggerExitTipPosition - _triggerEnterTipPosition; + Vector3 side2 = _triggerExitTipPosition - _triggerEnterBasePosition; + + //Get the point perpendicular to the triangle above which is the normal + //https://docs.unity3d.com/Manual/ComputingNormalPerpendicularVector.html + Vector3 normal = Vector3.Cross(side1, side2).normalized; + + //Transform the normal so that it is aligned with the object we are slicing's transform. + Vector3 transformedNormal = ((Vector3)(other.gameObject.transform.localToWorldMatrix.transpose * normal)).normalized; + + //Get the enter position relative to the object we're cutting's local transform + Vector3 transformedStartingPoint = other.gameObject.transform.InverseTransformPoint(_triggerEnterTipPosition); + + Plane plane = new Plane(); + + plane.SetNormalAndPosition( + transformedNormal, + transformedStartingPoint); + + var direction = Vector3.Dot(Vector3.up, transformedNormal); + + //Flip the plane so that we always know which side the positive mesh is on + if (direction < 0) + { + plane = plane.flipped; + } + + GameObject[] slices = Slicer.Slice(plane, other.gameObject); + Destroy(other.gameObject); + + Rigidbody rigidbody = slices[1].GetComponent<Rigidbody>(); + Vector3 newNormal = transformedNormal + Vector3.up * _forceAppliedToCut; + rigidbody.AddForce(newNormal, ForceMode.Impulse); + } + + void UpdateWeapon() + { + float extendDelta = maximumSwordSize / extendSpeed; + float currentSize = _blade.transform.localScale.y; + + if(weaponTurnedOn) + { + _blade.transform.localScale = new Vector3(_blade.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * -Time.deltaTime), minimumSwordSize, maximumSwordSize), _blade.transform.localScale.z); + + if(_blade.transform.localScale.y <= 0.1) + { + _blade.SetActive(false); + } + } + else + { + if(_blade.activeSelf==false) + { + _blade.SetActive(true); + } + _blade.transform.localScale = new Vector3(_blade.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * Time.deltaTime), minimumSwordSize, maximumSwordSize), _blade.transform.localScale.z); + + + } + } +} diff --git a/Assets/Scripts/WeaponManager.cs.meta b/Assets/Scripts/LightSaberScripts/WeaponManager.cs.meta similarity index 100% rename from Assets/Scripts/WeaponManager.cs.meta rename to Assets/Scripts/LightSaberScripts/WeaponManager.cs.meta diff --git a/Assets/Scripts/WeaponManager.cs b/Assets/Scripts/WeaponManager.cs deleted file mode 100644 index f188d76c..00000000 --- a/Assets/Scripts/WeaponManager.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using Valve.VR; -using Valve.VR.InteractionSystem; - -public class WeaponManager : MonoBehaviour -{ - [Tooltip("Hello I am a test Tooltip.")] - public GameObject bladeHolder; - - - // Blade is extended or not. - private bool weaponTurnedOn; - - private float minimumSwordSize = 0.0f; - - [Tooltip("The maximum extension of the Blade.")] - public float maximumSwordSize; - - [Tooltip("The extend speed in seconds.")] - public float extendSpeed = 0.1f ; - - // Start is called before the first frame update - public SteamVR_Action_Boolean activateBlade; - - private Interactable interactable; - - void Start() { - interactable = GetComponent<Interactable>(); - } - void Awake() - { - UpdateWeapon(); - } - - // Update is called once per frame - void Update() - { - if (interactable.attachedToHand != null){ - SteamVR_Input_Sources source = interactable.attachedToHand.handType; - - Debug.Log(source.ToString()); - - if (activateBlade[source].stateDown){ - weaponTurnedOn = !weaponTurnedOn; - Debug.Log("Weapon state changed"); - } - } - UpdateWeapon(); - - } - - void UpdateWeapon() - { - float extendDelta = maximumSwordSize / extendSpeed; - float currentSize = bladeHolder.transform.localScale.y; - - if(weaponTurnedOn) - { - bladeHolder.transform.localScale = new Vector3(bladeHolder.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * -Time.deltaTime), minimumSwordSize, maximumSwordSize), bladeHolder.transform.localScale.z); - } - else - { - bladeHolder.transform.localScale = new Vector3(bladeHolder.transform.localScale.x, Mathf.Clamp(currentSize + (extendDelta * Time.deltaTime), minimumSwordSize, maximumSwordSize), bladeHolder.transform.localScale.z); - - } - } -} diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index b5434559..eab1ca9c 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -6,6 +6,9 @@ EditorUserSettings: serializedVersion: 4 m_ConfigSettings: RecentlyUsedScenePath-0: + value: 22424703114646680e0b0227036c7c0502240c3f2a2e68252320092a + flags: 0 + RecentlyUsedScenePath-1: value: 22424703114646680e0b0227036c6c111b07142f1f2b233e2867083debf42d flags: 0 vcSharedLogLevel: -- GitLab