Inheritance: MonoBehaviour
コード例 #1
0
 public void AddObject(GrabbableObject obj)
 {
     if (!spawnedObjects.Contains(obj))
     {
         spawnedObjects.Add(obj);
     }
 }
コード例 #2
0
    // Finds the closest grabbable object within range of the pinch.
    protected Collider FindClosestGrabbableObject(Vector3 pinch_position)
    {
        Collider closest = null;
        float    closest_sqr_distance = grabObjectDistance * grabObjectDistance;

        Collider[] close_things =
            Physics.OverlapSphere(pinch_position, grabObjectDistance, grabbableLayers);

        for (int j = 0; j < close_things.Length; ++j)
        {
            float sqr_distance = (pinch_position - close_things[j].transform.position).sqrMagnitude;

            if (close_things[j].rigidbody != null && sqr_distance < closest_sqr_distance &&
                !close_things[j].transform.IsChildOf(transform) &&
                close_things[j].tag != "NotGrabbable")
            {
                GrabbableObject grabbable = close_things[j].GetComponent <GrabbableObject>();
                if (grabbable == null || !grabbable.IsGrabbed())
                {
                    closest = close_things[j];
                    closest_sqr_distance = sqr_distance;
                }
            }
        }

        return(closest);
    }
コード例 #3
0
    protected void OnRelease()
    {
        attivaBlocco = true;
        TempoAttuale = (float)Time.time;



        if (active_object_ != null)
        {
            // Notify the grabbable object that is was released.
            GrabbableObject grabbable = active_object_.GetComponent <GrabbableObject>();

            if (grabbable != null)
            {
                grabbable.OnRelease();
            }

            if (grabbable == null || grabbable.rotateQuickly)
            {
            }
            Leap.Utils.IgnoreCollisions(gameObject, active_object_.gameObject, true);
        }
        active_object_ = null;
        //Rigidbody rigi = active_object_.GetComponent<Rigidbody>();
        //rigi.FreezePositionX;
        Hover();
    }
コード例 #4
0
 private void Release()
 {
     grabbableObject.GetComponent <Collider>().enabled     = true;
     grabbableObject.GetComponent <Rigidbody>().useGravity = true;
     grabbableObject.GetComponent <Rigidbody>().AddForce(playerCamera.transform.forward * throwingForce);
     grabbableObject = null;
 }
コード例 #5
0
 public void GrabAnObject(GrabbableObject grabbedObject)
 {
     isGrabbing = true;
     if (grabbedModel != null) grabbedModel.SetActive(true);
     _grabbedObject = grabbedObject;
     _grabbedObject.Grab(grabAnchor.transform, _modelRB);
 }
コード例 #6
0
 void OnTriggerExit(Collider collider)
 {
     if (couldGrab != null && collider.gameObject == couldGrab.gameObject)
     {
         couldGrab = null;
     }
 }
コード例 #7
0
    // public Vector3 InitWithPoints() {

    // }
    public void setSplineLinePoints(Vector3[] splineTargets, float distance)
    {
        line = GetComponent <LineRenderer>();
        line.widthMultiplier = 0.4f + Random.Range(-0.2f, 0.2f);

        int splineCount = splineTargets.Length;

        for (int i = 10; i < splineCount; i += 10)
        {
            GameObject go = new GameObject();
            go.transform.SetParent(transform);
            BoxCollider bc  = go.AddComponent <BoxCollider>();
            Vector3     dif = splineTargets[i] - splineTargets[i - 5];
            bc.transform.position = 0.5f * (splineTargets[i] + splineTargets[i - 5]);
            bc.size = new Vector3(0.5f, 0.5f, 2f * dif.magnitude);
            bc.transform.rotation = Quaternion.LookRotation(dif.normalized);
            bc.gameObject.layer   = LayerMask.NameToLayer("Ignore Collisions");
            GrabbableObject grab = go.AddComponent <GrabbableObject>();
            grab.mat = line.sharedMaterial;
        }

        CatmullRom3 curve = new CatmullRom3();

        curve.Init(splineTargets);

        line.positionCount = (int)(linePointsPerMeter * distance);
        Vector3[] splinePoints = new Vector3[line.positionCount];
        for (int i = 0; i < line.positionCount; i++)
        {
            float t = (float)i / line.positionCount;
            splinePoints[i] = curve.getPointAt(t);
            // Instantiate(viz, splinePoints[i], Quaternion.identity);
        }
        line.SetPositions(splinePoints);
    }
