Esempio n. 1
0
    // 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);
    }
Esempio n. 2
0
    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);
            }
        }
    }