Объекты с Rigidbody без включенного isKinematic нежелательно перемещать через Transform (в данном случае Translate), написано в конце. Надо применять силу (AddForce) или изменять скорость (velocity). Пример со скоростью:
Код
using UnityEngine;
public class Move : MonoBehaviour
{
public float playerSpeed = 5.0f;
float transV;
float transH;
void FixedUpdate()
{
GetKeyFun();
GetComponent<Rigidbody2D>().velocity = new Vector3(transH, transV, 0) * playerSpeed;
}
void GetKeyFun()
{
if (Input.GetKey(KeyCode.UpArrow))
{
transH = 0;
transV = 1.0f;
}
if (Input.GetKey(KeyCode.DownArrow))
{
transH = 0;
transV = -1.0f;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transH = -1.0f;
transV = 0;
}
if (Input.GetKey(KeyCode.RightArrow))
{
transH = 1.0f;
transV = 0;
}
}
}
В данном примере transH и transV указывают направление. Лучше сделать проверку и изменять скорость только если нажата клавиша. Вместо GetKey() можно использовать GetAxis() или GetAxisRaw(). Вообще здесь много нюансов.