void Update()
        {
            //Update presets if changed
            if (SBPresetSelect != lastSBPresetSelect)
            {
                SoftBodySettings.ResetToSoftBodyPresets(SBPresetSelect);
            }
            lastSBPresetSelect = SBPresetSelect;

            if (!enableRain)
            {
                return;
            }
            if ((Time.time - lastBunnyTime) > (1 / softBodiesPerSecond))
            {
                Vector3 pos = new Vector3(0, 0, 0);

                pos.x = startAreaOfRain.center.x + UnityEngine.Random.Range(-startAreaOfRain.width / 2, startAreaOfRain.width / 2);
                pos.z = startAreaOfRain.center.y + UnityEngine.Random.Range(-startAreaOfRain.height / 2, startAreaOfRain.height / 2);
                pos.y = fromHeight;

                GameObject     go    = BSoftBodyWMesh.CreateNew(pos, UnityEngine.Random.rotation, anyMeshSettings.Build(), false, SBPresetSelect);
                BSoftBodyWMesh bSoft = go.GetComponent <BSoftBodyWMesh>();

                bSoft.meshSettings.autoWeldVertices     = anyMeshSettings.autoWeldVertices;
                bSoft.meshSettings.autoWeldThreshold    = anyMeshSettings.autoWeldThreshold;
                bSoft.meshSettings.recalculateNormals   = anyMeshSettings.recalculateNormals;
                bSoft.meshSettings.addBackFaceTriangles = anyMeshSettings.addBackFaceTriangles;
                bSoft.meshSettings.recalculateBounds    = anyMeshSettings.recalculateBounds;
                //bSoft.meshSettings.optimize = anyMeshSettings.optimize;

                bSoft.SoftBodySettings = SoftBodySettings;                  //play with settings

                //bSoft.SoftBodySettings.config.Collisions = collisionMask;

                bSoft._BuildCollisionObject();

                //randomize color for effect
                go.GetComponent <MeshRenderer>().material.color =
                    new Color(UnityEngine.Random.Range(0.0f, 1.0f), UnityEngine.Random.Range(0.0f, 1.0f), UnityEngine.Random.Range(0.0f, 1.0f));

                Destroy(go, lifetime);

                lastBunnyTime = Time.time;
            }
        }
        /// <summary>
        /// Create new SoftBody object using a Mesh
        /// </summary>
        /// <param name="position">World position</param>
        /// <param name="rotation">rotation</param>
        /// <param name="mesh">Need to provide a mesh</param>
        /// <param name="buildNow">Build now or configure properties and call BuildSoftBody() after</param>
        /// <param name="sBpresetSelect">Use a particular softBody configuration pre select values</param>
        /// <returns></returns>
        public static GameObject CreateNew(Vector3 position, Quaternion rotation, Mesh mesh, bool buildNow, SBSettingsPresets sBpresetSelect = SBSettingsPresets.ShapeMatching)
        {
            GameObject go = new GameObject();
            go.transform.position = position;
            go.transform.rotation = rotation;
            BSoftBodyWMesh BSoft = go.AddComponent<BSoftBodyWMesh>();

            BSoft.meshSettings.UserMesh = mesh;
            MeshRenderer meshRenderer = go.GetComponent<MeshRenderer>();
            UnityEngine.Material material = new UnityEngine.Material(Shader.Find("Standard"));
            meshRenderer.material = material;

            BSoft.SoftBodySettings.ResetToSoftBodyPresets(sBpresetSelect); //Apply SoftBody settings presets

            if (buildNow)
                BSoft.BuildSoftBody();  //Build the SoftBody
            go.name = "BSoftBodyWMesh";
            return go;
        }
