void OnTriggerEnter(Collider other) { int i = 0; foreach (Collider clipCol in clips) { if (other == clipCol) { GameObject clipObj = other.transform.parent.gameObject; if (currentClip == clipObj || oldClip == clipObj) { continue; } VRTK.VRTK_InteractableObject interaction = clipObj.GetComponent <VRTK.VRTK_InteractableObject>(); if (!interaction.IsGrabbed()) { continue; } if (!isEmpty && onlyChangeClipIfViewmasterEmpty) { continue; } viewHandler.SetClip(i); SetClip(clipObj, other); break; } i++; } }
// Update is called once per frame void Update() { switch (tutorialStage) { case 0: if (!voiceoverSource.isPlaying) { tank.countdownActive = true; AdvanceStage(); } break; case 1: if (!voiceoverSource.isPlaying && tank.crankL != 0 && tank.crankR != 0) { AdvanceStage(); } break; case 2: if (shovel_interactable.IsGrabbed()) { AdvanceStage(); } break; case 3: if (shovel.coalAmount > 0) { AdvanceStage(); door.popDoor(); } break; case 4: if (tank.fuel > 0.2f) { AdvanceStage(); door.UnPopDoor(); tank.fuel += 0.7f; } break; case 5: if (!voiceoverSource.isPlaying) { AdvanceStage(); } break; case 6: if (!voiceoverSource.isPlaying) { AdvanceStage(); } break; } }
// Update is called once per frame void Update() { Vector3 currAngle = transform.rotation.eulerAngles; float degreesDifferent = Mathf.Abs(Quaternion.Angle(transform.rotation, neutralPos)); if (degreesDifferent < threshold && !lever.IsGrabbed()) { transform.rotation = neutralPos; } }
void Update() { Debug.Log(scriptInteractable.isDroppable); //On check si la tour est grabbée if (scriptInteractable.IsGrabbed()) { //on la scale avec la distance de l'objet pointdeRefScale float distance = (transform.position - pointDeRefScale.transform.position).magnitude; float norm = (distance - minimumDistance) / (maximumDistance - minimumDistance); norm = Mathf.Clamp01(norm); Vector3 minScale = Vector3.one * maximumDistanceScale; Vector3 maxScale = Vector3.one * minimumDistanceScale; transform.localScale = Vector3.Lerp(maxScale, minScale, norm); } if (scriptInteractable.IsGrabbed() == false && inTrash) { Destroy(gameObject); } }
// Update is called once per frame void Update() { if (company != null) { if (objectHandler.IsGrabbed()) { if (!showsInfo) { showsInfo = true; if (companyInfo == null) { companyInfo = Instantiate(companyInfoPrefab); ConfigureCompanyInfo(); } else { companyInfo.active = true; } // TODO: Maybe play some sound? } // Clamp info on top of Star companyInfo.transform.position = GetComponent<Transform>().position + new Vector3(0, 0.2f, 0); companyInfo.transform.LookAt(Camera.main.gameObject.transform.position); } else { if (companyInfo != null) { if (showsInfo) { showsInfo = false; companyInfo.active = false; } } } } }
protected virtual bool ValidUnsnap(VRTK_InteractableObject interactableObjectCheck) { return(interactableObjectCheck.IsGrabbed() || ((snapType != SnapTypes.UseJoint || !float.IsInfinity(GetComponent <Joint>().breakForce)) && interactableObjectCheck.validDrop == VRTK_InteractableObject.ValidDropTypes.DropAnywhere)); }
protected virtual void StartUseAction(Transform target) { pointerInteractableObject = target.GetComponent <VRTK_InteractableObject>(); bool cannotUseBecauseNotGrabbed = (pointerInteractableObject && pointerInteractableObject.useOnlyIfGrabbed && !pointerInteractableObject.IsGrabbed()); if (interactUse != null && PointerActivatesUseAction(pointerInteractableObject) && pointerInteractableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed && pointerInteractableObject.usingState == 0) { pointerInteractableObject.StartUsing(interactUse); pointerInteractableObject.usingState++; } }
protected virtual void OnTriggerEnter(Collider collider) { GameObject colliderInteractableObject = TriggerStart(collider); VRTK_InteractableObject touchedObjectScript = (touchedObject != null ? touchedObject.GetComponent <VRTK_InteractableObject>() : null); //If the new collider is not part of the existing touched object (and the object isn't being grabbed) then start touching the new object if (touchedObject != null && colliderInteractableObject != null && touchedObject != colliderInteractableObject && touchedObjectScript != null && !touchedObjectScript.IsGrabbed()) { ForceStopTouching(); triggerIsColliding = true; } }
protected virtual void AttemptUseObject() { GameObject touchedObject = (interactTouch != null ? interactTouch.GetTouchedObject() : null); if (touchedObject == null) { touchedObject = GetFromGrab(); } if (touchedObject != null && interactTouch != null && interactTouch.IsObjectInteractable(touchedObject)) { VRTK_InteractableObject interactableObjectScript = touchedObject.GetComponent <VRTK_InteractableObject>(); if (interactableObjectScript != null && interactableObjectScript.useOnlyIfGrabbed && !interactableObjectScript.IsGrabbed()) { return; } UseInteractedObject(touchedObject); if (usingObject != null && !IsObjectHoldOnUse(usingObject)) { SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1); } } }
void Update() { // calcul de la progression du fondu au noir float oldProgression = blackoutProgression; if (viewmasterObject.IsGrabbed()) { float distance = 999; foreach (Transform anchorPoint in viewmasterObjectAnchors) { distance = Mathf.Min(distance, Vector3.Distance(anchorPoint.position, Camera.main.transform.position)); } float range = maxDistance - minDistance; blackoutProgression = (distance - minDistance) / range; } else { blackoutProgression += Time.deltaTime; } blackoutProgression = Mathf.Clamp(blackoutProgression, 0, 1); Color matCol = blackoutMesh.material.color; matCol.a = 1 - blackoutProgression * .9f; blackoutMesh.material.color = matCol; renderCam.enabled = blackoutProgression <= 1; if (blackoutProgression < 1 && oldProgression >= 1) { // calcul de la position de l'image en fonction de la tête du joueur portraitOrientation.localPosition = renderCam.transform.localPosition + new Vector3(0, -.1f, 0); portraitOrientation.localRotation = Quaternion.Euler( portraitOrientation.localEulerAngles.x, renderCam.transform.localEulerAngles.y, portraitOrientation.localEulerAngles.z); // désactivation TP teleportHandler.enabled = false; } else if (blackoutProgression >= 1 && oldProgression < 1) { teleportHandler.enabled = true; } // calcul de la progression du fondu de l'image if (blackoutProgression <= 0) { canvasProgression += Time.deltaTime; } else { canvasProgression -= Time.deltaTime * 7; } canvasProgression = Mathf.Clamp(canvasProgression, 0, 1); portraitsGroup.alpha = canvasProgression; if (blackoutProgression <= 0) { float angleBetweenPictures = 30; if (currentClip != null) { angleBetweenPictures = 180f / currentClip.images.Length; } // float angleBetweenPictures = 30; // à n'utiliser que si l'autre n'est pas assez intuitif GameObject grabbingObj = viewmasterObject.GetGrabbingObject(); if (grabbingObj != null) { VRTK.VRTK_ControllerEvents eventCtrl = grabbingObj.GetComponent <VRTK.VRTK_ControllerEvents>(); lastControllerActions = grabbingObj.GetComponent <VRTK.VRTK_ControllerActions>(); if (eventCtrl != null) { // on est en train de visionner l'image, on récupère la manette en train de tenir le VM afin de récupérer les swipes sur le pavé tactile eventCtrl.axisFidelity = 5; bool wasPressing = pressingButton; pressingButton = eventCtrl.IsButtonPressed(VRTK.VRTK_ControllerEvents.ButtonAlias.Touchpad_Touch); if (pressingButton && !wasPressing) { lastRotation = eventCtrl.GetTouchpadAxisAngle(); } float trigger = eventCtrl.GetTriggerAxis(); if (trigger != 1) { ignoreTrigger = false; } if (trigger == 1 && !ignoreTrigger) { ignoreTrigger = true; autoMoveToNextPicture = true; StartCoroutine(TriggerHapticCoroutine()); } if (pressingButton && trigger == 0 && false) { float oldPortraitRotation = currentPortraitRotation; // en train de faire un swipe float currentPadRotation = eventCtrl.GetTouchpadAxisAngle(); if (lastRotation - currentPadRotation < 180 && lastRotation - currentPadRotation > -180) { currentPortraitRotation += (lastRotation - currentPadRotation) * rotateSensitivity; } if (lastControllerActions != null && ((int)(currentPadRotation) / 35) != ((int)(lastRotation) / 35)) { lastControllerActions.TriggerHapticPulse(.05f); } if (currentPortraitRotation > angleBetweenPictures / 2 && oldPortraitRotation < angleBetweenPictures / 2) { StartCoroutine(TriggerHapticCoroutine()); } if (currentPortraitRotation < -angleBetweenPictures / 2 && oldPortraitRotation > -angleBetweenPictures / 2) { StartCoroutine(TriggerHapticCoroutine()); } lastRotation = currentPadRotation; } } } if (!pressingButton || autoMoveToNextPicture) { if (autoMoveToNextPicture) { currentPortraitRotation += Time.deltaTime * (angleBetweenPictures + .01f - currentPortraitRotation) * 10; } else { // retour à l'image la plus proche if (currentPortraitRotation > angleBetweenPictures / 2) { currentPortraitRotation += Time.deltaTime * (angleBetweenPictures + .01f - currentPortraitRotation) * 10; } else if (currentPortraitRotation < -angleBetweenPictures / 2) { currentPortraitRotation += Time.deltaTime * -(angleBetweenPictures + .01f + currentPortraitRotation) * 10; } else { currentPortraitRotation -= Time.deltaTime * currentPortraitRotation * 10; } } } if (currentPortraitRotation > angleBetweenPictures) { currentPortraitRotation -= angleBetweenPictures; nextImage(); } if (currentPortraitRotation < -angleBetweenPictures) { currentPortraitRotation += angleBetweenPictures; previousImage(); } // rotation de l'image leftImageTransform.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation); rightImageTransform.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation); leftImageTransformNext.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation + angleBetweenPictures); leftImageTransformPrev.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation - angleBetweenPictures); rightImageTransformNext.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation + angleBetweenPictures); rightImageTransformPrev.transform.localRotation = Quaternion.Euler(0, 0, currentPortraitRotation - angleBetweenPictures); } else { // rotation du disque du grabbable, pas de la vue. GameObject grabbingObj = viewmasterObject.GetGrabbingObject(); if (grabbingObj != null) { VRTK.VRTK_ControllerEvents eventCtrl = grabbingObj.GetComponent <VRTK.VRTK_ControllerEvents>(); lastControllerActions = grabbingObj.GetComponent <VRTK.VRTK_ControllerActions>(); if (eventCtrl != null) { // on est en train de visionner l'image, on récupère la manette en train de tenir le VM afin de récupérer les swipes sur le pavé tactile eventCtrl.axisFidelity = 5; bool wasPressing = pressingButton; pressingButton = eventCtrl.IsButtonPressed(VRTK.VRTK_ControllerEvents.ButtonAlias.Touchpad_Touch); if (pressingButton && !wasPressing) { lastRotation = eventCtrl.GetTouchpadAxisAngle(); } if (pressingButton && false) { // en train de faire un swipe float currentPadRotation = eventCtrl.GetTouchpadAxisAngle(); if (lastRotation - currentPadRotation < 180 && lastRotation - currentPadRotation > -180) { currentClipRotation += (lastRotation - currentPadRotation) * rotateSensitivity; } if (lastControllerActions != null && ((int)(currentPadRotation) / 275) != ((int)(lastRotation) / 275)) { triggerAnimator.SetTrigger("Trigger"); } lastRotation = currentPadRotation; viewmasterGrabbableClipRotation.transform.localRotation = Quaternion.Euler(currentClipRotation, 0, 0); } } } } }
private void StartUseAction(Transform target) { interactableObject = target.GetComponent<VRTK_InteractableObject>(); bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed()); if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed) { interactableObject.StartUsing(gameObject); } }
protected virtual bool FloorIsGrabbedObject(RaycastHit collidedObj) { VRTK_InteractableObject obj = collidedObj.transform.GetComponent <VRTK_InteractableObject>(); return(obj && obj.IsGrabbed()); }
protected virtual bool ValidSnapObject(VRTK_InteractableObject interactableObjectCheck, bool grabState, bool checkGrabState = true) { return(interactableObjectCheck != null && (!checkGrabState || interactableObjectCheck.IsGrabbed() == grabState) && !VRTK_PolicyList.Check(interactableObjectCheck.gameObject, validObjectListPolicy)); }
private void StartUseAction(Transform target) { interactableObject = target.GetComponent <VRTK_InteractableObject>(); bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed()); if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed) { if (lastUsed != target) { Events.OnStartUse_UIObject(target); lastUsed = target; } // interactableObject.StartUsing(gameObject); } }
public bool IsHeld() { return(interact.IsGrabbed()); }
protected virtual void PointerIn() { // 射线没有击中任何东西则返回 if (!enabled || !pointerContactTarget) { return; } // 回调委托给自己的事件 OnDestinationMarkerEnter(SetDestinationMarkerEvent(pointerContactDistance, pointerContactTarget, destinationPosition, controllerIndex)); // 获取被击中物体的VRTK_InteractableObject脚本,如果不能交互则获取不到,为null interactableObject = pointerContactTarget.GetComponent <VRTK_InteractableObject>(); // 判断这个物体的交互方式,如果此物体只有被抓取才能交互则为true bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed()); //使用物体 if (interactableObject && interactableObject.pointerActivatesUseAction && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed) { interactableObject.StartUsing(gameObject); } }
// Token: 0x0600156C RID: 5484 RVA: 0x00075F7C File Offset: 0x0007417C public virtual void ToggleControllerOnUse(bool showController, GameObject usingObject, GameObject ignoredObject) { if (this.hideControllerOnUse) { VRTK_InteractableObject vrtk_InteractableObject = (ignoredObject != null) ? ignoredObject.GetComponentInParent <VRTK_InteractableObject>() : null; if (showController && ((!this.grabControllerShow && vrtk_InteractableObject && vrtk_InteractableObject.IsGrabbed(null)) || (!this.touchControllerShow && vrtk_InteractableObject && vrtk_InteractableObject.IsTouched()))) { return; } this.ToggleController(showController, usingObject, ignoredObject, this.hideDelayOnUse); if (showController) { this.OnVisibleOnUse(this.SetEventPayload(usingObject, ignoredObject)); return; } this.OnHiddenOnUse(this.SetEventPayload(usingObject, ignoredObject)); } }
private void StartUseAction(Transform target) { interactableObject = target.GetComponent <VRTK_InteractableObject>(); bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed()); if (PointerActivatesUseAction(interactableObject) && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed && interactableObject.usingState == 0) { interactableObject.StartUsing(controller.gameObject); interactableObject.usingState++; } }
// Token: 0x060016BB RID: 5819 RVA: 0x0007AA4A File Offset: 0x00078C4A protected virtual IEnumerator AutoGrab() { yield return(new WaitForEndOfFrame()); this.interactTouch = ((this.interactTouch != null) ? this.interactTouch : base.GetComponentInParent <VRTK_InteractTouch>()); this.interactGrab = ((this.interactGrab != null) ? this.interactGrab : base.GetComponentInParent <VRTK_InteractGrab>()); if (this.interactTouch == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, new object[] { "VRTK_ObjectAutoGrab", "VRTK_InteractTouch", "interactTouch", "the same or parent" })); } if (this.interactGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, new object[] { "VRTK_ObjectAutoGrab", "VRTK_InteractGrab", "interactGrab", "the same or parent" })); } if (this.objectToGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.NOT_DEFINED, new object[] { "objectToGrab" })); yield break; } while (this.interactGrab.controllerAttachPoint == null) { yield return(true); } bool disableWhenIdle = this.objectToGrab.disableWhenIdle; if (this.objectIsPrefab) { this.objectToGrab.disableWhenIdle = false; } VRTK_InteractableObject vrtk_InteractableObject = this.objectToGrab; if (this.alwaysCloneOnEnable) { this.ClearPreviousClone(); } if (!this.interactGrab.GetGrabbedObject()) { if (this.cloneGrabbedObject) { if (this.previousClonedObject == null) { vrtk_InteractableObject = Object.Instantiate <VRTK_InteractableObject>(this.objectToGrab); this.previousClonedObject = vrtk_InteractableObject; } else { vrtk_InteractableObject = this.previousClonedObject; } } if (vrtk_InteractableObject.isGrabbable && !vrtk_InteractableObject.IsGrabbed(null)) { vrtk_InteractableObject.transform.position = base.transform.position; this.interactTouch.ForceStopTouching(); this.interactTouch.ForceTouch(vrtk_InteractableObject.gameObject); this.interactGrab.AttemptGrab(); this.OnObjectAutoGrabCompleted(); } } this.objectToGrab.disableWhenIdle = disableWhenIdle; vrtk_InteractableObject.disableWhenIdle = disableWhenIdle; yield break; }
protected virtual IEnumerator AutoGrab() { yield return(new WaitForEndOfFrame()); interactTouch = (interactTouch != null ? interactTouch : GetComponentInParent <VRTK_InteractTouch>()); interactGrab = (interactGrab != null ? interactGrab : GetComponentInParent <VRTK_InteractGrab>()); if (interactTouch == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractTouch", "interactTouch", "the same or parent")); } if (interactGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractGrab", "interactGrab", "the same or parent")); } if (objectToGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.NOT_DEFINED, "objectToGrab")); yield break; } while (interactGrab.controllerAttachPoint == null) { yield return(true); } bool grabbableObjectDisableState = objectToGrab.disableWhenIdle; if (objectIsPrefab) { objectToGrab.disableWhenIdle = false; } VRTK_InteractableObject grabbableObject = objectToGrab; if (alwaysCloneOnEnable) { ClearPreviousClone(); } if (!interactGrab.GetGrabbedObject()) { if (cloneGrabbedObject) { if (previousClonedObject == null) { grabbableObject = Instantiate(objectToGrab); previousClonedObject = grabbableObject; } else { grabbableObject = previousClonedObject; } } if (grabbableObject.isGrabbable && !grabbableObject.IsGrabbed()) { grabbableObject.transform.position = transform.position; interactTouch.ForceStopTouching(); interactTouch.ForceTouch(grabbableObject.gameObject); interactGrab.AttemptGrab(); OnObjectAutoGrabCompleted(); } } objectToGrab.disableWhenIdle = grabbableObjectDisableState; grabbableObject.disableWhenIdle = grabbableObjectDisableState; }
protected virtual void PointerIn() { if (!enabled || !pointerContactTarget) { return; } OnDestinationMarkerEnter(SetDestinationMarkerEvent(pointerContactDistance, pointerContactTarget, destinationPosition, controllerIndex)); interactableObject = pointerContactTarget.GetComponent <VRTK_InteractableObject>(); bool cannotUseBecauseNotGrabbed = (interactableObject && interactableObject.useOnlyIfGrabbed && !interactableObject.IsGrabbed()); if (interactableObject && interactableObject.pointerActivatesUseAction && interactableObject.holdButtonToUse && !cannotUseBecauseNotGrabbed) { interactableObject.StartUsing(gameObject); } }
protected virtual void RegrabUndroppableObject() { if (undroppableGrabbedObject != null) { VRTK_InteractableObject undroppableGrabbedObjectScript = undroppableGrabbedObject.GetComponent <VRTK_InteractableObject>(); if (interactTouch != null && undroppableGrabbedObjectScript != null && !undroppableGrabbedObjectScript.IsGrabbed()) { undroppableGrabbedObject.SetActive(true); interactTouch.ForceTouch(undroppableGrabbedObject); AttemptGrab(); } } else { undroppableGrabbedObject = null; } }
// Token: 0x060015ED RID: 5613 RVA: 0x00077A28 File Offset: 0x00075C28 protected virtual void OnTriggerEnter(Collider collider) { GameObject gameObject = this.TriggerStart(collider); VRTK_InteractableObject vrtk_InteractableObject = (this.touchedObject != null) ? this.touchedObject.GetComponent <VRTK_InteractableObject>() : null; if (this.touchedObject != null && gameObject != null && this.touchedObject != gameObject && vrtk_InteractableObject != null && !vrtk_InteractableObject.IsGrabbed(null)) { base.CancelInvoke("ResetTriggerRumble"); this.ResetTriggerRumble(); this.ForceStopTouching(); this.triggerIsColliding = true; } }