Страница 1 из 1

Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 19:57
strusik
Я создаю игру, в которой надо ловить падающие мячи в корзинку, но столкнулся с проблемой, что мячи лежащие внутри корзины проскакивают сквозь стенки, если корзину слишком резко двинуть в какую либо из сторон. Я лазил по просторам гугла и там много было советов, по поводу того, чтобы в настройках Rigidbody объекта менять Collision detection, я это пробовал, а также пробовал осуществлять движение через transform.position и через Rigidbody, но ни один из вариантов не сработал. И у мячей, и у корзины есть коллайдеры и Rigidbody.

А вот скрипт по которому происходит движение на данный момент:
Скрытый текст:
Код: Выделить всё
public Rigidbody player;

   void OnMouseDrag () {
       Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
       player.GetComponent<Rigidbody>().position = new Vector3(mousePosition.x, player.position.y, 15);
   }



Изображение

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 20:06
1max1
player.GetComponent<Rigidbody>().position

Ну все понятно. Уже наверное раз 250 отвечал на такие вопросы. Двигать нужно через velocity или addForce, но лучше первое.

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 20:07
strusik
1max1 писал(а):
player.GetComponent<Rigidbody>().position

Ну все понятно. Уже наверное раз 250 отвечал на такие вопросы. Двигать нужно через velocity или addForce, но лучше первое.

velocity уже пробовал, просто удалил код старый, не сработало.
Ну или можно пример с velocity, может я не правильно что-то делал?

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 20:31
1max1
Почему в 2д игре у тебя rb, а не rb2d?
Синтаксис:
Используется csharp
    public Rigidbody2D player;

    void OnMouseDrag()
    {
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        player.velocity = (mousePosition - player.position).normalized * 999999.0f;
    }

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 20:38
strusik
1max1 писал(а):Почему в 2д игре у тебя rb, а не rb2d?
Синтаксис:
Используется csharp
    public Rigidbody2D player;

    void OnMouseDrag()
    {
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        player.velocity = (mousePosition - player.position).normalized * 999999.0f;
    }

Просто шарики и корзина это 3д объекты, из-за ракурса камеры этого не видно

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 21:02
strusik
1max1 писал(а):Почему в 2д игре у тебя rb, а не rb2d?
Синтаксис:
Используется csharp
    public Rigidbody2D player;

    void OnMouseDrag()
    {
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        player.velocity = (mousePosition - player.position).normalized * 999999.0f;
    }


Теперь корзина вообще не перемещается по какой-то причине

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 23:15
immeasurability
я бы сделал коллайдер размером емкости стакана
и фиксировал бы в момент когда шар попадает в стакан в список
при перемещение стакана проходился по массиву и двигал дополнительно шары в стакане

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 18 ноя 2019, 23:36
strusik
immeasurability писал(а):я бы сделал коллайдер размером емкости стакана
и фиксировал бы в момент когда шар попадает в стакан в список
при перемещение стакана проходился по массиву и двигал дополнительно шары в стакане


Дело в том, что эта штука с пролётом сквозь стенку работает и наоборот, то-есть шарик точно также может и наоборот влететь снаружи в стакан, так что всё таки надо решить именно эту проблему с пролётом сквозь стенку

Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 19 ноя 2019, 00:12
1max1
Если скорость очень большая, только руками (скриптом) фиксировать позицию шара, чтобы он не вылетал. Я только что проверил, велосити не дает 100% непроходимости, хотя если поставить continuous dynamic, довольно неплохо.


Re: Объекты проходят сквозь друг друга.

СообщениеДобавлено: 19 ноя 2019, 00:55
strusik
1max1 писал(а):Если скорость очень большая, только руками (скриптом) фиксировать позицию шара, чтобы он не вылетал. Я только что проверил, велосити не дает 100% непроходимости, хотя если поставить continuous dynamic, довольно неплохо.



Спасибо за видос и за ответы) Может мне стоит попробовать увеличить толщину стенок? Потому что у меня шарики вылетают даже при более маленькой скорости.

Update:

Методом мучений и неудачных попыток я таки сделал то, что надо и ничего не выскакивает из корзины, код ниже прикрепил. Но есть одно "но", мне нужно, чтобы корзинка двигалась плавно и быстро, а если поставить высокую скорость, то она двигается с рывками

Синтаксис:
Используется csharp
Rigidbody2D rb;
    float speed = 5.0f;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        StartCoroutine(c_move());
    }

    IEnumerator c_move()
    {
        while (true)
        {
            Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            int pos = Mathf.RoundToInt(mousePosition.x - rb.position.x);
            rb.velocity = (Vector2.right * pos) * speed;            
            yield return null;
        }        
    }