void UpdateMoveScrewdriverUp() { if (interpolate) { float t = timer / screwdriverUpInterpolateSeconds; guide1.transform.localPosition = Vector3.Lerp(fromPosition1, toPosition1, t); guide2.transform.localPosition = Vector3.Lerp(fromPosition2, toPosition2, t); if (timer >= screwdriverUpInterpolateSeconds) { interpolate = false; timer = 0.0f; objectController.GetComponent <Rigidbody>().isKinematic = false; objectBehaviour.transform.gameObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ; gameState = GameState.moveObjectSide; audioSrc.clip = audioClip; audioSrc.Play(); } else { timer += Time.deltaTime; } } else { fromPosition1 = guide1.transform.localPosition; toPosition1 = new Vector3(guide1.transform.localPosition.x, 2.3f, guide1.transform.localPosition.z); fromPosition2 = guide2.transform.localPosition; toPosition2 = new Vector3(guide2.transform.localPosition.x, 2.3f, guide2.transform.localPosition.z); timer = 0.0f; interpolate = true; } }
// Add offset to be able to use Raycast from FP-View or add logic to ObjectController to use Raycast void MoveObject() { RaycastHit hit; Ray mousePointer = FPCam.ScreenPointToRay(Input.mousePosition); if (objectGrabbed != null && hasObject) { objectGrabbed.transform.position = FPCam.transform.position + FPCam.transform.forward * objectSize; objectGrabbed.transform.localEulerAngles = orientation.transform.localEulerAngles; GroundControl(); } else { if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(mousePointer, out hit)) { if (hit.transform.gameObject.GetComponent <ObjectController>() != null) { objectGrabbed = hit.transform.gameObject.GetComponent <ObjectController>(); objectSize = objectGrabbed.GetComponent <Renderer>().bounds.size.magnitude; hasObject = true; objectGrabbed.placed = false; objectGrabbed.GetComponent <Rigidbody>().useGravity = false; if (inGrid) { objectGrabbed.inGrid = true; } } } } } }
void OnCollisionEnter2D(Collision2D collision) { if (ObjectController.GetComponent <ObjectController>().IsChild(collision.transform) == false) { transform.parent.gameObject.SendMessage("OnCollisionEnter2D", collision); } }
public void Grab(ObjectController gameObj) //Should only be called if isHoldingSomething is false { this.transform.LookAt(gameObj.transform); currentlyEquippedItem = gameObj; Destroy(gameObj.GetComponent <Rigidbody>()); gameObj.transform.SetParent(this.transform); gameObj.transform.localPosition = new Vector3(0.16f, -0.21f, 0.65f); gameObj.transform.localRotation = Quaternion.Euler(-3.9f, -94.16f, -0.125f); isHoldingObject = true; }
// 2nd Iteration /* * TODO : * Use boxraycast from selected object to check surroundings, adjust to surroundings appropriately (optional, turn rigidbody off while * in selection mode to ensure no collision between objects and get funky interactions) * Check on release there is no overlapping (use physics compute penetration) * */ private void Update() { if (objectGrabbed != null) { isGrounded = Physics.CheckBox(objectGrabbed.transform.position, new Vector3(objectGrabbed.GetComponent <Renderer>().bounds.size.x, objectGrabbed.GetComponent <Renderer>().bounds.size.y, objectGrabbed.GetComponent <Renderer>().bounds.size.z)); } MoveObject(); if (Input.GetMouseButtonDown(1)) { objectGrabbed = null; hasObject = false; } }