Beispiel #1
0
        // Update is called once per frame
        void Update()
        {
            //Debug.Log(puppetMaster.GetMuscle(head).state.muscleWeightMlp);

            if (Input.GetMouseButtonDown(0))
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                // Raycast to find a ragdoll collider
                RaycastHit hit = new RaycastHit();
                if (Physics.Raycast(ray, out hit, 100f, layers))
                {
                    var broadcaster = hit.collider.attachedRigidbody.GetComponent <MuscleCollisionBroadcaster>();

                    // If is a muscle...
                    if (broadcaster != null)
                    {
                        broadcaster.Hit(unpin, ray.direction * force, hit.point);

                        // Remove the muscle and its children
                        broadcaster.puppetMaster.RemoveMuscleRecursive(broadcaster.puppetMaster.muscles[broadcaster.muscleIndex].joint, true, true, removeMuscleMode);
                    }
                    else
                    {
                        // Not a muscle (any more)
                        //var joint = hit.collider.attachedRigidbody.GetComponent<ConfigurableJoint>();
                        //if (joint != null) Destroy(joint);

                        // Add force
                        hit.collider.attachedRigidbody.AddForceAtPosition(ray.direction * force, hit.point);
                    }

                    // Particle FX
                    particles.transform.position = hit.point;
                    particles.transform.rotation = Quaternion.LookRotation(-ray.direction);
                    particles.Emit(5);
                }
            }

            // Reattach all the missing muscles
            if (Input.GetKeyDown(KeyCode.R))
            {
                puppetMaster.Rebuild();
                skeleton.OnRebuild();
            }
        }