void Update() { Vector3 marblePos = Vector3.zero; if (isShowing) { if (rightHand.graspedObject != null) { var marble = (rightHand.graspedObject as MonoBehaviour).GetComponent <WearableUI>(); if (marble != null) { marblePos = marble.transform.position; thrownMarble = marble; } } transform.position = Vector3.Lerp(transform.position, marblePos + Vector3.up * 0.06f, 0.1f); transform.rotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position); firstLine.enabled = true; firstLine.SetPosition(0, Vector3.Lerp(transform.position, marblePos, Mathf.Lerp(0.3f, 0.9f, fade))); firstLine.SetPosition(1, Vector3.Lerp(transform.position, marblePos, 0.5f)); } else if (_workstationTipGiven && text.gameObject.activeInHierarchy) { transform.position = Vector3.Lerp(transform.position, thrownMarble.transform.position - (Vector3.Cross(thrownMarble.transform.position - Camera.main.transform.position, Vector3.up).normalized * 0.32f), 0.1f); transform.rotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position); firstLine.SetPosition(0, Vector3.Lerp(transform.position, thrownMarble.transform.position, 0.5F)); firstLine.SetPosition(1, Vector3.Lerp(transform.position, thrownMarble.transform.position, 0.9F)); if (!_showWorkstationTipLine && Vector3.Distance(transform.position, thrownMarble.transform.position) < 0.4F) { _showWorkstationTipLine = true; } } firstLine.enabled = isShowing || _showWorkstationTipLine; }
public Vector3 ValidateTargetWorkstationPosition(Vector3 targetPosition, WearableUI workstation) { float targetPosHeight = targetPosition.y; for (int i = 0; i < _wearableUIs.Length; i++) { if (_wearableUIs[i] == workstation || !_wearableUIs[i].IsWorkstation) { continue; } else { Vector3 estPosition = _wearableUIs[i].transform.position; // established workstation position Vector3 estPositionToTarget = targetPosition - estPosition; float totalDangerRadius = workstation.GetWorkstationDangerZoneRadius() + _wearableUIs[i].GetWorkstationDangerZoneRadius(); if (estPositionToTarget.magnitude >= totalDangerRadius) { continue; } else { estPositionToTarget = new Vector3(estPositionToTarget.x, 0F, estPositionToTarget.z); if (estPositionToTarget.magnitude < 0.00001F) { Debug.LogWarning("Workstation position validation: Too close on XZ -- doing camera logic."); Vector3 cameraXZAlignedEstWorkstationPos = new Vector3(estPosition.x, Camera.main.transform.position.y, estPosition.z); Vector3 estOffsetDirection = Quaternion.LookRotation(cameraXZAlignedEstWorkstationPos - Camera.main.transform.position) * Vector3.right; targetPosition = estPosition + estOffsetDirection * totalDangerRadius; } else { targetPosition = estPosition + estPositionToTarget.normalized * totalDangerRadius; } targetPosition = new Vector3(targetPosition.x, targetPosHeight, targetPosition.z); } } } return(targetPosition); }