На данный вопрос уже ответили:
Для начала шар больше размером и физически не может пролезть через этот проход, но когда шар застревает между двумя объектами, во-первых его начинает трясти туда сюда , во-вторых когда шар выходит на свободное пространство , то самопроизвольно начинает двигаться медленно направо, после того как его потрясло. Как это можно исправить? Я искал ответ в интернете, наверное не смог правильно сформулировать вопрос или что, но не нашел ответа как это исправить.
void FixedUpdate()
{
if (allBlock)
{
if (Input.GetKey(KeyCode.A))
{
transform.position += new Vector3(-0.1f * Time.fixedDeltaTime * speed, 0, 0);
}
if (Input.GetKey(KeyCode.D))
{
transform.position += new Vector3(0.1f * Time.fixedDeltaTime * speed, 0, 0);
}
if (Input.GetKey(KeyCode.W))
{
transform.position += new Vector3(0, 0.1f * Time.fixedDeltaTime * speed, 0);
}
if (!Input.GetKeyUp(KeyCode.W))
{
transform.position += new Vector3(0, -0.1f * Time.fixedDeltaTime * speedY, 0);
}
}
if (!allBlock)
{
transform.position += new Vector3(0, 0.5f * Time.fixedDeltaTime * speedY, 0);
}
}
Я сделал так и все работает . Знаю это все не правильно, жду критики и советов.
public float speedVelocity = 2;
public float speedVelocityDown = 1;
bool allBlock = true;
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (allBlock)
{
if (Input.GetKey(KeyCode.A))
{
if (Input.GetKey(KeyCode.W))
{
rb.velocity = new Vector3(-speedVelocity, speedVelocity, 0);
}
else if (!Input.GetKey(KeyCode.W))
{
rb.velocity = new Vector3(-speedVelocity, -speedVelocityDown, 0);
}
rb.AddForce(Vector3.left * Time.fixedDeltaTime);
}
if (Input.GetKey(KeyCode.D))
{
if (Input.GetKey(KeyCode.W))
{
rb.velocity = new Vector3(speedVelocity, speedVelocity, 0);
}
else if (!Input.GetKey(KeyCode.W))
{
rb.velocity = new Vector3(speedVelocity, -speedVelocityDown, 0);
}
rb.AddForce(Vector3.right * Time.fixedDeltaTime);
}
if (Input.GetKey(KeyCode.W))
{
if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector3(-speedVelocity, speedVelocity, 0);
}
else if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector3(speedVelocity, speedVelocity, 0);
}
else
rb.velocity = new Vector3(0, speedVelocity, 0);
rb.AddForce(Vector3.up * Time.fixedDeltaTime);
}
if (!Input.GetKey(KeyCode.W))
{
if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector3(speedVelocity, -speedVelocityDown, 0);
}
else if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector3(-speedVelocity, -speedVelocityDown, 0);
}
else
{
rb.velocity = new Vector3(0, -speedVelocityDown, 0);
}
rb.AddForce(Vector3.down * Time.fixedDeltaTime);
}
}
if (!allBlock)
{
rb.velocity = new Vector3(0, speedVelocity, 0);
rb.AddForce(Vector3.up * Time.fixedDeltaTime);
}
}
private void OnTriggerStay(Collider other)
{
if (other.gameObject.name == "Finish")
{
allBlock = false;
}
}
Физика как у шара в реальном мире , которой можно управлять.
после твоей обновляхи вопроса видно что что проблема в п.1. Ты занимаешся телепортированием обьекта))
Так же полезно будет почитать: Правильная реализация передвижения персонажа | почему мой персонаж дергается | для чего нужен Time.deltaTime
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется datagrigview к которому через datasource привязывается list<> с данными В list<> содержатся ид для подгрузки значений из других массивов Нашел...
Нужно получить значение из первой ячейки из строки DataGrid'а
Это перевод вопроса Why does query string parameter get included twice - aspnet boolean
Пытался сглаживать в Quality Anti Aliasing, но не помогает