Skip to content

Commit a411ebe

Browse files
committed
surface offset , ignore self collision
1 parent 005f918 commit a411ebe

2 files changed

Lines changed: 58 additions & 33 deletions

File tree

Assets/ProSoftBody/SampleScene.unity

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,11 @@ MonoBehaviour:
238238
m_Name:
239239
m_EditorClassIdentifier:
240240
runOptimizedVersion: 0
241-
collissionSurfaceOffset: 0.1
242-
softness: 0.8
243-
damp: 0.2
244-
mass: 1
245-
debugMode: 0
241+
_collissionSurfaceOffset: 0.1
242+
_softness: 1
243+
_damp: 0.2
244+
_mass: 1
245+
centerOfMasObj: {fileID: 0}
246246
--- !u!1 &435069491
247247
GameObject:
248248
m_ObjectHideFlags: 0
@@ -606,11 +606,11 @@ MonoBehaviour:
606606
m_Name:
607607
m_EditorClassIdentifier:
608608
runOptimizedVersion: 0
609-
collissionSurfaceOffset: 0.1
610-
softness: 1000
611-
damp: 100
612-
mass: 1
613-
debugMode: 0
609+
_collissionSurfaceOffset: 0.1
610+
_softness: 1
611+
_damp: 0.2
612+
_mass: 1
613+
centerOfMasObj: {fileID: 0}
614614
--- !u!1 &963194225
615615
GameObject:
616616
m_ObjectHideFlags: 0
@@ -790,11 +790,11 @@ MonoBehaviour:
790790
m_Name:
791791
m_EditorClassIdentifier:
792792
runOptimizedVersion: 0
793-
collissionSurfaceOffset: 0.1
794-
softness: 0.8
795-
damp: 0.2
796-
mass: 1
797-
debugMode: 1
793+
_collissionSurfaceOffset: 0.1
794+
_softness: 1
795+
_damp: 0.2
796+
_mass: 1
797+
centerOfMasObj: {fileID: 0}
798798
--- !u!1 &1206348761
799799
GameObject:
800800
m_ObjectHideFlags: 0
@@ -1060,11 +1060,11 @@ MonoBehaviour:
10601060
m_Name:
10611061
m_EditorClassIdentifier:
10621062
runOptimizedVersion: 0
1063-
collissionSurfaceOffset: 0.1
1064-
softness: 1.5
1065-
damp: 0.4
1066-
mass: 1
1067-
debugMode: 0
1063+
_collissionSurfaceOffset: 0.1
1064+
_softness: 1
1065+
_damp: 0.2
1066+
_mass: 1
1067+
centerOfMasObj: {fileID: 0}
10681068
--- !u!23 &1756869007
10691069
MeshRenderer:
10701070
m_ObjectHideFlags: 0
@@ -1343,7 +1343,7 @@ GameObject:
13431343
m_Icon: {fileID: 0}
13441344
m_NavMeshLayer: 0
13451345
m_StaticEditorFlags: 0
1346-
m_IsActive: 0
1346+
m_IsActive: 1
13471347
--- !u!4 &2101825148
13481348
Transform:
13491349
m_ObjectHideFlags: 0
@@ -1422,8 +1422,8 @@ MonoBehaviour:
14221422
m_Name:
14231423
m_EditorClassIdentifier:
14241424
runOptimizedVersion: 0
1425-
collissionSurfaceOffset: 0.05
1426-
softness: 0.3
1427-
damp: 0.05
1428-
mass: 0.1
1429-
debugMode: 0
1425+
_collissionSurfaceOffset: 0.1
1426+
_softness: 1
1427+
_damp: 0.2
1428+
_mass: 1
1429+
centerOfMasObj: {fileID: 0}

Assets/ProSoftBody/SoftbodyGenerator.cs

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public class SoftbodyGenerator : MonoBehaviour
1212
private List<Vector3> writableVerticesConvaxed;//{ get; set; }
1313
private List<Vector3> writableNormals { get; set; }
1414
private List<Vector3> writableNormalsConvaxed;//{ get; set; }
15+
16+
private List<SphereCollider> sphereColliders = new List<SphereCollider>();
1517
private int[] writableTris { get; set; }
1618
private List<int> writableTrisConvaxed;// { get; set; }
1719
private Mesh writableMesh;
@@ -31,8 +33,8 @@ public float collissionSurfaceOffset
3133
{
3234
_collissionSurfaceOffset = value;
3335
if (phyisicedVertexes != null)
34-
foreach (var gObject in phyisicedVertexes)
35-
gObject.GetComponent<SphereCollider>().radius = _collissionSurfaceOffset;
36+
foreach (var sCollider in sphereColliders)
37+
sCollider.radius = _collissionSurfaceOffset;
3638
}
3739
}
3840

