update - добавлено видео
Я сделал такие вещи, как вы можете видеть во многих учебниках и форумах:
No bounce
» Dynamic Friction = 0
и Static Friction = 0
Box collider
с Material = "No Bounce"
Mass = 1
, Drag = 0
и Angular Drag = 0
Теперь я добавляю еще один куб для земли, сделал его очень большим и добавил Box collider
с Material = "No Bounce"
У меня есть две проблемы: - когда они сталкиваются, куб отскакивает (в то время как он не должен с моей конфигурацией) - я создал скрипт и привязал его к кубу, чтобы изменить скорость и установить его в 0
когда есть коллизия:
using UnityEngine;
public class CubeProperties : MonoBehaviour
{
private Rigidbody _rb;
private bool _landing;
private void Start()
{
_rb = GetComponentInParent<Rigidbody>();
}
public void OnCollisionEnter(Collision collision)
{
Debug.Log("Collision");
_landing = true;
}
public void FixedUpdate()
{
if (!_landing) {
return;
}
_rb.velocity = Vector3.zero;
_landing = false;
}
}
Поэтому при первом столкновении я пытаюсь мгновенно остановить куб с помощью _rb.velocity = Vector3.zero;
, Но изменение скорости не влияет , я не понимаю, почему. Я пробовал со многими ценностями, чтобы узнать, что происходит ... но ничего не произошло. Единственное, что я могу добавить, и это работает, это: AddForce()
Я попытался отрицательное значение, но это тоже не сработает.
Что я забыл?
Вот видео, которое я надеюсь, это легко понять (и я надеюсь, что мне разрешено помочь с видео):
Всего 1 ответ
Похоже, ваше смешение 2D-физики и трехмерной физики вместе. Если это 2D-сцена, вы действительно захотите использовать 2D-ригидный корпус и Box Collider 2D .
Если это 3D-сцена, что и кажется, то вы просто хотите убедиться, что используете обычный OnCollisionEnter . В этом случае OnCollisionEnter2D не будет вызван в этой настройке.
Просто, чтобы помочь понять, как все вызвано, хорошим советом в Unity является Debug.Log . Он отправит сообщение на консоль, если оно будет запущено.