コード例 #8
0
 void ImpulseBeamTool_PlayerGrabbedObject(GrabbableObject grabbedObject)
 {
     Debug.Log("An object has been dropped - " + gameObject.name);
     _grabbedGameObject = grabbedObject.gameObject;
     TriggerEvent();
     _grabbedGameObject = null;
 }
コード例 #9
0
 public void RemoveObject(GrabbableObject obj)
 {
     if (spawnedObjects.Contains(obj))
     {
         spawnedObjects.Remove(obj);
     }
 }
コード例 #10
0
    void Awake()
    {
        Collider col = GetComponent <Collider>();

        if (!col)
        {
            Debug.LogWarning(name + "にコライダーが存在しません。\nGrabbableColliderが正常に機能していない可能性があります。");
        }
        if (!col.isTrigger)
        {
            Debug.LogWarning(name + "にIsTriggerがfalseのコライダーが存在します。\nGrabbableColliderが正常に機能していない可能性があります。");
        }

        if (!obj)
        {
            obj = GetComponent <GrabbableObject>();
        }
        if (obj)
        {
            obj.GrabbableColList.Add(this);
        }
        else
        {
            Debug.LogWarning(name + "のObjが設定されていません。\nGrabbableColliderが正常に機能していない可能性があります。");
        }
    }
コード例 #11
0
    protected Collider GetClosestGrabbableObject(Vector3 pinch_position)
    {
        Collider closest  = null;
        Vector3  distance = new Vector3(grabObjectDistance, 0.0f, 0.0f);

        Collider[] close_things = Physics.OverlapSphere(pinch_position, grabObjectDistance, grabbableLayers);

        for (int j = 0; j < close_things.Length; ++j)
        {
            Vector3 new_distance = pinch_position - close_things[j].transform.position;
            if (close_things[j].rigidbody != null && new_distance.magnitude < distance.magnitude &&
                !close_things[j].transform.IsChildOf(transform) &&
                close_things[j].tag != "NotGrabbable")
            {
                GrabbableObject grabbable = close_things[j].GetComponent <GrabbableObject>();
                if (grabbable == null || !grabbable.IsGrabbed())
                {
                    closest  = close_things[j];
                    distance = new_distance;
                }
            }
        }

        return(closest);
    }
コード例 #12
0
    // Notify grabbable objects when they are ready to grab :)
    protected void Hover()
    {
        Collider hover = FindClosestGrabbableObject(current_pinch_position_);

        if (hover != active_object_ && active_object_ != null)
        {
            GrabbableObject old_grabbable = active_object_.GetComponent <GrabbableObject>();

            if (old_grabbable != null)
            {
                old_grabbable.OnStopHover();
            }
        }

        if (hover != null)
        {
            GrabbableObject new_grabbable = hover.GetComponent <GrabbableObject>();

            if (new_grabbable != null)
            {
                new_grabbable.OnStartHover();
            }
        }

        active_object_ = hover;
    }
コード例 #13
0
    // Update is called once per frame
    void Update()
    {
        wasTextVisible = isTextVisible;
        isTextVisible  = false;

        // Raycast to see if something is in front
        RaycastHit hitInfo;
        bool       interactableInsight = false;
        bool       grabbableInsight    = false;

        /// Raycast merged into update() on 3/14. Jack
        /// Original goal was to fix UISM prompt being blocked.
        /// Turns out I used wasTextVisible + compared with lastText instead.
        if (Physics.Raycast(_playerCamera.position, _playerCamera.forward, out hitInfo, grabRange, ignoreLayer))
        {
            interactableInsight = detectInteractables(hitInfo);
            grabbableInsight    = detectGrabbableObjects(hitInfo);
        }

        //Grab/Use an item.
        if (Input.GetKeyUp(Utilities.INTERACT_JOYSTICK_BUTTON) || Input.GetKeyUp(Utilities.INTERACT_KEYBOARD_BUTTON))
        {
            if (!useItem(hitInfo))              // If item cannot be used, release it.
            {
                releaseItem();
            }
            if (grabbableInsight)
            {
                grabObject(hitInfo);
            }
        }

        if (Input.GetKeyUp(Utilities.EXPAND_LIGHT_JOYSTICK_BUTTON))
        {
            if (_lastObjGrabbed != null && _currentObjGrabbed == null)
            {
                if (!_lastObjGrabbed.name.Contains("Exploding Bomb"))
                {
                    _currentObjGrabbed = _lastObjGrabbed;
                    attachGrabbedObjectToPlayer();
                    _currentObjGrabbed.grabObject();
                }
            }
        }

        // Legacy prompt system clear
        if (floatingTextObj != null)
        {
            floatingTextObj.GetComponent <Renderer> ().enabled = isTextVisible;
            lastText = "";
        }

        // UISM clear only once
        if (m_UISMExist && wasTextVisible && !isTextVisible)
        {
            UIStateManager.controller.ClearPrompt();
            lastText = "";
        }
    }