@@ -148,6 +150,7 @@ public bool gravity
148150
public GameObject centerOfMasObj = null;
149151
private void Awake()
150152
{
153+
151154

152155
writableVertices = new List<Vector3>();
153156
writableVerticesConvaxed = new List<Vector3>();
@@ -216,21 +219,27 @@ private void Awake()
216219
{
217220
var _tempObj = new GameObject("Point "+ _optimizedVertex.IndexOf(vertecs));
218221

219-
220222
if (!debugMode)
221223
_tempObj.hideFlags = HideFlags.HideAndDontSave;
222224

223225
_tempObj.transform.parent = this.transform;
224226
_tempObj.transform.position = vertecs;
225227

228+
229+
// add collider to each of vertex ( sphere collider )
226230
var sphereColider = _tempObj.AddComponent<SphereCollider>() as SphereCollider;
227231
sphereColider.radius = collissionSurfaceOffset;
228-
232+
// add current collider to Collider list ;
233+
sphereColliders.Add(sphereColider);
234+
229235

236+
// add rigidBody to each of vertex
230237
var _tempRigidBody = _tempObj.AddComponent<Rigidbody>();
231238
_tempRigidBody.mass = mass / _optimizedVertex.Count;
232239
_tempRigidBody.drag = physicsRoughness;
233-
//_tempRigidBody.useGravity = false;
240+
241+
242+
234243

235244

236245
_tempObj.AddComponent<DebugColorGameObject>().Color = Random.ColorHSV();
@@ -255,20 +264,32 @@ private void Awake()
255264
// add center of mass vertex to OptimizedVertex list
256265
{
257266
var _tempObj = new GameObject("centerOfMass");
267+
258268
if (!debugMode)
259269
_tempObj.hideFlags = HideFlags.HideAndDontSave;
260270
_tempObj.transform.parent = this.transform;
261271
_tempObj.transform.position = centerOfMass;
262272

273+
// add collider to center of mass as a sphere collider
263274
var sphereColider = _tempObj.AddComponent<SphereCollider>() as SphereCollider;
264275
sphereColider.radius = collissionSurfaceOffset;
276+
// add current collider to Collider list ;
277+
sphereColliders.Add(sphereColider);
265278

279+
// add rigidBody to center of mass as a sphere collider
266280
var _tempRigidBody = _tempObj.AddComponent<Rigidbody>();
267-
//_tempRigidBody.useGravity = false;
281+
268282
centerOfMasObj = _tempObj;
269283
}
270284

271-
285+
// IGNORE COLLISTION BETWEEN ALL OF THE VERTEXES AND CENTER OFF MASS
286+
foreach (var collider1 in sphereColliders)
287+
{
288+
foreach (var collider2 in sphereColliders)
289+
{
290+
Physics.IgnoreCollision(collider1, collider2, true);
291+
}
292+
}
272293

273294
// extract Lines from quad of mesh
274295
List<Vector2Int> tempListOfSprings = new List<Vector2Int>();
@@ -436,12 +457,16 @@ public override void OnInspectorGUI()
436457

437458
softbody.debugMode = EditorGUILayout.Toggle("#Debug mod", softbody.debugMode);
438459
EditorGUILayout.Space();
460+
461+
string[] options = new string[] { " version 1", " version 2" };
439462

463+
440464
softbody.gravity = EditorGUILayout.Toggle("Gravity", softbody.gravity);
441465
softbody.mass = EditorGUILayout.FloatField("Mass(KG)", softbody.mass);
442466
softbody.physicsRoughness = EditorGUILayout.FloatField("Drag (roughness)", softbody.physicsRoughness);
443467
softbody.softness = EditorGUILayout.FloatField("Softbody hardness", softbody.softness);
444468
softbody.damp = EditorGUILayout.FloatField("Softbody damper", softbody.damp);
469+
softbody.collissionSurfaceOffset = EditorGUILayout.FloatField("Softbody Offset", softbody.collissionSurfaceOffset);
445470

446471
}
447472
}

0 commit comments

Comments
 (0)