Почему проверки столкновений в Unity2D дают различные результаты? - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь воссоздать AA в Unity2D, чтобы узнать, как все работает, я использую учебник YouTube, чтобы помочь мне в этом, и у меня есть точный код в видео, но он, похоже, не работаетправильно, штифты не остановятся в то же время, когда они касаются вращающегося шара (см. ниже).Некоторые перейдут на половину шара, а другие остановятся преждевременно.

Pin heights differing

Вот пин-код (Pin.cs):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pin : MonoBehaviour {

    private bool moving = true;

    public float speed = 20f;
    public Rigidbody2D rb;

    void Update() {
        if (moving)
            rb.MovePosition(rb.position + Vector2.up * speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collider) {
        if (collider.tag == "Rotator") {
            moving = false;
            transform.SetParent(collider.transform);
        }
    }
}

1 Ответ

0 голосов
/ 07 октября 2018

Просто используйте FixedUpdate() вместо Update().

См. Документация Unity - FixedUpdate ссылка, FixedUpdate() следует использовать вместо Update() при работе с Rigidbody.

Итак, измените свой код так:

public class Pin : MonoBehaviour
{
    ...

    void FixedUpdate() 
    {
        if (moving)
            rb.MovePosition(rb.position + Vector2.up * speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collider) 
    {
        ...
    }
}

Надеюсь, это поможет вам.

...