Элементы, все еще подпрыгивающие

update - добавлено видео

Я сделал такие вещи, как вы можете видеть во многих учебниках и форумах:

  • создал физический материал, который я назвал « No bounce »
  • set Dynamic Friction = 0 и Static Friction = 0
  • создал куб и добавил Box collider с Material = "No Bounce"
  • set 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() Я попытался отрицательное значение, но это тоже не сработает.

Что я забыл?

Вот видео, которое я надеюсь, это легко понять (и я надеюсь, что мне разрешено помочь с видео):

https://youtu.be/I3C1KBmm5yw

Всего 1 ответ


Похоже, ваше смешение 2D-физики и трехмерной физики вместе. Если это 2D-сцена, вы действительно захотите использовать 2D-ригидный корпус и Box Collider 2D .

Если это 3D-сцена, что и кажется, то вы просто хотите убедиться, что используете обычный OnCollisionEnter . В этом случае OnCollisionEnter2D не будет вызван в этой настройке.

Просто, чтобы помочь понять, как все вызвано, хорошим советом в Unity является Debug.Log . Он отправит сообщение на консоль, если оно будет запущено.


Есть идеи?

10000