Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Игрок очень рвано ходит на unity

Slepik Алексеев Ученик (99), на голосовании 4 месяца назад
вот скрипт игрока :
 [SerializeField]private int speed; 
[SerializeField] private float offset;

private Vector2 moveInput;
private Vector2 moveVelocity;
private Rigidbody2D rb;

private void Start()
{
rb = GetComponent();
}
private void Update()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotZ = Mathf.Atan2(difference.y , difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);


moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
//speed = speed + PlayerPrefs.GetInt("PlayerSpeed");
moveVelocity = moveInput * speed;
}
private void FixedUpdate()
{
rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Чтобы сделать движение игрока более плавным, можно внести несколько изменений в ваш скрипт. Проблема может быть связана с тем, что вы используете MovePosition в методе FixedUpdate, что иногда может вызывать "рывки". Вместо этого можно использовать velocity для задания скорости движения напрямую.
 [SerializeField] private int speed;  
[SerializeField] private float offset;

private Vector2 moveInput;
private Rigidbody2D rb;

private void Start()
{
rb = GetComponent();
}

private void Update()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);

moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
}

private void FixedUpdate()
{
Vector2 moveVelocity = moveInput * speed;
rb.velocity = moveVelocity;
}
Похожие вопросы