コード例 #1
0
ファイル: Teleport.cs プロジェクト: ChristinaMak/HackXX2018
    // 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;
        }
    }
コード例 #2
0
    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);
        }
    }
コード例 #3
0
 void Start()
 {
     LastRaycastedObject = RaycastObject.Nothing;
 }
コード例 #4
0
ファイル: Gazer.cs プロジェクト: EtsuN/VR_Project_Ver.2
    // 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);
    }
コード例 #5
0
    // 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);
        }
    }
コード例 #6
0
 // 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;
 }