private void UnhighlightTeleportPoint() { if (prevTeleportPoint) { prevTeleportPoint.Unhighlight(); prevTeleportPoint = null; } }
static void SitIn() { if (Selection.activeGameObject) { SnappingTeleportingPoint tpPoint = Selection.activeGameObject.GetComponent <SnappingTeleportingPoint>(); if (tpPoint && tpPoint.snappingPoint) { Vector3 position = tpPoint.snappingPoint.position + Vector3.up * 1.3f; Vector3 pivot = position + tpPoint.snappingPoint.forward * SceneView.lastActiveSceneView.cameraDistance; SceneView.lastActiveSceneView.rotation = tpPoint.snappingPoint.transform.rotation; SceneView.lastActiveSceneView.pivot = pivot; } } }
public Matrix4x4 Cast(Transform sourceTransform, Vector2 inputDirection) { if (this.castingObjectTransform == null) { this.castingObjectTransform = sourceTransform; } else if (this.castingObjectTransform != sourceTransform) { return(Matrix4x4.zero); } visualizerAssembly.SetActive(true); transform.position = sourceTransform.position; Parabola parabola = Parabola.Cast(sourceTransform.position, sourceTransform.forward * strength, stepSize, maxSteps); for (int i = 0; i < bones.Count; i++) { TennisSim.Utility.ApplyMatrixToTransform(bones[i], parabola.GetNormalizedPathMatrix((float)i / (bones.Count - 1))); //bones[i].rotation = Quaternion.AngleAxis(90, bones[i].right) * Quaternion.AngleAxis(90, bones[i].up) * bones[i].rotation; bones[i].rotation = Quaternion.AngleAxis(90, bones[i].up) * Quaternion.AngleAxis(-90, bones[i].right) * bones[i].rotation; } if (parabola.hasDestination) { SnappingTeleportingPoint teleportPoint = parabola.hitObject.GetComponent <SnappingTeleportingPoint>(); if (teleportPoint) { if (prevTeleportPoint != teleportPoint) { UnhighlightTeleportPoint(); prevTeleportPoint = teleportPoint; teleportPoint.Highlight(); } destinationArrow.gameObject.SetActive(false); return(teleportPoint.snappingPoint.localToWorldMatrix); } else { UnhighlightTeleportPoint(); if (Vector3.Angle(parabola.normal, Vector3.up) <= acceptableUpAngle) { destinationArrow.gameObject.SetActive(true); destinationArrow.position = parabola.destination; } else { // Cast a ray straight down to find ground. RaycastHit hit; if (Physics.Raycast(parabola.destination + Vector3.up * .001f, -Vector3.up, out hit)) { if (Vector3.Angle(hit.normal, Vector3.up) <= acceptableUpAngle) { destinationArrow.gameObject.SetActive(true); Vector3 backOffWallVector = parabola.normal; backOffWallVector.y = 0; backOffWallVector = backOffWallVector.normalized * backOffWallDistance; destinationArrow.position = hit.point + backOffWallVector; } } } if (destinationArrow.gameObject.activeSelf) { Vector3 right = Vector3.Cross(Vector3.up, sourceTransform.forward).normalized; Vector3 forward = Vector3.Cross(right, Vector3.up); Vector3 direction = right * inputDirection.x + forward * inputDirection.y; destinationArrow.rotation = Quaternion.LookRotation(direction); return(destinationArrow.localToWorldMatrix); } } } destinationArrow.gameObject.SetActive(false); return(Matrix4x4.zero); }