コード例 #14
0
    void LightUp()
    {
        if (objectCheck)
        {
            GrabbableObject gb = attachment.GetComponent <GrabbableObject>();
            // if grabbed, light up
            if (gb != null && gb.IsGrabbed() && !attachment.GetComponent <Rigidbody>().isKinematic)
            {
                Transform child  = transform.FindChild("Replace Spot Light");
                Light[]   lights = transform.GetComponentsInChildren <Light>();
                foreach (var light in lights)
                {
                    light.enabled = true;
                }
            }
            // not grabbed, light off
            else
            {
                Transform child  = transform.FindChild("Replace Spot Light");
                Light[]   lights = transform.GetComponentsInChildren <Light>();
                foreach (var light in lights)
                {
                    light.enabled = false;
                }
            }
        }
        else if (tagCheck)
        {
            bool lightUp = false;
            foreach (var obj in attachments)
            {
                GrabbableObject gb = obj.GetComponent <GrabbableObject>();
                // if grabbed, light up
                if (gb != null && gb.IsGrabbed() && !obj.GetComponent <Rigidbody>().isKinematic)
                {
                    lightUp = true;
                    break;
                }
                // not grabbed, light off
            }

            if (lightUp)
            {
                Transform child = transform.FindChild("Replace Spot Light");
                if (child != null)
                {
                    child.gameObject.SetActive(true);
                }
            }
            else
            {
                Transform child = transform.FindChild("Replace Spot Light");
                if (child != null)
                {
                    child.gameObject.SetActive(false);
                }
            }
        }
    }
コード例 #15
0
 public void ForceDropObject()
 {
     isGrabbing = false;
     StartCoroutine(GrabCooldown());
     if (grabbedModel != null) grabbedModel.SetActive(false);
     _grabbedObject.ForceRelease();
     _grabbedObject = null;
 }
コード例 #16
0
    // Use this for initialization
    void Start()
    {
        //Asingo el espacio del inventario al inicial

        scriptAtomoGrabbable = this.GetComponent <GrabbableObject> ();

        PaletaFormulacion = GameObject.Find("PaletaFormulacion").gameObject;
    }
コード例 #17
0
 private void HoldObject(GrabbableObject grabbedObject)
 {
     if (PlayerGrabbedObject != null)
     {
         PlayerGrabbedObject(grabbedObject);
     }
     _holdObjectFunction.HoldObject(grabbedObject, _targetOffset, _holdingForce);
 }
コード例 #18
0
 private void DropObject()
 {
     currentHeld.gravityOn();
     currentHeld.GetComponent <Rigidbody>().velocity        = Vector3.zero;
     currentHeld.GetComponent <Rigidbody>().angularVelocity = Vector3.zero;
     currentHeld = null;
     state       = States.EmptyHands;
 }
コード例 #19
0
 private void ReleaseHeldObject()
 {
     if (heldObject != null)
     {
         heldObject.Release();
         heldObject = null;
     }
 }
コード例 #20
0
 public void ChangeObjectInHands(GrabbableObject newObject, Transform hand)
 {
     if (ReferenceEquals(objectLeftHand, objectRightHand) || (newObject.GetComponent <GrabbableObject>() != null && !newObject.GetComponent <GrabbableObject>().RequiresBothHands))
     {
         objectInHands = newObject;
         objectInHands.ChangeParent(hand);
     }
 }
