public void AddObject(GrabbableObject obj) { if (!spawnedObjects.Contains(obj)) { spawnedObjects.Add(obj); } }
// 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); }
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(); }
private void Release() { grabbableObject.GetComponent <Collider>().enabled = true; grabbableObject.GetComponent <Rigidbody>().useGravity = true; grabbableObject.GetComponent <Rigidbody>().AddForce(playerCamera.transform.forward * throwingForce); grabbableObject = null; }
public void GrabAnObject(GrabbableObject grabbedObject) { isGrabbing = true; if (grabbedModel != null) grabbedModel.SetActive(true); _grabbedObject = grabbedObject; _grabbedObject.Grab(grabAnchor.transform, _modelRB); }
void OnTriggerExit(Collider collider) { if (couldGrab != null && collider.gameObject == couldGrab.gameObject) { couldGrab = null; } }
// 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); }
void ImpulseBeamTool_PlayerGrabbedObject(GrabbableObject grabbedObject) { Debug.Log("An object has been dropped - " + gameObject.name); _grabbedGameObject = grabbedObject.gameObject; TriggerEvent(); _grabbedGameObject = null; }
public void RemoveObject(GrabbableObject obj) { if (spawnedObjects.Contains(obj)) { spawnedObjects.Remove(obj); } }
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が正常に機能していない可能性があります。"); } }
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); }
// 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; }
// 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 = ""; } }
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); } } } }
public void ForceDropObject() { isGrabbing = false; StartCoroutine(GrabCooldown()); if (grabbedModel != null) grabbedModel.SetActive(false); _grabbedObject.ForceRelease(); _grabbedObject = null; }
// Use this for initialization void Start() { //Asingo el espacio del inventario al inicial scriptAtomoGrabbable = this.GetComponent <GrabbableObject> (); PaletaFormulacion = GameObject.Find("PaletaFormulacion").gameObject; }
private void HoldObject(GrabbableObject grabbedObject) { if (PlayerGrabbedObject != null) { PlayerGrabbedObject(grabbedObject); } _holdObjectFunction.HoldObject(grabbedObject, _targetOffset, _holdingForce); }
private void DropObject() { currentHeld.gravityOn(); currentHeld.GetComponent <Rigidbody>().velocity = Vector3.zero; currentHeld.GetComponent <Rigidbody>().angularVelocity = Vector3.zero; currentHeld = null; state = States.EmptyHands; }
private void ReleaseHeldObject() { if (heldObject != null) { heldObject.Release(); heldObject = null; } }
public void ChangeObjectInHands(GrabbableObject newObject, Transform hand) { if (ReferenceEquals(objectLeftHand, objectRightHand) || (newObject.GetComponent <GrabbableObject>() != null && !newObject.GetComponent <GrabbableObject>().RequiresBothHands)) { objectInHands = newObject; objectInHands.ChangeParent(hand); } }
void OnTriggerEnter(Collider collider) { if (collider.gameObject.GetComponent <GrabbableObject>() != null) { SteamVR_Controller.Input((int)trackedObj.index).TriggerHapticPulse(500); couldGrab = collider.gameObject.GetComponent <GrabbableObject>(); } }
public void TryStore(GrabbableObject gb) { if (socket.GetStoredObject) { return; } gb.AttachNewSocket(socket); }
private void Start() { rb = GetComponent <Rigidbody>(); grabbable = GetComponent <GrabbableObject>(); if (!hasMagazine) { currentAmmo = maxAmmo; } }
private void ThrowHeldObject() { if (heldObject != null) { Vector3 throwVelocity = Camera.main.transform.forward * throwStrength; heldObject.Throw(throwVelocity); heldObject = null; } }
// 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"); } }
// 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; } }
private void OnTriggerExit(Collider other) { var grabbable = other.GetComponent <GrabbableObject>(); if (grabbable == hoveredObject) { hoveredObject.OnHoverEnd(); hoveredObject = null; } }
private void OnTriggerEnter(Collider other) { var grabbable = other.GetComponent <GrabbableObject>(); if (grabbable != null) { hoveredObject = grabbable; hoveredObject.OnHoverStart(); } }
public void releaseItem() { if (_currentObjGrabbed == null) { return; } _currentObjGrabbed.transform.parent = null; _currentObjGrabbed.activateItem(); _currentObjGrabbed = null; }
public void DestroyAttachedObject() { GrabbableObject attachedObject = socket.GetStoredObject; if (attachedObject != null) { Destroy(attachedObject.gameObject); } socket.DetAttach(); }
public void DetAttach() { if (!storedObject) { return; } joint.connectedBody = null; storedObject = null; }
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; }
// 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()); } }
void DropObject() { if (_grabbedObject.canBeDropped) { isGrabbing = false; StartCoroutine(GrabCooldown()); if (grabbedModel != null) grabbedModel.SetActive(false); _grabbedObject.Release(); _grabbedObject = null; } }