Поворот камеры

Программирование на Юнити.

Поворот камеры

Сообщение Xenomoros 15 июн 2023, 15:30

Добрый день, столкнулся с проблемой, пытаюсь написать отдачу, он должен поворачивать камеру по X(сначало для теста).
Но происходит просто эффект тряски, но сама камера не меняет градус поворота по X

Recoil.cs
Синтаксис:
Используется csharp
    public void recoil(GameObject cam, float x, float y, float z,GameObject gun)
    {
        if (Input.GetMouseButton(0))
        {
            if (gun.transform.parent != null)
            {
                if (gun.activeSelf == true)
                {
                    if (gun.GetComponent<Gun>().shootState != Gun.ShootState.Reloading && gun.GetComponent<Gun>().shootState != Gun.ShootState.NoAmmo)
                    {
                        Transform camTransform = cam.GetComponent<Transform>();
                        camTransform.rotation *= Quaternion.Euler(x, 0, 0);
                    }
                    else if (gun.GetComponent<Gun>().shootState == Gun.ShootState.Reloading && gun.GetComponent<Gun>().shootState == Gun.ShootState.NoAmmo)
                    {

                    }
                }
                else if (gun.activeSelf == false)
                {

                }
            }
        }
    }
 


На всякий случай, скрипт поворота камеры:
CameraRotation.cs
Синтаксис:
Используется csharp
public class CameraRotation : MonoBehaviour
{
    [Header("Настройки камеры")]
    [SerializeField]
    public float sensitivity = 5.0f;
    [SerializeField]
    public float smoothing = 2.0f;
    // the chacter is the capsule
    public double maxRotationX = 80.0;
    public float _MRotationX = 1;
    public GameObject character;

    // get the incremental value of mouse moving
    private Vector2 mouseLook;
    // smooth the mouse moving
    private Vector2 smoothV;
    private Quaternion camRotation;
    // Use this for initialization
    void Start()
    {
        camRotation = transform.localRotation;
        character = this.transform.parent.gameObject;
    }

    // Update is called once per frame
    void Update()
    {

        // md is mosue delta
        var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
        md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
        // the interpolated float result between the two float values
        //Get X value and limit it
        camRotation.x += Input.GetAxis("Mouse Y") * smoothing * (-1);
        camRotation.y += Input.GetAxis("Mouse X") * smoothing;
        smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
        smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
        // incrementally add to the camera look
        mouseLook += smoothV;
        camRotation.x = Mathf.Clamp(camRotation.x, -70, 80);
        // vector3.right means the x-axis
        transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
        character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
        transform.localRotation = Quaternion.Euler(camRotation.x, 0, 0);
    }
}
 


Так же если можете подскажите как наиболее качественее сделать отдачу.
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Поворот камеры

Сообщение Alkos26Rus 15 июн 2023, 18:33

Синтаксис:
Используется csharp
transform.localRotation = Quaternion.Euler(camRotation.x, 0, 0);

Ну у тебя назначается поворот камеры уже, а из другого скрипта ты так же пытаешься ее крутить для отдачи, вот и происходит дергание. Создай дочерний объект для камеры и повесь на него аниматор, запиши нужные анимации для разных типов отдачи и включай их при стрельбе
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Поворот камеры

Сообщение Xenomoros 15 июн 2023, 18:39

Alkos26Rus писал(а):
Синтаксис:
Используется csharp
transform.localRotation = Quaternion.Euler(camRotation.x, 0, 0);

Ну у тебя назначается поворот камеры уже, а из другого скрипта ты так же пытаешься ее крутить для отдачи, вот и происходит дергание. Создай дочерний объект для камеры и повесь на него аниматор, запиши нужные анимации для разных типов отдачи и включай их при стрельбе


Пытался делать анимацию отдачи, но другой вопрос как сделать когда модель это сфера. Так же вопрос почему при воспроизведении анимации камера не двигается от мыши.
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25

Re: Поворот камеры

Сообщение Alkos26Rus 15 июн 2023, 19:08

Xenomoros писал(а):Пытался делать анимацию отдачи, но другой вопрос как сделать когда модель это сфера.

Какая разница какая модель, анимацию отдачи хоть на пустом объекте можно делать, это же для камеры анимация.

Xenomoros писал(а):Так же вопрос почему при воспроизведении анимации камера не двигается от мыши.

Потому что на дочерний объект нужно вешать аниматор и этот же дочерний объект двигать\крутить при записи анимации
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Поворот камеры

Сообщение Xenomoros 15 июн 2023, 19:35

Спасибо большое за ответ.
Xenomoros
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2023, 11:25


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15