@FinchRED

Как отвязать зависимость от частоты кадров для Rigidbody.AddRelativeForce?

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class rocket : MonoBehaviour
{
    Rigidbody rigidB;
    AudioSource audioSource;
    [SerializeField] float rotSpeed = 100.2f;
    [SerializeField] float flySpeed = 100.2f;
    // Start is called before the first frame update
    void Start()
    {
        rigidB = GetComponent<Rigidbody>();
        audioSource = GetComponent<AudioSource>();
      
    }

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

        Launch();
        Rotation();
       
    }

    void Launch()
    {
       float flyingSpeed = flySpeed * Time.deltaTime;
        if (Input.GetKey(KeyCode.Space))
        {
            


            rigidB.AddRelativeForce(Vector3.up * flyingSpeed );
            if (audioSource.isPlaying == false)
            {
                audioSource.Play();
            }
        }
        else
        {
            audioSource.Pause();
        }
    }

    void Rotation()
    {
        float rotationSpeed = rotSpeed * Time.deltaTime;
        rigidB.freezeRotation = true;
        if (Input.GetKey(KeyCode.A))
        {
            transform.Rotate(Vector3.forward*rotationSpeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Rotate(-Vector3.forward*rotationSpeed);
            print("rigth");
        }
        rigidB.freezeRotation = false;

    }
}


transform.Rotate(-Vector3.forward*rotationSpeed);
Поворот работает.
Но такой же подход не хляет для движения почему-то.
Y позиция просто колебается и всё.
Если же вместо flyingSpeed использовать сразу flySpeed . Движение есть, но зависимое от fps. Что неправильно.
rigidB.AddRelativeForce(Vector3.up * flyingSpeed );
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@NIKROTOS
Начинающий программист.
fixedupdate пробовал?
Когда ты нажимаешь пробел, вектор силы не зависит от update, но после первого тика уже идёт обработка без учёта deltaTime(действие скрипта заканчивается и следующая позиция рассчитывается движком в обычном режиме)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Хоть через раз заглядывать в документацию. Все примеры с физикой идут через FixedUpdate
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы