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

Помогите решить ошибку в C# Скрипте

Андрей Зарецкий Ученик (57), на голосовании 1 неделю назад
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
public float speed;
public Rigidbody2D rb;


private void Update()
{
if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector2(speed, rb.velocity.y);
}
if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector2(-speed, rb.velocity.y);
}
}
}
Голосование за лучший ответ
GGG Просветленный (25627) 1 месяц назад
В представленном коде нет явных ошибок, но есть потенциальная проблема, которая может привести к нежелательному поведению.
Проблема:
Накопление скорости: При удержании клавиши D или A скорость по оси X будет постоянно увеличиваться, так как вы напрямую задаете rb.velocity. Это может привести к тому, что персонаж будет двигаться слишком быстро и неконтролируемо.
Решение:
Использовать AddForce: Вместо прямого задания скорости лучше использовать метод AddForce, который будет плавно изменять скорость объекта.
Исправленный код:
 using System; 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
public float speed;
public Rigidbody2D rb;

private void FixedUpdate() // Используйте FixedUpdate для физики
{
if (Input.GetKey(KeyCode.D))
{
rb.AddForce(new Vector2(speed, 0)); // Применяем силу по оси X
}
if (Input.GetKey(KeyCode.A))
{
rb.AddForce(new Vector2(-speed, 0)); // Применяем силу по оси X
}
}
}
Андрей ЗарецкийУченик (57) 1 месяц назад
Спасибо
Похожие вопросы