// Update is called once per frame void Update() { //Keep object in front of player if (currentlyHeldCube != null) { Vector3 forwardPlus = transform.position + transform.forward; currentlyHeldCube.transform.position = forwardPlus; currentlyHeldCube.transform.rotation = new Quaternion(); //currentlyHeldCube.GetComponent<Rigidbody>().AddTorque(new Vector3(Random.Range(5f, 7f), Random.Range(5f, 7f), Random.Range(5f, 7f)), ForceMode.Impulse); } //Pickup object if (Input.GetMouseButtonDown(0) && !clicked && currentlyHeldCube == null) { clicked = true; Ray ray = new Ray(transform.position, transform.forward); Debug.DrawRay(transform.position, transform.forward); RaycastHit[] hits = Physics.RaycastAll(ray, 100f); //Get all possible hits foreach (var hit in hits) { GravityCube hitCube = hit.collider.GetComponent <GravityCube>(); //Is this an object that can be managed by the forcefield gun? if (hitCube != null) { currentlyHeldCube = hitCube; return; } } } //Throw object else if (Input.GetMouseButtonDown(0) && !clicked && currentlyHeldCube != null) { Vector3 forwardForce = transform.forward; forwardForce.y += 0.35f; currentlyHeldCube.GetComponent <Rigidbody>().velocity = forwardForce * 15; //currentlyHeldCube.GetComponent<Rigidbody>().AddTorque(new Vector3(10f, 0f, 0f)); currentlyHeldCube = null; } //drop else if (Input.GetMouseButtonDown(1) && !clicked && currentlyHeldCube != null) { Vector3 forwardForce = transform.forward; currentlyHeldCube.GetComponent <Rigidbody>().velocity = forwardForce * 1; currentlyHeldCube = null; } if (Input.GetMouseButtonUp(0) && clicked) { clicked = false; } }
void OnTriggerEnter(Collider collider) { if (collider.tag == "GravityCube" && !isPressed) { isPressed = true; GetComponent <Animator>().SetBool("IsPressed", isPressed); collider.GetComponent <Rigidbody>().AddForce(transform.up * (bounceBack ? bounceBackForce : 0)); triggerables.ForEach((triggerable) => triggerable.trigger()); lastTouchingCube = collider.GetComponent <GravityCube>(); } }