void localAxis(ControllerAxis axis) { horizontal = axis.axisValue.x * sensitivity * Time.deltaTime * 100f; vertical = axis.axisValue.y * sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, axisHorizontal, axisVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } }
void localAxis(InputTouch touch) { if (dpadMode == EasyInputConstants.DPAD_MODE.RegisterAlways || isClicking == false) { //check to see if we've exceeded the deadzone if (Mathf.Sqrt(Mathf.Pow(touch.currentTouchPosition.x, 2) + Mathf.Pow(touch.currentTouchPosition.y, 2)) > deadZone) { horizontal = touch.currentTouchPosition.x * sensitivity * Time.deltaTime * 10f; vertical = touch.currentTouchPosition.y * sensitivity * Time.deltaTime * 10f; } else { horizontal = 0f; vertical = 0f; } actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, EasyInputConstants.AXIS.XAxis, EasyInputConstants.AXIS.ZAxis); previousPos = transform.position; transform.Translate(actionVector3, lookObject.transform); //we want the x and z from the translate but not the y if we are looking up/down previousPos.x = transform.position.x; previousPos.z = transform.position.z; transform.position = previousPos; } }
void localAxis(InputTouch touch) { if (blockInput) { return; } if (dpadMode == EasyInputConstants.DPAD_MODE.RegisterAlways || isClicking == false) { //check to see if we've exceeded the deadzone if (Mathf.Sqrt(Mathf.Pow(touch.currentTouchPosition.x, 2) + Mathf.Pow(touch.currentTouchPosition.y, 2)) > deadZone) { horizontal = touch.currentTouchPosition.x * sensitivity * Time.deltaTime * 10f; vertical = touch.currentTouchPosition.y * sensitivity * Time.deltaTime * 10f; } else { horizontal = 0f; vertical = 0f; } actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, axisHorizontal, axisVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } } }
void localAxis(InputTouch touch) { //first check to see if this is the first frame if (lastFrameTouch == EasyInputConstants.NOT_TOUCHING) { lastFrameTouch = touch.currentTouchPosition; return; } if (blockInput) { return; } //otherwise is a continuation horizontal = (touch.currentTouchPosition.x - lastFrameTouch.x) * sensitivity * Time.deltaTime * 100f; vertical = (touch.currentTouchPosition.y - lastFrameTouch.y) * sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, axisHorizontal, axisVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } lastFrameTouch = touch.currentTouchPosition; }
void localGyro(Vector3 gravity, Vector3 userAccel) { //save the last rotation if (didRealUpdateLastFrame) { didRealUpdateLastFrame = false; lastRotation = myRotation.x; } //because we are only modifying one component I don't need to copy into a local variable myRotation.x = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -gravity, Vector3.right); myRotation.x *= -sensitivity; //we need to adjust for if the z is parallel with gravity (x undefined) if (gravity.z > .97 || gravity.z < -.97) { //all the way forward or back myRotation.x = lastRotation; } //clamp the up/down rotation if set this way if (clampRotation && clampRotationDegreesFromZero != 0f) { if (myRotation.x <= (360f - clampRotationDegreesFromZero) && myRotation.x >= clampRotationDegreesFromZero) { if (myRotation.x <= 180f) { myRotation.x = clampRotationDegreesFromZero; } else if (myRotation.x > 180f) { myRotation.x = (360f - clampRotationDegreesFromZero); } } } //at this point we'd have the correct result but it would be very shaky //lerp or slerp doesn't seem to be good enough so manually make it smooth if ((lastRotation - myRotation.x) > precision || (lastRotation - myRotation.x) < -precision) { //only moving in increments of tilt precesion degrees didRealUpdateLastFrame = true; transform.localRotation = Quaternion.Euler(myRotation); } }
void localMotion(EasyInputVR.Core.Motion motion) { //accelerometers due to gravity can really only sense 2 axis (can't filter out gravity) //here we convert those 2 axis into horizontal and vertical and normalize horizontal = motion.currentOrientationEuler.z; vertical = motion.currentOrientationEuler.x; //get into a -180 to 180 range horizontal = (horizontal > 180f) ? (horizontal - 360f) : horizontal; vertical = (vertical > 180f) ? (vertical - 360f) : vertical; horizontal = horizontal / normalizeDegrees; vertical = vertical / normalizeDegrees; horizontal *= -sensitivity * Time.deltaTime * 100f; vertical *= -sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, tiltHorizontal, tiltVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } }
void localAccelerometer(Vector3 accel) { //accelerometers due to gravity can really only sense 2 axis (can't filter out gravity) //here we convert those 2 axis into horizontal and vertical and normalize horizontal = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -accel, Vector3.forward) / normalizeDegrees; vertical = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -accel, Vector3.right) / normalizeDegrees; horizontal *= -sensitivity * Time.deltaTime * 100f; vertical *= -sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, tiltHorizontal, tiltVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } }
void localGyro(Vector3 gravity, Vector3 userAcceleration) { //save the last rotation if (didRealUpdateLastFrame) { didRealUpdateLastFrame = false; lastRotation = myRotation.y; } //reset the rotation myRotation.y = 0f; #if !UNITY_EDITOR && UNITY_TVOS //because we are only modifying one component I don't need to copy into a local variable myRotation.y = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -gravity, Vector3.forward); myRotation.y *= -tiltSensitivity; //we need to adjust for if the z is parallel with gravity ( y undefined) if (gravity.x > .97 || gravity.x < -.97) { //all the way forward or back myRotation.y = lastRotation; } #endif myRotation.y += accumulatedRotation; //at this point we'd have the correct result but it would be very shaky //lerp or slerp doesn't seem to be good enough so manually make it smooth if ((lastRotation - myRotation.y) > tiltPrecision || (lastRotation - myRotation.y) < -tiltPrecision) { //only moving in increments of tilt precesion degrees didRealUpdateLastFrame = true; player.transform.localRotation = Quaternion.Euler(myRotation); } }
void localAxis(ControllerAxis axis) { //first thing check if it's the right player otherwise do nothing if (axis.player == player || player == EasyInputConstants.PLAYER_NUMBER.Any) { horizontal = axis.axisValue.x * sensitivity * Time.deltaTime * 100f; vertical = axis.axisValue.y * sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, axisHorizontal, axisVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } } }
public void steerBall(Vector3 accel) { //accelerometers due to gravity can really only sense 2 axis (can't filter out gravity) //here we convert those 2 axis into horizontal and vertical and normalize if (accel != Vector3.zero) { horizontal = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -accel, Vector3.forward) / normalizeDegrees; vertical = EasyInputUtilities.relativeAngleInAxis(Vector3.up, -accel, Vector3.right) / normalizeDegrees; horizontal *= -sensitivity; vertical *= -sensitivity; } else { horizontal = 0f; vertical = 0f; } actionVectorPosition.x = horizontal; actionVectorPosition.y = 0f; actionVectorPosition.z = vertical; myRigidbody.AddForce(actionVectorPosition); }
void localAxis(InputTouch touch) { //check to see if we want to effect anything if (preventControl) { return; } //first check to see if this is the first frame if (lastFrameTouch == EasyInputConstants.NOT_TOUCHING) { lastFrameTouch = touch.currentTouchPosition; return; } //otherwise is a continuation horizontal = (touch.currentTouchPosition.x - lastFrameTouch.x) * sensitivity * Time.deltaTime * 100f; vertical = (touch.currentTouchPosition.y - lastFrameTouch.y) * sensitivity * Time.deltaTime * 100f; actionVector3 = EasyInputUtilities.getControllerVector3(horizontal, vertical, axisHorizontal, axisVertical); switch (action) { case EasyInputConstants.ACTION_TYPE.Position: transform.position += actionVector3; break; case EasyInputConstants.ACTION_TYPE.Rotation: transform.Rotate(actionVector3, Space.World); break; case EasyInputConstants.ACTION_TYPE.LocalPosition: transform.Translate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalRotation: transform.Rotate(actionVector3); break; case EasyInputConstants.ACTION_TYPE.LocalScale: transform.localScale += actionVector3; break; default: Debug.Log("Invalid Action"); break; } //bowling ball lane range temp = transform.position; if (transform.position.x > laneRange) { temp.x = laneRange; } else if (transform.position.x < -laneRange) { temp.x = -laneRange; } transform.position = temp; //move the camera to follow temp.x = transform.position.x; temp.y = 3.06f; temp.z = -6f; followingCamera.transform.position = temp; //also move the aim arrow temp = aimArrow.position; temp.x = transform.position.x; aimArrow.position = temp; lastFrameTouch = touch.currentTouchPosition; }
void localMotion(EasyInputVR.Core.Motion motion) { if (laserPointer == null || !this.gameObject.activeInHierarchy) { return; } if (reticle != null) { reticle.SetActive(true); } offsetPosition = motion.currentPos; offsetPosition.y += heightOffset; if (laserPointer.transform.parent == null) { laserPointer.transform.localPosition = initialPosition + offsetPosition; } else { laserPointer.transform.localPosition = offsetPosition; } laserPointer.transform.localRotation = motion.currentOrientation; if (motion.currentPos != Vector3.zero) { line.enabled = true; } else { //not valid so disable and don't bother with the raycast so return line.enabled = false; return; } end = EasyInputConstants.NOT_VALID; //origin line.SetPosition(0, laserPointer.transform.position); if (colliderRaycast && Physics.Raycast(laserPointer.transform.position, laserPointer.transform.forward, out rayHit, reticleDistance, layersToCheck)) { end = rayHit.point; if (rayHit.transform != null && rayHit.transform.gameObject != null) { if (lastHitGameObject == null) { //we weren't hitting anything before and now we are EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, false); } else if (lastHitGameObject == rayHit.transform.gameObject) { //we are hitting the same object as last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, false, false); } else if (lastHitGameObject != rayHit.transform.gameObject) { //we are hitting a different object than last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, true); } lastHitGameObject = rayHit.transform.gameObject; lastRayHit = rayHit.point; } } //endpoint //line.SetPosition(1, end); if (end != EasyInputConstants.NOT_VALID) { if (reticle != null) { reticle.transform.position = end; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((end - laserPointer.transform.position).magnitude / reticleDistance)); } if ((end - laserPointer.transform.position).magnitude < laserDistance) { line.SetPosition(1, end); } else { line.SetPosition(1, laserPointer.transform.position + laserPointer.transform.forward * laserDistance); } } else { //didn't hit anything if (colliderRaycast) { //raycast enabled but didn't hit anything if (lastHitGameObject != null) { EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, false, false, true); lastHitGameObject = null; lastRayHit = EasyInputConstants.NOT_VALID; } } if (reticle != null) { reticle.transform.position = laserPointer.transform.position + laserPointer.transform.forward * reticleDistance; reticle.transform.localScale = initialReticleSize; } line.SetPosition(1, laserPointer.transform.position + laserPointer.transform.forward * laserDistance); } if (reticle != null) { reticle.GetComponent <MeshRenderer>().material.color = reticleColor; } //UI based interactions if (UIRaycast && InputModule != null && (motion.currentPos != Vector3.zero)) { InputModule.setUIRay(laserPointer.transform.position, laserPointer.transform.rotation, reticleDistance); uiHitPosition = InputModule.getuiHitPosition(); if (uiHitPosition != EasyInputConstants.NOT_VALID && (end == EasyInputConstants.NOT_VALID || (end - laserPointer.transform.position).magnitude > (uiHitPosition - laserPointer.transform.position).magnitude)) { if ((uiHitPosition - laserPointer.transform.position).magnitude < reticleDistance) { reticle.transform.position = uiHitPosition; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((uiHitPosition - laserPointer.transform.position).magnitude / reticleDistance)); } } } }
void localMotion(EasyInputVR.Core.Motion motion) { if (laserPointer == null || !this.gameObject.activeInHierarchy) { return; } offsetPosition = motion.currentPos; offsetPosition.y += heightOffset; if (laserPointer.transform.parent == null) { laserPointer.transform.localPosition = initialPosition + offsetPosition; } else { laserPointer.transform.localPosition = offsetPosition; } laserPointer.transform.localRotation = motion.currentOrientation; if (motion.currentPos != Vector3.zero) { line.enabled = true; } else { line.enabled = false; return; } end = EasyInputConstants.NOT_VALID; //set the number of positions like we aren't going to hit anything #if UNITY_5_3 || UNITY_5_4 line.SetVertexCount(segmentsCount); #endif #if UNITY_5_5 line.numPositions = segmentsCount; #endif #if !(UNITY_5_3 || UNITY_5_4 || UNITY_5_5) line.positionCount = segmentsCount; #endif //origin line.SetPosition(0, laserPointer.transform.position); previous.transform.position = laserPointer.transform.position; previous.transform.forward = laserPointer.transform.forward; for (int i = 1; i < segmentsCount; i++) { //first set the position like it didn't hit anything line.SetPosition(i, (previous.transform.position + previous.transform.forward * segmentLength)); //now do the raycast if (colliderRaycast && Physics.Raycast(previous.transform.position, previous.transform.forward, out rayHit, segmentLength, layersToCheck)) { end = rayHit.point; line.SetPosition(i, end); //we hit something so adjust the number of positions #if UNITY_5_3 || UNITY_5_4 line.SetVertexCount(i + 1); #endif #if UNITY_5_5 line.numPositions = i + 1; #endif #if !(UNITY_5_3 || UNITY_5_4 || UNITY_5_5) line.positionCount = i + 1; #endif if (rayHit.transform != null && rayHit.transform.gameObject != null) { if (lastHitGameObject == null) { //we weren't hitting anything before and now we are EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, false); } else if (lastHitGameObject == rayHit.transform.gameObject) { //we are hitting the same object as last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, false, false); } else if (lastHitGameObject != rayHit.transform.gameObject) { //we are hitting a different object than last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, true); } lastHitGameObject = rayHit.transform.gameObject; lastRayHit = rayHit.point; } //break out of the loop since we hit something break; } previous.transform.position = previous.transform.position + previous.transform.forward * segmentLength; previous.transform.rotation = Quaternion.AngleAxis(segmentCurveDegrees, previous.transform.right) * previous.transform.rotation; } //hit something if (end != EasyInputConstants.NOT_VALID) { if (reticle != null) { reticle.SetActive(true); reticle.transform.position = end; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((end - laserPointer.transform.position).magnitude / reticleDistance)); } } else { //didn't hit anything if (colliderRaycast) { //raycast enabled but didn't hit anything if (lastHitGameObject != null) { EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, false, false, true); lastHitGameObject = null; lastRayHit = EasyInputConstants.NOT_VALID; } } if (reticle != null) { reticle.SetActive(false); reticle.transform.position = previous.transform.position; reticle.transform.localScale = initialReticleSize; } } if (reticle != null) { reticle.GetComponent <MeshRenderer>().material.color = reticleColor; } //UI based interactions if (UIRaycast && InputModule != null && (motion.currentPos != Vector3.zero)) { InputModule.setUIRay(laserPointer.transform.position, laserPointer.transform.rotation, reticleDistance); uiHitPosition = InputModule.getuiHitPosition(); if (uiHitPosition != EasyInputConstants.NOT_VALID && (end == EasyInputConstants.NOT_VALID || (end - laserPointer.transform.position).magnitude > (uiHitPosition - laserPointer.transform.position).magnitude)) { reticle.SetActive(false); if ((uiHitPosition - laserPointer.transform.position).magnitude < reticleDistance) { reticle.transform.position = uiHitPosition; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((uiHitPosition - laserPointer.transform.position).magnitude / reticleDistance)); } } } }
void Update() { if (reticle != null) { reticle.SetActive(true); } end = EasyInputConstants.NOT_VALID; if (colliderRaycast && Physics.Raycast(hmd.transform.position, hmd.transform.forward, out rayHit, reticleDistance, layersToCheck)) { end = rayHit.point; if (rayHit.transform != null && rayHit.transform.gameObject != null) { if (lastHitGameObject == null) { //we weren't hitting anything before and now we are EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, false); } else if (lastHitGameObject == rayHit.transform.gameObject) { //we are hitting the same object as last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, false, false); } else if (lastHitGameObject != rayHit.transform.gameObject) { //we are hitting a different object than last frame EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, true, true, true); } lastHitGameObject = rayHit.transform.gameObject; lastRayHit = rayHit.point; } } if (end != EasyInputConstants.NOT_VALID) { if (reticle != null) { reticle.transform.position = end; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((end - hmd.transform.position).magnitude / reticleDistance)); } } else { //didn't hit anything if (colliderRaycast) { //raycast enabled but didn't hit anything if (lastHitGameObject != null) { EasyInputUtilities.notifyEvents(rayHit, lastRayHit, lastHitGameObject, false, false, true); lastHitGameObject = null; lastRayHit = EasyInputConstants.NOT_VALID; } } if (reticle != null) { reticle.transform.position = hmd.transform.position + hmd.transform.forward * reticleDistance; reticle.transform.localScale = initialReticleSize; } } if (reticle != null) { reticle.GetComponent <MeshRenderer>().material.color = reticleColor; } //UI based interactions if (UIRaycast && InputModule != null) { InputModule.setUIRay(hmd.transform.position, hmd.transform.rotation, reticleDistance); uiHitPosition = InputModule.getuiHitPosition(); if (uiHitPosition != EasyInputConstants.NOT_VALID && (end == EasyInputConstants.NOT_VALID || (end - hmd.transform.position).magnitude > (uiHitPosition - hmd.transform.position).magnitude)) { if ((uiHitPosition - hmd.transform.position).magnitude < reticleDistance) { reticle.transform.position = uiHitPosition; reticle.transform.localScale = initialReticleSize * .6f * (Mathf.Sqrt((uiHitPosition - hmd.transform.position).magnitude / reticleDistance)); } } } }