Как я могу ограничить вращение камеры по оси Y? Помоги мне §

#c# #unity3d #controller #camera

Вопрос:

Я не могу ограничить вращение по оси Y , а также я бы попросил своего игрока смотреть в том направлении, в котором он движется, я уже пытался поставить Mathf.calmp для сенсорного экрана.Touchdist.y (ось Y камеры), но это не работает, я не знаю, откуда взялась проблема, но я хотел бы ее решить, поэтому, пожалуйста, помогите мне. вот мой код :

     public FloatingJoystick joystick;
    public TouchField touchField;
    public GameObject FocusPoint;

    [HideInInspector] public CharacterController characterController;
    [HideInInspector] public Vector3 motionVector , gravityVector, RelativeVector;

    [Header("Player Settings")]
    [Range(0,6)] public float PlayerSpeed = 2.5f;
    [Range(0, 100)] public float Sensivility = 50;
    [Range(0, 0.5f)] public float groundClearance;

    private float gravityForce = -9.18f;
    private float gravityPower = -9.8f;
    private float JumpValue = 9.8f;
    private float TurnDiraction;

    private void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    private void Update()
    {
        Movment();
        CameraController();

        if (characterController.isGrounded)
        {
            print("Grounded");
        }

    }

    public void CameraController()
    {
        RelativeVector = transform.InverseTransformPoint(FocusPoint.transform.position);
        RelativeVector /= RelativeVector.magnitude;
        TurnDiraction = (RelativeVector.x / RelativeVector.magnitude);
        FocusPoint.transform.eulerAngles = new Vector3(FocusPoint.transform.eulerAngles.x   touchField.TouchDist.y, FocusPoint.transform.eulerAngles.y, 0) ;
        FocusPoint.transform.parent.Rotate(transform.up * touchField.TouchDist.x * Sensivility * Time.deltaTime);

    }

    public void Movment()
    {
        if (characterController.isGrounded amp;amp; gravityVector.y < 0)
        {
            gravityVector.y = -2;
        }

        gravityVector.y  = gravityPower * Time.deltaTime;
        characterController.Move(gravityVector * Time.deltaTime);

        if (characterController.isGrounded)
        {
            motionVector = transform.right * joystick.Horizontal   transform.forward * joystick.Vertical;
            characterController.Move(motionVector * PlayerSpeed * Time.deltaTime);

            if(joystick.Vertical > 0)
            {
                transform.Rotate(transform.up * TurnDiraction * 800 * Time.deltaTime);
                FocusPoint.transform.parent.Rotate(transform.up * -TurnDiraction * 800 * Time.deltaTime);
            }
        }

    }
 

Ответ №1:

Вы вращаетесь в 2 шага, а во втором и во втором вы делаете:

FocusPoint.transform.parent.Rotate(transform.up * touchField.TouchDist.x * Sensivility * Time.deltaTime);

Если вы поворачиваете родителя относительно оси y, все дочерние элементы поворачиваются вместе с поворотом, заданным родителю в иерархии. Поэтому не имеет значения, что вы зафиксировали поворот y на предыдущем шаге

FocusPoint.transform.eulerAngles = new Vector3(FocusPoint.transform.eulerAngles.x touchField.TouchDist.y, FocusPoint.transform.eulerAngles.y, 0);

если игровой объект будет повернут относительно оси y после.

Попробуйте вращаться сразу в соответствии с вашими ограничениями или примите во внимание эти ограничения для всех шагов вращения.

С другой стороны, гравитация-это не сила и не сила, а ускорение 🙂