コード例 #21
0
 void OnTriggerEnter(Collider collider)
 {
     if (collider.gameObject.GetComponent <GrabbableObject>() != null)
     {
         SteamVR_Controller.Input((int)trackedObj.index).TriggerHapticPulse(500);
         couldGrab = collider.gameObject.GetComponent <GrabbableObject>();
     }
 }
コード例 #22
0
 public void TryStore(GrabbableObject gb)
 {
     if (socket.GetStoredObject)
     {
         return;
     }
     gb.AttachNewSocket(socket);
 }
コード例 #23
0
ファイル: Weapon.cs プロジェクト: JBazte/ArmySimulatorVR
 private void Start()
 {
     rb        = GetComponent <Rigidbody>();
     grabbable = GetComponent <GrabbableObject>();
     if (!hasMagazine)
     {
         currentAmmo = maxAmmo;
     }
 }
コード例 #24
0
 private void ThrowHeldObject()
 {
     if (heldObject != null)
     {
         Vector3 throwVelocity = Camera.main.transform.forward * throwStrength;
         heldObject.Throw(throwVelocity);
         heldObject = null;
     }
 }
コード例 #25
0
    // Update is called once per frame
    void Update()
    {
        //salvataggio dati
        if (Input.GetKey(KeyCode.S))
        {
            OnApplicationSave();
        }


        //aggiornamento tempo
        timeLeft -= Time.deltaTime;

        //prendo lo script grabbable object per contare quando tempo è preso
        GrabbableObject grabbable = this.GetComponent <GrabbableObject> ();

        //se è preso aumento il contatore
        if (grabbable.grabbed_)
        {
            //start acquisizione punti cubi
            if (timeOld - timeLeft > 0.2f)
            {
                timeOld = timeLeft;
                listaPuntiCuboX.Add(-((this.transform.position.x - 1.48f) / 2.5f));
                listaPuntiCuboY.Add((this.transform.position.y - 0.935f) / 2.5f);
                listaPuntiCuboZ.Add((this.transform.position.z - 1.778f) / 2.5f);
            }
            timeGrabbed += Time.deltaTime;
            soloUnPunto  = true;
        }
        //quando rilascio l'oggetto salvo il tempo nella lista e controllo se ha avuto successo in caso positivo aumento lo score
        if (!grabbable.grabbed_ && soloUnPunto)
        {
            //stop acquisizione cubi
            listaPuntiCuboX.Add(0);
            listaPuntiCuboY.Add(0);
            listaPuntiCuboZ.Add(0);
            timeFromStart.Add((60 - timeLeft));
            soloUnPunto = false;
            listaTempi.Add(timeGrabbed);
            success.Add(0);
            // se a posizione dell'oggetto è superiore alla metà della scena
            if (this.transform.position.x > 1.5)
            {
                score = score + 1;
                //riporto il successo nella lista
                success [success.Count - 1] = 1;
            }
        }


        //se il tempo finisce...
        if (timeLeft < 0)
        {
            print("fine");
        }
    }
コード例 #26
0
    // Update is called once per frame
    void Update()
    {
        // Clicking logic for grabbing objects and shooting portals
        bool interactedWithObject = false;

        if (Input.GetMouseButtonDown(0))
        {
            // If holding grabbable object, release it.
            if (grabbableObject != null)
            {
                Release();
                interactedWithObject = true;
            }
            else
            {
                // Raycast for grabbable objects.
                RaycastHit hit;
                if (Physics.Raycast(transform.position, transform.forward, out hit, grabbingDistance))
                {
                    // Check if looking at grabbable object
                    if (hit.transform.GetComponent <GrabbableObject>() != null)
                    {
                        GrabbableObject targetObject = hit.transform.GetComponent <GrabbableObject>();
                        // Hold the object.
                        if (grabbableObject == null)
                        {
                            Hold(targetObject);
                            interactedWithObject = true;
                        }
                    }
                }
            }
        }

        // Logic for spawning portals.
        if (Input.GetMouseButtonDown(0) && interactedWithObject == false)
        {
            // Perform the raycast.
            RaycastHit hit;
            if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit))
            {
                Debug.Log(hit.transform.name);
                if (hit.transform.GetComponent <PortalArea>() != null)
                {
                    //Vector3 spawnPoint = hit.point;
                    SpawnPortal(hit.point, hit.normal, hit.transform.GetComponent <PortalArea>());
                }
            }
        }

        // Logic for holding the grabbable object.
        if (grabbableObject != null)
        {
            grabbableObject.transform.position = playerCamera.transform.position + playerCamera.transform.forward * grabbingDistance;
        }
    }
