// Update is called once per frame void Update() { Ray myRay = new Ray(this.transform.position, this.transform.forward); Debug.DrawRay(myRay.origin, myRay.direction * 1000.0f); RaycastObject lastRaycastObject = null; /// RaycastHit hitObject; if (Physics.Raycast(myRay, out hitObject, Mathf.Infinity)) { //Debug.LogFormat("Raycast hit {0}", hitObject.collider.gameObject.name); RaycastObject raycastHitObject = hitObject.collider.GetComponent <RaycastObject>(); // If the hit object actually had the script, handle it if (raycastHitObject != null) { // If this is a NEW object, call Exit on the old object, and Enter on the new one if (raycastHitObject != lastRaycastObject) { if (lastRaycastObject != null) { lastRaycastObject.OnRaycastExit(); } raycastHitObject.OnRaycastEnter(hitObject); lastRaycastObject = raycastHitObject; } // If this isn't a new object, just call OnRaycast on the same object else { raycastHitObject.OnRaycast(hitObject); } } // If the object didn't have the script on it and there is a last raycast object, deactivate it else if (lastRaycastObject != null) { lastRaycastObject.OnRaycastExit(); lastRaycastObject = null; } } // If there's no object being looked at else if (lastRaycastObject != null) { lastRaycastObject.OnRaycastExit(); lastRaycastObject = null; } }
void Update() { RaycastHit hit; TargetObject = null; Tooltip.text = ""; LastRaycastedObject = RaycastObject.Nothing; if (!PhysicalObject && UI.activeSelf && !UIManager.TheUI.AreAnyUIsActive()) { if (Physics.Raycast(RaycastOrigin.transform.position, transform.forward, out hit, InteractionLength)) { //Have I hit something? //If I have, I should get in this If. if (hit.transform) { if (hit.transform.CompareTag("Interactable")) { TargetObject = hit.transform.gameObject; if (TargetObject.GetComponent <InteractiveObject>().CanBeInteractedWith) { LastRaycastedObject = RaycastObject.Interactable; Tooltip.text = "[E] " + TargetObject.GetComponent <InteractiveObject>().Tooltip; } } else if (hit.transform.CompareTag("Pickupable")) { LastRaycastedObject = RaycastObject.Pickupable; TargetObject = hit.transform.gameObject; Tooltip.text = "[E] Pick Up"; } else if (hit.transform.CompareTag("Physical")) { LastRaycastedObject = RaycastObject.Physical; TargetObject = hit.transform.gameObject; Tooltip.text = "[RMB] Hold Object"; } else if (hit.transform.CompareTag("Document")) { LastRaycastedObject = RaycastObject.Document; TargetObject = hit.transform.gameObject; Tooltip.text = "[E] Read"; } } } } if (Input.GetKeyDown(KeyCode.E)) { if (LastRaycastedObject == RaycastObject.Interactable) { TargetObject.GetComponent <InteractiveObject>().ExecuteInteractiveAction(); } else if (LastRaycastedObject == RaycastObject.Pickupable) { InventoryManager.TheInventory.AddItem( TargetObject.GetComponent <InventoryPickup>().AssociatedItem); TargetObject.SetActive(false); } else if (LastRaycastedObject == RaycastObject.Document) { if (UIManager.TheUI.AreAnyUIsActive()) { return; } DocumentManager.TheManager.OpenDocumentPanel(TargetObject.GetComponent <DocumentScript>()); } } // Physical Object Manipulation if (Input.GetKeyDown(KeyCode.Mouse1)) { // If I am NOT holding something... I need to make some checks. if (!PhysicalObject) { if (TargetObject) { if (LastRaycastedObject == RaycastObject.Physical) { PhysicalObject = TargetObject; PhysicalObject.GetComponent <Collider>().enabled = false; PhysicalObject.GetComponent <Rigidbody>().isKinematic = true; PhysicalObject.GetComponent <Rigidbody>().useGravity = false; } } } // If I AM ACTUALLY holding something, I probably need to throw it. else { PhysicalObject.GetComponent <Collider>().enabled = true; PhysicalObject.GetComponent <Rigidbody>().isKinematic = false; PhysicalObject.GetComponent <Rigidbody>().useGravity = true; PhysicalObject.GetComponent <Rigidbody>().velocity = transform.forward * ThrowStrength; PhysicalObject = null; } } if (PhysicalObject) { PhysicalObject.transform.position = Vector3.Lerp(PhysicalObject.transform.position, HoldOrigin.transform.position, 0.75f); } }
void Start() { LastRaycastedObject = RaycastObject.Nothing; }
// Update is called once per frame void Update() { /* * * //when solving the keypad * if (locked && !isGazing && lastRaycastObject is KeypadObject) * { * if (!fingerMode) * { * fingerMode = true; * ((KeypadObject)lastRaycastObject).setPwMode(true); * //instantiate cursor for finger pointer * cursorInstance = Instantiate(Resources.Load("cursor")) as GameObject; * cursorInstance.SetActive(false);//cursorInstance.GetComponent<Renderer>().enabled = false; * } * if (inputPw.CompareTo("662") == 0) * { * locked = false; * ((KeypadObject)lastRaycastObject).setLocked(false); * } * else if (inputPw.Length > 2) * inputPw = ""; * } * * if (!locked) * { * isGazing = true; * fingerMode = false; * inputPw = ""; * inputCount = 0; * } * * //when the gazed object is interactive raycast object * if (!isGazing && lastRaycastObject is InteractiveRaycastObject) * { * //Debug.LogFormat("hi"); * //lastRaycastObject.TurnOffMessage(); * * //reset back to the gazing mode with no interaction * if (!((InteractiveRaycastObject)lastRaycastObject).getInInteraction()) * { * isGazing = true; * fingerMode = false; * inputPw = ""; * inputCount = 0; * } * else * { * if (fingerMode && !OVRInput.Get(OVRInput.NearTouch.SecondaryIndexTrigger)) * fingerRaycast(); * return; * } * } * */ //Debug.LogFormat("checkpoint"); Ray myRay = new Ray(this.transform.position, this.transform.forward); Debug.DrawRay(transform.position, transform.forward * 1000.0f); RaycastHit hitObject; if (Physics.Raycast(myRay, out hitObject, Mathf.Infinity)) { //Debug.LogFormat("checkpoint"); RaycastObject rayCastHitObject = hitObject.collider.GetComponentInParent <RaycastObject>(); if (rayCastHitObject != null) { if (rayCastHitObject != lastRaycastObject) { if (lastRaycastObject != null) { lastRaycastObject.OnRaycastExit(); } rayCastHitObject.OnRaycastEnter(hitObject); lastRaycastObject = rayCastHitObject; } else { rayCastHitObject.OnRayCast(hitObject); } } else if (lastRaycastObject != null) { Debug.LogFormat("checkpoint1"); lastRaycastObject.OnRaycastExit(); lastRaycastObject = null; } } else if (lastRaycastObject != null) { Debug.LogFormat("checkpoint2"); lastRaycastObject.OnRaycastExit(); lastRaycastObject = null; } //Debug.LogFormat("{0}", hitObject); }
// Update is called once per frame void Update() { var ray = gameObject.GetComponent <Camera>().ScreenPointToRay(new Vector3(Screen.width / 2f, Screen.height / 2f, 0f)); RaycastHit hit; if (_selection != null) { TargetObject = null; LastRaycastedObject = RaycastObject.Nothing; var selectionOutline = _selection.GetComponent <Outline>(); selectionOutline.enabled = false; _selection = null; } if (!PhysicalObject && !J_UIManager.TheUI.AreAnyUIsActive()) { if (Physics.Raycast(ray, out hit, InteractionLength)) { //Have I hit something? if (hit.transform) { var selection = hit.transform; if (hit.transform.CompareTag("Interactable") | hit.transform.CompareTag("Pickupable") | hit.transform.CompareTag("Physical") | hit.transform.CompareTag("Document")) { //Debug.Log("SELECTABLE!"); var selectionOutline = selection.GetComponent <Outline>(); if (selectionOutline != null) { selectionOutline.enabled = true; } _selection = selection; } if (hit.transform.CompareTag("Interactable")) { TargetObject = hit.transform.gameObject; if (TargetObject.GetComponent <J_InteractiveObject>().CanBeInteractedWith) { LastRaycastedObject = RaycastObject.Interactable; Tooltip.text = "[E]" + TargetObject.GetComponent <J_InteractiveObject>().Tooltip; } } else if (hit.transform.CompareTag("Pickupable")) { LastRaycastedObject = RaycastObject.Pickupable; TargetObject = hit.transform.gameObject; //TooltipFade(); Tooltip.text = "[E] Pick Up"; } else if (hit.transform.CompareTag("Physical")) { LastRaycastedObject = RaycastObject.Physical; TargetObject = hit.transform.gameObject; Tooltip.text = "[RMB] Hold Object"; } else if (hit.transform.CompareTag("Document")) { LastRaycastedObject = RaycastObject.Document; TargetObject = hit.transform.gameObject; Tooltip.text = "[E] Read"; } } } } if (_selection == null) { if (Selection) { if (Fade) { Fade = false; Selection = false; Tooltip.GetComponent <Animator>().Play(J_AnimationManager.InteractPrompt_FadeOut, -1, 0f); } } } else { if (!Selection) { Selection = true; Fade = true; Tooltip.GetComponent <Animator>().Play(J_AnimationManager.InteractPrompt_FadeIn, -1, 0f); StartCoroutine("WaitForFadeOut"); } } if (Input.GetKeyDown(KeyCode.E)) { if (LastRaycastedObject == RaycastObject.Interactable) { //LastInteractedObject = TargetObject; TargetObject.GetComponent <J_InteractiveObject>().ExecuteInteractiveAction(); } else if (LastRaycastedObject == RaycastObject.Pickupable) { //Inventory J_AudioManager.GlobalSFXManager.PlaySFX(J_AudioManager.GlobalSFXManager.ItemSound, null); J_InventoryManager.TheInventory.AddItem(TargetObject.GetComponent <J_InventoryPickup>().AssociatedItem); TargetObject.SetActive(false); } else if (LastRaycastedObject == RaycastObject.Document) { //if (UIManager.TheUI.AreAnyUIsActive()) return; Debug.Log("READED"); J_DocumentManager.TheManager.OpenDocumentPannel(TargetObject.GetComponent <J_DocumentScript>()); } } //Physical Object Manipulation if (Input.GetKeyDown(KeyCode.Mouse1)) { //If I am NOT holding something if (!PhysicalObject) { if (TargetObject) { if (LastRaycastedObject == RaycastObject.Physical) { PhysicalObject = TargetObject; PhysicalObject.GetComponent <Collider>().enabled = false; PhysicalObject.GetComponent <Rigidbody>().isKinematic = true; PhysicalObject.GetComponent <Rigidbody>().useGravity = false; } } } //If I AM holding something else { PhysicalObject.GetComponent <Collider>().enabled = true; PhysicalObject.GetComponent <Rigidbody>().isKinematic = false; PhysicalObject.GetComponent <Rigidbody>().useGravity = true; PhysicalObject.GetComponent <Rigidbody>().velocity = (transform.position + (transform.forward * ThrowStrength)) - transform.position; PhysicalObject = null; } } if (PhysicalObject) { PhysicalObject.transform.position = Vector3.Lerp(PhysicalObject.transform.localPosition, HoldOrigin.transform.position, 0.95f); } }
// Start is called before the first frame update void Start() { defaultShader = Shader.Find("Standard"); highlightShader = Shader.Find("Toon/Basic Outline"); //"Outlined/Regular" LastRaycastedObject = RaycastObject.Nothing; }