@p4p

Проблема с LookAt объекта в цент камеры, как исправить?

Все никак не получу нужный результат. У игрока в руках оружие, я хочу чтобы оно плавно следило за камерой. Проблемы начинаются когда я смотрю на игрока с лицевой стороны. Я делаю ограничение вращения, и в итоге я получаю только минимальный или максимальный угол:

lookAtPoint = Application.instance.MainCamera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 20f));
var rotation = Quaternion.LookRotation(lookAtPoint - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * 10);

transform.eulerAngles = new Vector3(ClampAngle(transform.eulerAngles.x, -6, 10), ClampAngle2(transform.eulerAngles.y, 300, 340), 0);


public float ClampAngle(float angle, float min, float max)
        {

            if (angle < 90 || angle > 270)
            {       // if angle in the critic region...
                if (angle > 180) angle -= 360;  // convert all angles to -180..+180
                if (max > 180) max -= 360;
                if (min > 180) min -= 360;
            }
            angle = Mathf.Clamp(angle, min, max);
            if (angle < 0) angle += 360;  // if angle negative, convert to 0..360
            return angle;
        }

        protected float ClampAngle2(float angle, float min, float max)
        {

            angle = NormalizeAngle(angle);
            if (angle > 180)
            {
                angle -= 360;
            }
            else if (angle < -180)
            {
                angle += 360;
            }

            min = NormalizeAngle(min);
            if (min > 180)
            {
                min -= 360;
            }
            else if (min < -180)
            {
                min += 360;
            }

            max = NormalizeAngle(max);
            if (max > 180)
            {
                max -= 360;
            }
            else if (max < -180)
            {
                max += 360;
            }

            // Aim is, convert angles to -180 until 180.
            return Mathf.Clamp(angle, min, max);
        }

        protected float NormalizeAngle(float angle)
        {
            while (angle > 360)
                angle -= 360;
            while (angle < 0)
                angle += 360;
            return angle;
        }


данный вариант нормально работает когда я смотрю со спины, но когда прокручу и посмотрю с лица - оружие дергается между двумя значениями.
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы