public void ApplyProperties(Component component, GameObject root) { var path = PropertyTransformer.TransformToStringPath(component); using (var serializer = new SerializedObject(component)) { ApplyArrayToProperty(serializer.FindProperty("m_Colliders"), Colliders.Select(w => ToActualObject(path, w, root)).ToList()); serializer.FindProperty("m_Damping").floatValue = Damping; serializer.FindProperty("m_DampingDistrib").animationCurveValue = DampingDistrib; serializer.FindProperty("m_DistanceToObject").floatValue = DistanceToObject; serializer.FindProperty("m_DistantDisable").boolValue = DistantDisable; serializer.FindProperty("m_Elasticity").floatValue = Elasticity; serializer.FindProperty("m_ElasticityDistrib").animationCurveValue = ElasticityDistrib; serializer.FindProperty("m_EndLength").floatValue = EndLength; serializer.FindProperty("m_EndOffset").vector3Value = EndOffset; ApplyArrayToProperty(serializer.FindProperty("m_Exclusions"), Exclusion.Select(w => ToActualObject(path, w, root)).ToList()); serializer.FindProperty("m_Force").vector3Value = Force; serializer.FindProperty("m_FreezeAxis").enumValueIndex = FreezeAxis; serializer.FindProperty("m_Gravity").vector3Value = Gravity; serializer.FindProperty("m_Inert").floatValue = Inert; serializer.FindProperty("m_InertDistrib").animationCurveValue = InertDistrib; serializer.FindProperty("m_Radius").floatValue = Radius; serializer.FindProperty("m_RadiusDistrib").animationCurveValue = RadiusDistrib; serializer.FindProperty("m_ReferenceObject").objectReferenceValue = ToActualObject(path, ReferenceObject, root); serializer.FindProperty("m_Root").objectReferenceValue = ToActualObject(path, RootReference, root); serializer.FindProperty("m_Stiffness").floatValue = Stiffness; serializer.FindProperty("m_StiffnessDistrib").animationCurveValue = StiffnessDistrib; serializer.FindProperty("m_UpdateMode").enumValueIndex = UpdateMode; serializer.FindProperty("m_UpdateRate").floatValue = UpdateRate; serializer.ApplyModifiedPropertiesWithoutUndo(); } }
private void Awake() { Colliders = GetComponentsInChildren <Collider>(true); MainCollider = GetComponentInChildren <Collider>(true); if (MainCollider == null) { throw new NullReferenceException("Hitbox component does not have a collider!"); } Rigidbodies = Colliders.Select(c => c.GetComponent <Rigidbody>()).Where(rg => rg != null).ToArray(); // by default all rigidbody should by inactive SetRigidbodyActive(false); }
void MakeGameObject() { int num = CompactIndex + 1; var renderMesh = Renderers.First().ToMesh($"RenderMesh{num:00}"); var colliderMeshes = Colliders.Select((c, i) => c.ToMesh($"ColliderMesh{num:00}_{i + 1:00}")); var material = Resources.Load($"Material{num:00}") as Material; var go = new GameObject($"Tile{num}", typeof(MeshFilter), typeof(MeshRenderer), typeof(Rigidbody), typeof(TileInstance)); go.SetActive(false); go.layer = 9; var filter = go.GetComponent <MeshFilter>(); filter.mesh = renderMesh; var renderer = go.GetComponent <MeshRenderer>(); renderer.material = material; var rb = go.GetComponent <Rigidbody>(); rb.isKinematic = MakeKinematic; rb.centerOfMass = Centroid; rb.mass = Mass; // rb.drag = 1f; // rb.angularDrag = 1f; foreach (var mesh in colliderMeshes) { var collider = go.AddComponent <MeshCollider>(); collider.convex = true; collider.sharedMesh = mesh; } //var collider = go.AddComponent<BoxCollider>(); _gameObject = go; }