Движение игрока зависит от кадра даже при использовании Time.deltaTime.C#

Место общения программистов C#
Ответить
Anonymous
 Движение игрока зависит от кадра даже при использовании Time.deltaTime.

Сообщение Anonymous »

Я пытаюсь ради развлечения портировать игру моего друга Scratch на Unity, но код замедления заставляет игрока ускоряться и замедляться в зависимости от частоты кадров. Максимальная скорость X должна составлять 6,75, что соответствует 30 кадрам в секунду (обычная частота кадров Скретча), но при изменении FPS его скорость варьируется до ~7,5.
Код (незаконченный):

Код: Выделить всё

 using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
public Vector2 Velocity, WallJumpForce;
public float Acceleration, Decceleration;
public float Gravity, JumpForce;
public int TargetFPS;

void Update()
{
Velocity.y -= Gravity;
if(Input.GetKey("right") || Input.GetKey("d"))
Velocity.x += Acceleration * SDT();
if(Input.GetKey("left") || Input.GetKey("a"))
Velocity.x -= Acceleration * SDT();
Velocity.x -= Velocity.x*(1-Decceleration) * SDT();
Move(Velocity.x, 0);
Debug.Log(1 / Time.deltaTime + ", " + SDT());
Application.targetFrameRate = TargetFPS;
}

void Move(float x, float y) //Converts Scratch Units to Unity Units
{
transform.position += new Vector3(x, y, 0) * 1.2f * Time.deltaTime;
}

float SDT() //Basically allows Scratch variables designed for 30fps work in unity
{
return 30 * Time.deltaTime;
}
}
Я обнаружил, что изменение Velocity.x *= Decceleration * SDT();
на

Код: Выделить всё

Velocity.x -= Velocity.x*(1-Decceleration) * SDT();
помогает, но не решает проблему.
Для справки: это игра, которую я портирую.
https://scratch.mit.edu/projects/590825095

Подробнее здесь: https://stackoverflow.com/questions/725 ... -deltatime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»