Ejemplo n.º 3
0
        void Update()
        {
            //Update presets if changed
            if (SBPresetSelect != lastSBPresetSelect)
                SoftBodySettings.ResetToSoftBodyPresets(SBPresetSelect);
            lastSBPresetSelect = SBPresetSelect;

            if (!enableRain)
                return;
            if ((Time.time - lastBunnyTime) > (1 / softBodiesPerSecond))
            {
                Vector3 pos = new Vector3(0, 0, 0);

                pos.x = startAreaOfRain.center.x + UnityEngine.Random.Range(-startAreaOfRain.width / 2, startAreaOfRain.width / 2);
                pos.z = startAreaOfRain.center.y + UnityEngine.Random.Range(-startAreaOfRain.height / 2, startAreaOfRain.height / 2);
                pos.y = fromHeight;

                GameObject go = BSoftBodyWMesh.CreateNew(pos, UnityEngine.Random.rotation, anyMeshSettings.Build(), false, SBPresetSelect);
                BSoftBodyWMesh bSoft = go.GetComponent<BSoftBodyWMesh>();

                bSoft.meshSettings. autoWeldVertices = anyMeshSettings.autoWeldVertices;
                bSoft.meshSettings.autoWeldThreshold = anyMeshSettings.autoWeldThreshold;
                bSoft.meshSettings.recalculateNormals = anyMeshSettings.recalculateNormals;
                bSoft.meshSettings.addBackFaceTriangles = anyMeshSettings.addBackFaceTriangles;
                bSoft.meshSettings.recalculateBounds = anyMeshSettings.recalculateBounds;
                bSoft.meshSettings.optimize = anyMeshSettings.optimize;

                bSoft.SoftBodySettings = SoftBodySettings;  //play with settings

                //bSoft.SoftBodySettings.config.Collisions = collisionMask;

                bSoft._BuildCollisionObject();

                //randomize color for effect
                go.GetComponent<MeshRenderer>().material.color =
                  new Color(UnityEngine.Random.Range(0.0f, 1.0f), UnityEngine.Random.Range(0.0f, 1.0f), UnityEngine.Random.Range(0.0f, 1.0f));

                Destroy(go, lifetime);

                lastBunnyTime = Time.time;
            }
        }
Ejemplo n.º 4
0
        //TODO: lots! These presets need work.

        /// <summary>
        /// Reset and Configure SoftBody settings for some general preset values.  Can use as a starting point before optimization.
        /// </summary>
        /// <param name="preset"></param>
        public void ResetToSoftBodyPresets(SBSettingsPresets preset)
        {
            sBpresetSelect            = preset; //save last applied preset
            totalMass                 = 10f;
            scale                     = Vector3.one;
            fromFaces                 = true;
            bframe                    = true;
            bvolume                   = false;
            generateClusters          = false;
            bendingConstraintDistance = 2;
            randomizeConstraints      = true;
            config                    = new SBConfig();
            sBMaterial                = new SBMaterial();

            switch (preset)
            {
            case SBSettingsPresets.Default:
                //reset itself
                break;

            case SBSettingsPresets.Cloth:
                fromFaces = false;
                bvolume   = false;
                bframe    = false;
                sBMaterial.LinearStiffness = 0.5f;

                break;

            case SBSettingsPresets.Rope:
                config.PositionIterations  = 20;
                sBMaterial.LinearStiffness = 0.5f;
                bendingConstraintDistance  = 0;
                randomizeConstraints       = false;
                fromFaces = false;
                bframe    = false;
                bvolume   = false;

                break;

            case SBSettingsPresets.ConvexHull:

                break;

            case SBSettingsPresets.Pressurized:
                sBMaterial.LinearStiffness = 0.1f;
                config.DynamicFriction     = 1;
                config.Damping             = 0.001f; // fun factor...
                config.Pressure            = 2500;
                fromFaces = true;
                break;

            case SBSettingsPresets.Aerodynamic:
                config.Lift      = 0.004f;
                config.Drag      = 0.0003f;
                config.aeroModel = AeroModel.VertexTwoSided;
                break;

            case SBSettingsPresets.Volume:

                sBMaterial.LinearStiffness = 0.45f;
                config.VolumeConversation  = 20;
                totalMass = 50f;
                fromFaces = true;
                bvolume   = true;
                bframe    = false;



                break;

            case SBSettingsPresets.ShapeMatching:
                sBMaterial.LinearStiffness = 0.5f;
                config.DynamicFriction     = 0.5f;
                config.PoseMatching        = 0.05f;
                config.PositionIterations  = 10;

                randomizeConstraints = true;
                totalMass            = 100f;
                fromFaces            = true;
                bvolume = false;
                bframe  = true;

                break;


            case SBSettingsPresets.ropeStick:
                config.AnchorHardness       = 0.7f;
                config.ClusterIterations    = 4;
                config.RigidContactHardness = 0.1f;
                config.DynamicFriction      = 0.2f;
                config.Drag                    = 0f;
                config.DriftIterations         = 0;
                config.Damping                 = 0.005f;
                config.KineticContactHardness  = 0.1f;
                config.Lift                    = 0;
                config.PoseMatching            = 0;
                config.MaxVolume               = 1.0f;
                config.PositionIterations      = 1;
                config.Pressure                = 0;
                config.SoftKineticImpulseSplit = 0.5f;
                config.SoftRigidImpulseSplit   = 0.5f;
                config.SoftSoftImpulseSplit    = 0.5f;
                config.Shr = 1f;
                config.SoftKineticHardness      = 1f;
                config.SoftRigidHardness        = 0.1f;
                config.SoftSoftHardness         = 0.5f;
                config.Timescale                = 1;
                config.VolumeConversation       = 0f;
                config.VelocityCorrectionFactor = 1f;
                config.VelocityIterations       = 0;

                sBMaterial.LinearStiffness  = 1.0f;
                sBMaterial.AngularStiffness = 1.0f;
                sBMaterial.VolumeStiffness  = 1.0f;

                bframe           = false;
                fromFaces        = false;
                bvolume          = false;
                generateClusters = false;
                totalMass        = 0.01f;

                break;

            default:
                break;
            }
        }
