コード例 #1
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.name == "PlayerHeadCollision" && sawblade.IsSpinning())
        {
            playerdeathHandler.KillPlayer("death_sawblade");
        }

        else if (other.name == "Bomb" && sawblade.IsSpinning())
        {
            FindObjectOfType <Bomb>().TimerTimeOut();
        }
    }
コード例 #2
0
    private void OnCollisionEnter(Collision collision)
    {
        if (transform.gameObject.name == "polySurface3157")
        {
            if (!sawBlade.IsSpinning())
            {
                return;
            }
            if (collision.gameObject.tag == "Band")
            {
                newHandleObjects         = new List <GameObject>();
                collision.gameObject.tag = "Untagged";
                originalHandleParent     = collision.gameObject.transform.parent.gameObject;
                grabHandle = collision.transform.GetChild(0).gameObject;
                ContactPoint contact = collision.contacts[0];
                newHandleObjects.AddRange(CutMesh(collision.gameObject, contact.point, transform.right, collision.gameObject.GetComponent <Renderer>().material, true));
                for (int i = 0; i < newHandleObjects.Count; ++i)
                {
                    newHandleObjects[i].gameObject.tag   = "Untagged";
                    newHandleObjects[i].transform.parent = originalHandleParent.transform.root;
                    Destroy(newHandleObjects[i].GetComponent <MeshCollider>());
                    newHandleObjects[i].AddComponent <BoxCollider>();
                }

                RaycastHit hit;
                Physics.Raycast(originalHandleParent.transform.position, Vector3.down, out hit);
                UpperPart = hit.collider.gameObject.name;


                if (UpperPart == newHandleObjects[0].name)
                {
                    newHandleObjects[0].transform.parent = originalHandleParent.transform;
                }


                else
                {
                    newHandleObjects[0].layer = LayerMask.NameToLayer("Default");
                    newHandleObjects[0].AddComponent <Rigidbody>();
                    grabHandle.GetComponent <ConfigurableJoint>().connectedBody = newHandleObjects[0].GetComponent <Rigidbody>();
                    grabHandle.transform.parent = newHandleObjects[0].transform;
                    grabHandle.AddComponent <Ball>();
                    Destroy(newHandleObjects[0].GetComponent <ConfigurableJoint>());
                }


                if (UpperPart == newHandleObjects[1].name)
                {
                    newHandleObjects[1].transform.parent = originalHandleParent.transform;
                }

                else
                {
                    newHandleObjects[1].layer = LayerMask.NameToLayer("Default");
                    newHandleObjects[1].AddComponent <Rigidbody>();
                    grabHandle.GetComponent <ConfigurableJoint>().connectedBody = newHandleObjects[1].GetComponent <Rigidbody>();
                    grabHandle.transform.parent = newHandleObjects[1].transform;
                    grabHandle.AddComponent <Ball>();
                    Destroy(newHandleObjects[1].GetComponent <ConfigurableJoint>());
                }
            }
        }

        else if (transform.gameObject.tag == "GlassFragment")
        {
            var controller = PlayerViveController.GetControllerThatHolds(transform.gameObject);

            // Check if player is holding the glass and a piece hasn't just randomly landed on the wire collider
            if (controller != null && controller.gameObject.GetComponent <SteamVR_Behaviour_Pose>().GetVelocity().magnitude >= heldCutForce)
            {
                if (collision.gameObject.tag == "Wire")
                {
                    collision.gameObject.tag = "Untagged";
                    ContactPoint contact = collision.contacts[0];
                    newHandleObjects.AddRange(CutMesh(collision.gameObject, contact.point, transform.right, collision.gameObject.GetComponent <Renderer>().material, false));
                    newHandleObjects[0].tag = "Untagged";
                    newHandleObjects[1].tag = "Untagged";
                }

                else if (collision.gameObject.tag == "Band")
                {
                    newHandleObjects         = new List <GameObject>();
                    collision.gameObject.tag = "Untagged";
                    originalHandleParent     = collision.gameObject.transform.parent.gameObject;
                    grabHandle = collision.transform.GetChild(0).gameObject;
                    ContactPoint contact = collision.contacts[0];
                    newHandleObjects.AddRange(CutMesh(collision.gameObject, contact.point, transform.right, collision.gameObject.GetComponent <Renderer>().material, true));
                    for (int i = 0; i < newHandleObjects.Count; ++i)
                    {
                        newHandleObjects[i].gameObject.tag   = "Untagged";
                        newHandleObjects[i].transform.parent = originalHandleParent.transform.root;
                        Destroy(newHandleObjects[i].GetComponent <MeshCollider>());
                        newHandleObjects[i].AddComponent <BoxCollider>();
                    }

                    RaycastHit hit;
                    Physics.Raycast(originalHandleParent.transform.position, Vector3.down, out hit);
                    UpperPart = hit.collider.gameObject.name;


                    if (UpperPart == newHandleObjects[0].name)
                    {
                        newHandleObjects[0].transform.parent = originalHandleParent.transform;
                    }


                    else
                    {
                        newHandleObjects[0].layer = LayerMask.NameToLayer("Default");
                        newHandleObjects[0].AddComponent <Rigidbody>();
                        grabHandle.GetComponent <ConfigurableJoint>().connectedBody = newHandleObjects[0].GetComponent <Rigidbody>();
                        grabHandle.transform.parent = newHandleObjects[0].transform;
                        grabHandle.AddComponent <Ball>();
                        Destroy(newHandleObjects[0].GetComponent <ConfigurableJoint>());
                    }


                    if (UpperPart == newHandleObjects[1].name)
                    {
                        newHandleObjects[1].transform.parent = originalHandleParent.transform;
                    }

                    else
                    {
                        newHandleObjects[1].layer = LayerMask.NameToLayer("Default");
                        newHandleObjects[1].AddComponent <Rigidbody>();
                        grabHandle.GetComponent <ConfigurableJoint>().connectedBody = newHandleObjects[1].GetComponent <Rigidbody>();
                        grabHandle.transform.parent = newHandleObjects[1].transform;
                        grabHandle.AddComponent <Ball>();
                        Destroy(newHandleObjects[1].GetComponent <ConfigurableJoint>());
                    }
                }
            }
        }
    }