コード例 #27
0
    private void OnTriggerExit(Collider other)
    {
        var grabbable = other.GetComponent <GrabbableObject>();

        if (grabbable == hoveredObject)
        {
            hoveredObject.OnHoverEnd();
            hoveredObject = null;
        }
    }
コード例 #28
0
    private void OnTriggerEnter(Collider other)
    {
        var grabbable = other.GetComponent <GrabbableObject>();

        if (grabbable != null)
        {
            hoveredObject = grabbable;
            hoveredObject.OnHoverStart();
        }
    }
コード例 #29
0
 public void releaseItem()
 {
     if (_currentObjGrabbed == null)
     {
         return;
     }
     _currentObjGrabbed.transform.parent = null;
     _currentObjGrabbed.activateItem();
     _currentObjGrabbed = null;
 }
コード例 #30
0
    public void DestroyAttachedObject()
    {
        GrabbableObject attachedObject = socket.GetStoredObject;

        if (attachedObject != null)
        {
            Destroy(attachedObject.gameObject);
        }
        socket.DetAttach();
    }
コード例 #31
0
ファイル: Socket.cs プロジェクト: JBazte/ArmySimulatorVR
    public void DetAttach()
    {
        if (!storedObject)
        {
            return;
        }

        joint.connectedBody = null;
        storedObject        = null;
    }
コード例 #32
0
    void Start()
    {
        initialParent = this.transform.parent;

        grabObjectScript = this.GetComponent <GrabbableObject>();
        leftController   = GameObject.Find("[CameraRig]").transform.GetChild(0).gameObject;
        rightController  = GameObject.Find("[CameraRig]").transform.GetChild(1).gameObject;

        grabObjectScript.objectGrabbedEvent  += ObjectGrabbed;
        grabObjectScript.objectReleasedEvent += ObjectReleased;
    }
コード例 #33
0
	// Update is called once per frame
	void Update () {
        frame = controller.Frame();
        GestureList gestures = frame.Gestures();
        if(gestures.Count != 0)
        {
            foreach (Gesture gest in gestures)
			{
				if(gest.Type == Gesture.GestureType.TYPE_KEY_TAP)
				{
					Debug.Log (gest.Hands.Frontmost.Fingers[1].TipPosition);
					Leap.Vector fingerPosition = gest.Hands.Frontmost.Fingers[1].TipPosition;
					float x = fingerPosition.x;
					float y = fingerPosition.y;
					float z = fingerPosition.z;
					Vector3 position = new Vector3(x,y,z);
					Collider[] close_things =
						Physics.OverlapSphere(position.normalized, 2, -1);
					
					GameObject closest = null;
					float closestDistance = Mathf.Infinity;
					GrabbableObject[] listOfGrabbableObjects= new GrabbableObject[10];
					GameObject[] listOfGameObjects = GameObject.FindGameObjectsWithTag("GrabbableObject");

					

					//float closest_sqr_distance = 2 * 2;
					
					for (int j = 0; j < listOfGameObjects.Length; ++j) {
						if(listOfGameObjects[j] != null)
						{
							float dist = Vector3.Distance (position.normalized, listOfGameObjects[j].transform.position);
							if(closestDistance > dist)
							{
								closest = listOfGameObjects[j];
								closestDistance = dist;
							}
						}
					}
				
					Debug.Log (closest.name.ToString());
				}
			}
                //Debug.Log(gest.Type.ToString());
        }
        
	}
コード例 #34
0
 void DropObject()
 {
     if (_grabbedObject.canBeDropped) {
         isGrabbing = false;
         StartCoroutine(GrabCooldown());
         if (grabbedModel != null) grabbedModel.SetActive(false);
         _grabbedObject.Release();
         _grabbedObject = null;
     }
 }