Ejemplo n.º 5
0
        //TODO: lots! These presets need work.
        /// <summary>
        /// Reset and Configure SoftBody settings for some general preset values.  Can use as a starting point before optimization.
        /// </summary>
        /// <param name="preset"></param>
        public void ResetToSoftBodyPresets(SBSettingsPresets preset)
        {
            sBpresetSelect = preset;  //save last applied preset
            totalMass = 10f;
            scale = Vector3.one;
            fromFaces = true;
            bframe = true;
            bvolume = false;
            generateClusters = false;
            bendingConstraintDistance = 2;
            randomizeConstraints = true;
            config = new SBConfig();
            sBMaterial = new SBMaterial();

            switch (preset)
            {
                case SBSettingsPresets.Default:
                    //reset itself
                    break;
                case SBSettingsPresets.Cloth:
                    fromFaces = false;
                    bvolume = false;
                    bframe = false;
                    sBMaterial.LST = 0.5f;

                    break;
                case SBSettingsPresets.Rope:
                    config.PIterations = 20;
                    sBMaterial.LST = 0.5f;
                    bendingConstraintDistance = 0;
                    randomizeConstraints = false;
                    fromFaces = false;
                    bframe = false;
                    bvolume = false;

                    break;
                case SBSettingsPresets.ConvexHull:

                    break;

                case SBSettingsPresets.Pressurized:
                    sBMaterial.LST = 0.1f;
                    config.DF = 1;
                    config.DP = 0.001f; // fun factor...
                    config.PR = 2500;
                    fromFaces = true;
                    break;

                case SBSettingsPresets.Aerodynamic:
                    config.LF = 0.004f;
                    config.DG = 0.0003f;
                    config.aeroModel = AeroModel.VTwoSided;
                    break;
                case SBSettingsPresets.Volume:

                    sBMaterial.LST = 0.45f;
                    config.VC = 20;
                    totalMass = 50f;
                    fromFaces = true;
                    bvolume = true;
                    bframe = false;

                    break;
                case SBSettingsPresets.ShapeMatching:
                    sBMaterial.LST = 0.5f;
                    config.DF = 0.5f;
                    config.MT = 0.05f;
                    config.PIterations = 10;

                    randomizeConstraints = true;
                    totalMass = 100f;
                    fromFaces = true;
                    bvolume = false;
                    bframe = true;

                    break;

                case SBSettingsPresets.ropeStick:
                    config.Ahr = 0.7f;
                    config.CIterations = 4;
                    config.Chr = 0.1f;
                    config.DF = 0.2f;
                    config.DG = 0f;
                    config.DIterations = 0;
                    config.DP = 0.005f;
                    config.Khr = 0.1f;
                    config.LF = 0;
                    config.MT = 0;
                    config.MaxVolume = 1.0f;
                    config.PIterations = 1;
                    config.PR = 0;
                    config.SKSplitCL = 0.5f;
                    config.SRSplitCL = 0.5f;
                    config.SSSplitCL = 0.5f;
                    config.Shr = 1f;
                    config.SkhrCL = 1f;
                    config.SrhrCL = 0.1f;
                    config.SshrCL = 0.5f;
                    config.Timescale = 1;
                    config.VC = 0f;
                    config.Vcf = 1f;
                    config.Viterations = 0;

                    sBMaterial.LST = 1.0f;
                    sBMaterial.AST = 1.0f;
                    sBMaterial.VST = 1.0f;

                    bframe = false;
                    fromFaces = false;
                    bvolume = false;
                    generateClusters = false;
                    totalMass = 0.01f;

                    break;
                default:
                    break;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Create new SoftBody object using a Mesh
        /// </summary>
        /// <param name="position">World position</param>
        /// <param name="rotation">rotation</param>
        /// <param name="mesh">Need to provide a mesh</param>
        /// <param name="buildNow">Build now or configure properties and call BuildSoftBody() after</param>
        /// <param name="sBpresetSelect">Use a particular softBody configuration pre select values</param>
        /// <returns></returns>
        public static GameObject CreateNew(Vector3 position, Quaternion rotation, Mesh mesh, bool buildNow, SBSettingsPresets sBpresetSelect = SBSettingsPresets.ShapeMatching)
        {
            GameObject go = new GameObject("SoftBodyWMesh");

            go.transform.position = position;
            go.transform.rotation = rotation;
            BSoftBodyWMesh BSoft = go.AddComponent <BSoftBodyWMesh>();

            BSoft.meshSettings.UserMesh = mesh;
            MeshRenderer meshRenderer = go.GetComponent <MeshRenderer>();

            UnityEngine.Material material = new UnityEngine.Material(Shader.Find("Standard"));
            meshRenderer.material = material;

            BSoft.SoftBodySettings.ResetToSoftBodyPresets(sBpresetSelect); //Apply SoftBody settings presets

            if (buildNow)
            {
                BSoft._BuildCollisionObject();  //Build the SoftBody
            }
            go.name = "BSoftBodyWMesh";
            return(go);
        }
Ejemplo n.º 7
0
        //TODO: lots! These presets need work.

        /// <summary>
        /// Reset and Configure SoftBody settings for some general preset values.  Can use as a starting point before optimization.
        /// </summary>
        /// <param name="preset"></param>
        public void ResetToSoftBodyPresets(SBSettingsPresets preset)
        {
            sBpresetSelect            = preset; //save last applied preset
            totalMass                 = 10f;
            scale                     = Vector3.one;
            fromFaces                 = true;
            bframe                    = true;
            bvolume                   = false;
            generateClusters          = false;
            bendingConstraintDistance = 2;
            randomizeConstraints      = true;
            config                    = new SBConfig();
            sBMaterial                = new SBMaterial();

            switch (preset)
            {
            case SBSettingsPresets.Default:
                //reset itself
                break;

            case SBSettingsPresets.Cloth:
                fromFaces      = false;
                bvolume        = false;
                bframe         = false;
                sBMaterial.LST = 0.5f;

                break;

            case SBSettingsPresets.Rope:
                config.PIterations        = 20;
                sBMaterial.LST            = 0.5f;
                bendingConstraintDistance = 0;
                randomizeConstraints      = false;
                fromFaces = false;
                bframe    = false;
                bvolume   = false;

                break;

            case SBSettingsPresets.ConvexHull:

                break;

            case SBSettingsPresets.Pressurized:
                sBMaterial.LST = 0.1f;
                config.DF      = 1;
                config.DP      = 0.001f; // fun factor...
                config.PR      = 2500;
                fromFaces      = true;
                break;

            case SBSettingsPresets.Aerodynamic:
                config.LF        = 0.004f;
                config.DG        = 0.0003f;
                config.aeroModel = AeroModel.VTwoSided;
                break;

            case SBSettingsPresets.Volume:

                sBMaterial.LST = 0.45f;
                config.VC      = 20;
                totalMass      = 50f;
                fromFaces      = true;
                bvolume        = true;
                bframe         = false;



                break;

            case SBSettingsPresets.ShapeMatching:
                sBMaterial.LST     = 0.5f;
                config.DF          = 0.5f;
                config.MT          = 0.05f;
                config.PIterations = 10;

                randomizeConstraints = true;
                totalMass            = 100f;
                fromFaces            = true;
                bvolume = false;
                bframe  = true;

                break;


            case SBSettingsPresets.ropeStick:
                config.Ahr         = 0.7f;
                config.CIterations = 4;
                config.Chr         = 0.1f;
                config.DF          = 0.2f;
                config.DG          = 0f;
                config.DIterations = 0;
                config.DP          = 0.005f;
                config.Khr         = 0.1f;
                config.LF          = 0;
                config.MT          = 0;
                config.MaxVolume   = 1.0f;
                config.PIterations = 1;
                config.PR          = 0;
                config.SKSplitCL   = 0.5f;
                config.SRSplitCL   = 0.5f;
                config.SSSplitCL   = 0.5f;
                config.Shr         = 1f;
                config.SkhrCL      = 1f;
                config.SrhrCL      = 0.1f;
                config.SshrCL      = 0.5f;
                config.Timescale   = 1;
                config.VC          = 0f;
                config.Vcf         = 1f;
                config.Viterations = 0;

                sBMaterial.LST = 1.0f;
                sBMaterial.AST = 1.0f;
                sBMaterial.VST = 1.0f;

                bframe           = false;
                fromFaces        = false;
                bvolume          = false;
                generateClusters = false;
                totalMass        = 0.01f;

                break;

            default:
                break;
            }
        }
Ejemplo n.º 8
0
        //TODO: lots! These presets need work.
        /// <summary>
        /// Reset and Configure SoftBody settings for some general preset values.  Can use as a starting point before optimization.
        /// </summary>
        /// <param name="preset"></param>
        public void ResetToSoftBodyPresets(SBSettingsPresets preset)
        {
            sBpresetSelect = preset;  //save last applied preset
            totalMass = 10f;
            scale = Vector3.one;
            fromFaces = true;
            bframe = true;
            bvolume = false;
            generateClusters = false;
            bendingConstraintDistance = 2;
            randomizeConstraints = true;
            config = new SBConfig();
            sBMaterial = new SBMaterial();

            switch (preset)
            {
                case SBSettingsPresets.Default:
                    //reset itself
                    break;
                case SBSettingsPresets.Cloth:
                    fromFaces = false;
                    bvolume = false;
                    bframe = false;
                    sBMaterial.LinearStiffness = 0.5f;

                    break;
                case SBSettingsPresets.Rope:
                    config.PositionIterations = 20;
                    sBMaterial.LinearStiffness = 0.5f;
                    bendingConstraintDistance = 0;
                    randomizeConstraints = false;
                    fromFaces = false;
                    bframe = false;
                    bvolume = false;

                    break;
                case SBSettingsPresets.ConvexHull:

                    break;

                case SBSettingsPresets.Pressurized:
                    sBMaterial.LinearStiffness = 0.1f;
                    config.DynamicFriction = 1;
                    config.Damping = 0.001f; // fun factor...
                    config.Pressure = 2500;
                    fromFaces = true;
                    break;

                case SBSettingsPresets.Aerodynamic:
                    config.Lift = 0.004f;
                    config.Drag = 0.0003f;
                    config.aeroModel = AeroModel.VertexTwoSided;
                    break;
                case SBSettingsPresets.Volume:

                    sBMaterial.LinearStiffness = 0.45f;
                    config.VolumeConversation = 20;
                    totalMass = 50f;
                    fromFaces = true;
                    bvolume = true;
                    bframe = false;

                    break;
                case SBSettingsPresets.ShapeMatching:
                    sBMaterial.LinearStiffness = 0.5f;
                    config.DynamicFriction = 0.5f;
                    config.PoseMatching = 0.05f;
                    config.PositionIterations = 10;

                    randomizeConstraints = true;
                    totalMass = 100f;
                    fromFaces = true;
                    bvolume = false;
                    bframe = true;

                    break;

                case SBSettingsPresets.ropeStick:
                    config.AnchorHardness = 0.7f;
                    config.ClusterIterations = 4;
                    config.RigidContactHardness = 0.1f;
                    config.DynamicFriction = 0.2f;
                    config.Drag = 0f;
                    config.DriftIterations = 0;
                    config.Damping = 0.005f;
                    config.KineticContactHardness = 0.1f;
                    config.Lift = 0;
                    config.PoseMatching = 0;
                    config.MaxVolume = 1.0f;
                    config.PositionIterations = 1;
                    config.Pressure = 0;
                    config.SoftKineticImpulseSplit = 0.5f;
                    config.SoftRigidImpulseSplit = 0.5f;
                    config.SoftSoftImpulseSplit = 0.5f;
                    config.Shr = 1f;
                    config.SoftKineticHardness = 1f;
                    config.SoftRigidHardness = 0.1f;
                    config.SoftSoftHardness = 0.5f;
                    config.Timescale = 1;
                    config.VolumeConversation = 0f;
                    config.VelocityCorrectionFactor = 1f;
                    config.VelocityIterations = 0;

                    sBMaterial.LinearStiffness = 1.0f;
                    sBMaterial.AngularStiffness = 1.0f;
                    sBMaterial.VolumeStiffness = 1.0f;

                    bframe = false;
                    fromFaces = false;
                    bvolume = false;
                    generateClusters = false;
                    totalMass = 0.01f;

                    break;
                default:
                    break;
            }
        }