Add center of mass visualization and update mesh references

- Implement `VisualiseCenterOfMass` script to draw gizmos for Rigidbody center of mass.
- Replace mesh references with updated versions in the scene.
- Adjust physics settings including center of mass and implicit settings.
This commit is contained in:
2025-10-07 21:07:27 +02:00
parent 45abacddb3
commit cac112a79c
3 changed files with 239 additions and 182 deletions

View File

@@ -297,6 +297,184 @@ Mesh:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!43 &319159503
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: pb_Mesh-17466(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
serializedVersion: 12
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 36
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 24
localAABB:
m_Center: {x: -0.15083265, y: 0, z: 0}
m_Extent: {x: 0.049999997, y: 0.4, z: 0.05}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_BonesAABB: []
m_VariableBoneCountWeights:
m_Data:
m_MeshCompression: 0
m_IsReadable: 1
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00100011001200110013001200140015001600150017001600
m_VertexData:
serializedVersion: 3
m_VertexCount: 24
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 24
format: 0
dimension: 4
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 40
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 1152
_typelessdata: 13a74dbecdccccbecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bfcccccc3dcecc4c3e5a81cebdcdccccbecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bf00000000cecc4c3e13a74dbecdcccc3ecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bfcccccc3d0000803f5a81cebdcdcccc3ecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bf000000000000803f5a81cebdcdccccbecdcc4c3d0000803f000000000000000000000000000000000000803f000080bfcdcccc3dcecc4c3e5a81cebdcdccccbecdcc4cbd0000803f000000000000000000000000000000000000803f000080bf00000000cecc4c3e5a81cebdcdcccc3ecdcc4c3d0000803f000000000000000000000000000000000000803f000080bfcdcccc3d0000803f5a81cebdcdcccc3ecdcc4cbd0000803f000000000000000000000000000000000000803f000080bf000000000000803f5a81cebdcdccccbecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bfcccccc3dcecc4c3e13a74dbecdccccbecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bf00000000cecc4c3e5a81cebdcdcccc3ecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bfcccccc3d0000803f13a74dbecdcccc3ecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bf000000000000803f13a74dbecdccccbecdcc4cbd000080bf00000000000000000000000000000000000080bf000080bfcdcccc3dcecc4c3e13a74dbecdccccbecdcc4c3d000080bf00000000000000000000000000000000000080bf000080bf00000000cecc4c3e13a74dbecdcccc3ecdcc4cbd000080bf00000000000000000000000000000000000080bf000080bfcdcccc3d0000803f13a74dbecdcccc3ecdcc4c3d000080bf00000000000000000000000000000000000080bf000080bf000000000000803f13a74dbecdcccc3ecdcc4c3d000000000000803f000000000000803f0000000000000000000080bf000000000000803f5a81cebdcdcccc3ecdcc4c3d000000000000803f000000000000803f0000000000000000000080bfcccccc3d0000803f13a74dbecdcccc3ecdcc4cbd000000000000803f000000000000803f0000000000000000000080bf000000006666663f5a81cebdcdcccc3ecdcc4cbd000000000000803f000000000000803f0000000000000000000080bfcccccc3d6666663f13a74dbecdccccbecdcc4cbd00000000000080bf00000000000080bf0000000000000000000080bfcccccc3d6666663f5a81cebdcdccccbecdcc4cbd00000000000080bf00000000000080bf0000000000000000000080bf000000006666663f13a74dbecdccccbecdcc4c3d00000000000080bf00000000000080bf0000000000000000000080bfcccccc3d0000803f5a81cebdcdccccbecdcc4c3d00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: -0.15083265, y: 0, z: 0}
m_Extent: {x: 0.049999997, y: 0.4, z: 0.05}
m_MeshUsageFlags: 0
m_CookingOptions: 30
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
'm_MeshMetrics[0]': 1.0000001
'm_MeshMetrics[1]': 1
m_MeshOptimizationFlags: 1
m_StreamData:
serializedVersion: 2
offset: 0
size: 0
path:
m_MeshLodInfo:
serializedVersion: 2
m_LodSelectionCurve:
serializedVersion: 1
m_LodSlope: 0
m_LodBias: 0
m_NumLevels: 1
m_SubMeshes:
- serializedVersion: 2
m_Levels:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!1 &330585543
GameObject:
m_ObjectHideFlags: 0
@@ -1070,184 +1248,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: becf5bb493db47a98a3c5d24123d6716, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::ZeroSleepThreshold
--- !u!43 &658955742
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: pb_Mesh-17466(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)(Clone)
serializedVersion: 12
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 36
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 24
localAABB:
m_Center: {x: -0.15083265, y: 0, z: 0}
m_Extent: {x: 0.049999997, y: 0.4, z: 0.05}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_BonesAABB: []
m_VariableBoneCountWeights:
m_Data:
m_MeshCompression: 0
m_IsReadable: 1
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00100011001200110013001200140015001600150017001600
m_VertexData:
serializedVersion: 3
m_VertexCount: 24
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 24
format: 0
dimension: 4
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 40
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 1152
_typelessdata: 13a74dbecdccccbecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bfcccccc3dcecc4c3e5a81cebdcdccccbecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bf00000000cecc4c3e13a74dbecdcccc3ecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bfcccccc3d0000803f5a81cebdcdcccc3ecdcc4c3d00000000000000000000803f000080bf0000000000000000000080bf000000000000803f5a81cebdcdccccbecdcc4c3d0000803f000000000000000000000000000000000000803f000080bfcdcccc3dcecc4c3e5a81cebdcdccccbecdcc4cbd0000803f000000000000000000000000000000000000803f000080bf00000000cecc4c3e5a81cebdcdcccc3ecdcc4c3d0000803f000000000000000000000000000000000000803f000080bfcdcccc3d0000803f5a81cebdcdcccc3ecdcc4cbd0000803f000000000000000000000000000000000000803f000080bf000000000000803f5a81cebdcdccccbecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bfcccccc3dcecc4c3e13a74dbecdccccbecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bf00000000cecc4c3e5a81cebdcdcccc3ecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bfcccccc3d0000803f13a74dbecdcccc3ecdcc4cbd0000000000000000000080bf0000803f0000000000000000000080bf000000000000803f13a74dbecdccccbecdcc4cbd000080bf00000000000000000000000000000000000080bf000080bfcdcccc3dcecc4c3e13a74dbecdccccbecdcc4c3d000080bf00000000000000000000000000000000000080bf000080bf00000000cecc4c3e13a74dbecdcccc3ecdcc4cbd000080bf00000000000000000000000000000000000080bf000080bfcdcccc3d0000803f13a74dbecdcccc3ecdcc4c3d000080bf00000000000000000000000000000000000080bf000080bf000000000000803f13a74dbecdcccc3ecdcc4c3d000000000000803f000000000000803f0000000000000000000080bf000000000000803f5a81cebdcdcccc3ecdcc4c3d000000000000803f000000000000803f0000000000000000000080bfcccccc3d0000803f13a74dbecdcccc3ecdcc4cbd000000000000803f000000000000803f0000000000000000000080bf000000006666663f5a81cebdcdcccc3ecdcc4cbd000000000000803f000000000000803f0000000000000000000080bfcccccc3d6666663f13a74dbecdccccbecdcc4cbd00000000000080bf00000000000080bf0000000000000000000080bfcccccc3d6666663f5a81cebdcdccccbecdcc4cbd00000000000080bf00000000000080bf0000000000000000000080bf000000006666663f13a74dbecdccccbecdcc4c3d00000000000080bf00000000000080bf0000000000000000000080bfcccccc3d0000803f5a81cebdcdccccbecdcc4c3d00000000000080bf00000000000080bf0000000000000000000080bf000000000000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: -0.15083265, y: 0, z: 0}
m_Extent: {x: 0.049999997, y: 0.4, z: 0.05}
m_MeshUsageFlags: 0
m_CookingOptions: 30
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
'm_MeshMetrics[0]': 1.0000001
'm_MeshMetrics[1]': 1
m_MeshOptimizationFlags: 1
m_StreamData:
serializedVersion: 2
offset: 0
size: 0
path:
m_MeshLodInfo:
serializedVersion: 2
m_LodSelectionCurve:
serializedVersion: 1
m_LodSlope: 0
m_LodBias: 0
m_NumLevels: 1
m_SubMeshes:
- serializedVersion: 2
m_Levels:
- serializedVersion: 1
m_IndexStart: 0
m_IndexCount: 0
--- !u!1 &832575517
GameObject:
m_ObjectHideFlags: 0
@@ -1315,6 +1315,7 @@ GameObject:
- component: {fileID: 965777007}
- component: {fileID: 965777009}
- component: {fileID: 965777008}
- component: {fileID: 965777010}
m_Layer: 0
m_Name: Upper
m_TagString: Untagged
@@ -1435,7 +1436,7 @@ Rigidbody:
m_Mass: 0.5
m_LinearDamping: 1
m_AngularDamping: 30
m_CenterOfMass: {x: 8.35, y: 0, z: 0}
m_CenterOfMass: {x: -0.15, y: -0.03, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
@@ -1444,7 +1445,7 @@ Rigidbody:
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitCom: 0
m_ImplicitTensor: 1
m_UseGravity: 1
m_IsKinematic: 0
@@ -1458,7 +1459,7 @@ MeshFilter:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 965776998}
m_Mesh: {fileID: 658955742}
m_Mesh: {fileID: 319159503}
--- !u!23 &965777003
MeshRenderer:
m_ObjectHideFlags: 0
@@ -1742,7 +1743,7 @@ MonoBehaviour:
m_AreaError: 15
m_PreserveMeshAssetOnDestroy: 0
assetGuid:
m_Mesh: {fileID: 658955742}
m_Mesh: {fileID: 319159503}
m_VersionIndex: 1808
m_IsSelectable: 1
m_SelectedFaces:
@@ -1813,6 +1814,21 @@ MonoBehaviour:
softPositionSpring: 300
forceMode: 2
_pump: {fileID: 640614938}
--- !u!114 &965777010
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 965776998}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8df58e72976e4c448281cc5457b0450e, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::VisualiseCenterOfMass
gizmoColor: {r: 0, g: 1, b: 1, a: 1}
gizmoSize: 0.05
drawLineToOrigin: 1
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0

View File

@@ -0,0 +1,38 @@
// CenterOfMassVisualizer.cs
using UnityEngine;
[ExecuteAlways]
[RequireComponent(typeof(Rigidbody))]
public class VisualiseCenterOfMass : MonoBehaviour
{
[Header("Gizmo Settings")]
public Color gizmoColor = Color.cyan;
public float gizmoSize = 0.05f;
public bool drawLineToOrigin = true;
private Rigidbody _rb;
private void OnEnable()
{
_rb = GetComponent<Rigidbody>();
}
private void OnDrawGizmos()
{
if (_rb == null)
_rb = GetComponent<Rigidbody>();
if (_rb == null)
return;
// Rigidbody.centerOfMass is in local space
var worldCom = _rb.transform.TransformPoint(_rb.centerOfMass);
Gizmos.color = gizmoColor;
Gizmos.DrawSphere(worldCom, gizmoSize);
if (drawLineToOrigin)
{
Gizmos.DrawLine(_rb.transform.position, worldCom);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8df58e72976e4c448281cc5457b0450e
timeCreated: 1759863578