2D обнаружение столкновений при использовании transform.position. Как включить? - PullRequest
0 голосов
/ 04 июля 2019

Я только начал с единицы и последовал своему примеру проекта 2D НЛО. Стремясь расширить его, я придумал причудливый способ управления своим игроком.

Он всегда движется по круговым путям, и как только я нажимаю кнопку, направление круга изменяется, и воображаемый центр круга пересекается, как показано на рисунке ниже. Это позволяет вам перемещаться по фигуре 8 или S, и это довольно забавно.

enter image description here Однако, как только я понял, как сделать это движение, объект игрока больше не обнаруживал столкновения. В исходном примере вся обработка Movemet выполняется внутри FixedUpdate (). Я, однако, использую Update (), так как первый, кажется, вообще не работает с моим кодом (т.е. вообще не перемещается).

Это мой код движения:

public class ControlledRotation : MonoBehaviour
{
    public float radius = 3f;
    public float speed = 3f;

    private float timeCounter = 0;
    private float direction = 1f;
    private Vector3 offset;

    private Rigidbody2D rb2d;
    void Start()
    {
    offset = transform.position;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            //change the offset from the circle center and the rotation direction on keypress
            offset += new Vector3(Mathf.Cos(timeCounter), Mathf.Sin(timeCounter), 0) * radius * direction * 2;
            direction *= -1;
        }
        timeCounter += Time.deltaTime * direction * speed;
        transform.position = new Vector3(Mathf.Cos(timeCounter), Mathf.Sin(timeCounter)) * radius * direction + offset;    
    }
}

Объект Plyer имеет 2D твердое тело и 2D Collider Collect. У кошельков, с которыми это должно столкнуться, есть Box Collider 2D. Тем не менее, НЛО может просто пройти стены. Я предполагаю вероятную причину в том, что я просто изменяю transform.position или поскольку я использую Update / FixedUpdate неправильно.

Если вам посоветуют, как я могу сохранить выбранный механизм управления движением и при этом столкнуться с объектами, я был бы очень признателен:)

Edit: Я чувствую, что мне нужно пойти с использованием твердого тела и приложить некоторую силу ... но я не понял, как воспроизвести это движение с помощью сил, а также силы, кажется, не очень четкие в ответ

1 Ответ

0 голосов
/ 04 июля 2019

Когда вам нужно переместить объект, имеющий твердое тело, вам нужно переместить его, используя силы, вы не можете сделать это только с помощью transform.position, он игнорирует физику. вот почему вы не можете обнаружить столкновение .. Я предлагаю вам переместить его так. У меня есть несколько примеров, когда мне приходилось перемещать персонажа, который должен был взаимодействовать с физикой.

gameObject.GetComponent<Rigidbody>().velocity = Vector3.zero;

А это для перемещения в определенных направлениях:

//Keys for controlling the player (move and shoot) only when he's alive
if (Input.GetKey(KeyCode.UpArrow) && alive)
{
  GetComponent<Rigidbody>().MovePosition(transform.position + Vector3.forward * Time.deltaTime * 4);
}
if (Input.GetKey(KeyCode.DownArrow) && alive)
{
 GetComponent<Rigidbody>().MovePosition(transform.position + Vector3.back * Time.deltaTime * 4);
}

Надеюсь, это поможет .. Привет :) 1007 *

...