// Update is called once per frame void Update() { var targetPositioin = Horse.transform.position + (Vector3.up * _offsetY); var distanceToHorse = Vector3.Distance(transform.position, Horse.transform.position); var targetDistance = 10.5f; var distanceOffset = 0.2f; var speed = 5f + _horseFollowPathScript.GetSpeed(); var speedFactor = Mathf.Abs(distanceToHorse - targetDistance); speed *= speedFactor; if (distanceToHorse > targetDistance + distanceOffset) { _controller.Move(transform.forward * speed * Time.deltaTime); } else if (distanceToHorse < targetDistance - distanceOffset) { _controller.Move((transform.forward * -1) * speed * Time.deltaTime); } var horseRotationY = RotationUtilities.ScaleRotation(Horse.transform.eulerAngles.y); var axelRotationY = RotationUtilities.ScaleRotation(_directionFrame.eulerAngles.y); if (Mathf.Abs(horseRotationY - axelRotationY) < 40f) { var lookWagonPos = targetPositioin - transform.position; lookWagonPos.y = 0; var targetWagonRotation = Quaternion.LookRotation(lookWagonPos); transform.rotation = Quaternion.Slerp(transform.rotation, targetWagonRotation, 2f * Time.deltaTime); } var lookPos = targetPositioin - _directionFrame.position; lookPos.y = 90; var targetRotation = Quaternion.LookRotation(lookPos); _directionFrame.rotation = Quaternion.Slerp(_directionFrame.rotation, targetRotation, 5f * Time.deltaTime); /*float ry = _directionFrame.eulerAngles.y; * if (ry >= 180) ry -= 360; * _directionFrame.eulerAngles = new Vector3( * _directionFrame.eulerAngles.x, * Mathf.Clamp(ry, transform.localRotation.y - 12f, transform.localRotation.y + 12f), * _directionFrame.eulerAngles.z * );*/ _saddleAxel.LookAt(targetPositioin); }
private void RotatePlayerModel(float x, float z, Vector3 move) { float modelAngle; float playerYRotation = _playerRef.localRotation.eulerAngles.y; playerYRotation = RotationUtilities.ScaleRotation(playerYRotation); if (move.magnitude > 0) { float modelTargetAngle = 90f - (z * 45f); playerYRotation = RotationUtilities.ScaleRotation(playerYRotation); modelAngle = Mathf.Lerp(playerYRotation, modelTargetAngle * x, _modelTurnInterpolation * Time.deltaTime); _playerRef.localRotation = Quaternion.Euler(0f, modelAngle, 0f); } else { if (_povScript.IsFirstPerson()) { modelAngle = Mathf.Lerp(playerYRotation, 0, _modelTurnInterpolation * Time.deltaTime); _playerRef.localRotation = Quaternion.Euler(0f, modelAngle, 0f); } } }